Skip to content

Commit c1ad924

Browse files
committed
Implement a fullscreen on Linux
This provides a 'toggleFullscreen' method on the xWindowCanvas. Sending this message will enter or exit fullscreen mode. In fullscreen mode the window decorations are removed and the window takes up the entire screen area, covering any window manager panels, etc. To call it the following suffices: desktop w winCanvases first toggleFullscreen
1 parent ab0bceb commit c1ad924

File tree

7 files changed

+634
-24
lines changed

7 files changed

+634
-24
lines changed

objects/glue/xlib.primMaker.hh

Lines changed: 198 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,18 @@ false, /* can be constant folded */ \
616616
true, /* cannot be moved or cut */ \
617617
true, /* can walk stack */ \
618618
true, /* can abort process */ \
619+
"Generated by the primitive maker" },\
620+
\
621+
{ "XSendEventxSendEventToWindow:Propogate:EventMask:Event:", \
622+
fntype(&XSendEvent_XSendEventToWindow_Propogate_EventMask_Event__glue), \
623+
ExternalPrimitive, \
624+
IntegerPrimType, \
625+
true, /* can fail */ \
626+
true, /* can scavenge */ \
627+
false, /* can be constant folded */ \
628+
true, /* cannot be moved or cut */ \
629+
true, /* can walk stack */ \
630+
true, /* can abort process */ \
619631
"Generated by the primitive maker" },\
620632
\
621633
{ "XSetWMProtocol_wrapxSetWMProtocolOfWindow:Protocol:", \
@@ -2686,6 +2698,126 @@ false, /* can be constant folded */ \
26862698
true, /* cannot be moved or cut */ \
26872699
false, /* can walk stack */ \
26882700
false, /* can abort process */ \
2701+
"Generated by the primitive maker" },\
2702+
\
2703+
{ "XClientMessageEvent_newnewResultProxy", \
2704+
fntype(&XClientMessageEvent_new_New_glue), \
2705+
ExternalPrimitive, \
2706+
UnknownPrimType, \
2707+
true, /* can fail */ \
2708+
false, /* can scavenge */ \
2709+
false, /* can be constant folded */ \
2710+
true, /* cannot be moved or cut */ \
2711+
false, /* can walk stack */ \
2712+
false, /* can abort process */ \
2713+
"Generated by the primitive maker" },\
2714+
\
2715+
{ "XClientMessageEvent_typetype:", \
2716+
fntype(&XClientMessageEvent_type_Type__glue), \
2717+
ExternalPrimitive, \
2718+
UnknownPrimType, \
2719+
true, /* can fail */ \
2720+
false, /* can scavenge */ \
2721+
false, /* can be constant folded */ \
2722+
true, /* cannot be moved or cut */ \
2723+
false, /* can walk stack */ \
2724+
false, /* can abort process */ \
2725+
"Generated by the primitive maker" },\
2726+
\
2727+
{ "XClientMessageEvent_serialserial", \
2728+
fntype(&XClientMessageEvent_serial_Serial_glue), \
2729+
ExternalPrimitive, \
2730+
IntegerPrimType, \
2731+
true, /* can fail */ \
2732+
false, /* can scavenge */ \
2733+
false, /* can be constant folded */ \
2734+
true, /* cannot be moved or cut */ \
2735+
false, /* can walk stack */ \
2736+
false, /* can abort process */ \
2737+
"Generated by the primitive maker" },\
2738+
\
2739+
{ "XClientMessageEvent_serialserial:", \
2740+
fntype(&XClientMessageEvent_serial_Serial__glue), \
2741+
ExternalPrimitive, \
2742+
UnknownPrimType, \
2743+
true, /* can fail */ \
2744+
false, /* can scavenge */ \
2745+
false, /* can be constant folded */ \
2746+
true, /* cannot be moved or cut */ \
2747+
false, /* can walk stack */ \
2748+
false, /* can abort process */ \
2749+
"Generated by the primitive maker" },\
2750+
\
2751+
{ "XClientMessageEvent_send_eventsendEvent", \
2752+
fntype(&XClientMessageEvent_send_event_SendEvent_glue), \
2753+
ExternalPrimitive, \
2754+
BooleanPrimType, \
2755+
true, /* can fail */ \
2756+
false, /* can scavenge */ \
2757+
false, /* can be constant folded */ \
2758+
true, /* cannot be moved or cut */ \
2759+
false, /* can walk stack */ \
2760+
false, /* can abort process */ \
2761+
"Generated by the primitive maker" },\
2762+
\
2763+
{ "XClientMessageEvent_send_eventsendEvent:", \
2764+
fntype(&XClientMessageEvent_send_event_SendEvent__glue), \
2765+
ExternalPrimitive, \
2766+
UnknownPrimType, \
2767+
true, /* can fail */ \
2768+
false, /* can scavenge */ \
2769+
false, /* can be constant folded */ \
2770+
true, /* cannot be moved or cut */ \
2771+
false, /* can walk stack */ \
2772+
false, /* can abort process */ \
2773+
"Generated by the primitive maker" },\
2774+
\
2775+
{ "XClientMessageEvent_displaydisplayResultProxy:", \
2776+
fntype(&XClientMessageEvent_display_Display_glue), \
2777+
ExternalPrimitive, \
2778+
UnknownPrimType, \
2779+
true, /* can fail */ \
2780+
false, /* can scavenge */ \
2781+
false, /* can be constant folded */ \
2782+
true, /* cannot be moved or cut */ \
2783+
false, /* can walk stack */ \
2784+
false, /* can abort process */ \
2785+
"Generated by the primitive maker" },\
2786+
\
2787+
{ "XClientMessageEvent_displaydisplay:", \
2788+
fntype(&XClientMessageEvent_display_Display__glue), \
2789+
ExternalPrimitive, \
2790+
UnknownPrimType, \
2791+
true, /* can fail */ \
2792+
false, /* can scavenge */ \
2793+
false, /* can be constant folded */ \
2794+
true, /* cannot be moved or cut */ \
2795+
false, /* can walk stack */ \
2796+
false, /* can abort process */ \
2797+
"Generated by the primitive maker" },\
2798+
\
2799+
{ "XClientMessageEvent_windowwindowResultProxy:", \
2800+
fntype(&XClientMessageEvent_window_Window_glue), \
2801+
ExternalPrimitive, \
2802+
UnknownPrimType, \
2803+
true, /* can fail */ \
2804+
false, /* can scavenge */ \
2805+
false, /* can be constant folded */ \
2806+
true, /* cannot be moved or cut */ \
2807+
false, /* can walk stack */ \
2808+
false, /* can abort process */ \
2809+
"Generated by the primitive maker" },\
2810+
\
2811+
{ "XClientMessageEvent_windowwindow:", \
2812+
fntype(&XClientMessageEvent_window_Window__glue), \
2813+
ExternalPrimitive, \
2814+
UnknownPrimType, \
2815+
true, /* can fail */ \
2816+
false, /* can scavenge */ \
2817+
false, /* can be constant folded */ \
2818+
true, /* cannot be moved or cut */ \
2819+
false, /* can walk stack */ \
2820+
false, /* can abort process */ \
26892821
"Generated by the primitive maker" },\
26902822
\
26912823
{ "XClientMessageEvent_message_typemessage_typeResultProxy:", \
@@ -2698,6 +2830,18 @@ false, /* can be constant folded */ \
26982830
true, /* cannot be moved or cut */ \
26992831
false, /* can walk stack */ \
27002832
false, /* can abort process */ \
2833+
"Generated by the primitive maker" },\
2834+
\
2835+
{ "XClientMessageEvent_message_typemessage_type:", \
2836+
fntype(&XClientMessageEvent_message_type_Message_type__glue), \
2837+
ExternalPrimitive, \
2838+
UnknownPrimType, \
2839+
true, /* can fail */ \
2840+
false, /* can scavenge */ \
2841+
false, /* can be constant folded */ \
2842+
true, /* cannot be moved or cut */ \
2843+
false, /* can walk stack */ \
2844+
false, /* can abort process */ \
27012845
"Generated by the primitive maker" },\
27022846
\
27032847
{ "XClientMessageEvent_formatformat", \
@@ -2710,6 +2854,18 @@ false, /* can be constant folded */ \
27102854
true, /* cannot be moved or cut */ \
27112855
false, /* can walk stack */ \
27122856
false, /* can abort process */ \
2857+
"Generated by the primitive maker" },\
2858+
\
2859+
{ "XClientMessageEvent_formatformat:", \
2860+
fntype(&XClientMessageEvent_format_Format__glue), \
2861+
ExternalPrimitive, \
2862+
UnknownPrimType, \
2863+
true, /* can fail */ \
2864+
false, /* can scavenge */ \
2865+
false, /* can be constant folded */ \
2866+
true, /* cannot be moved or cut */ \
2867+
false, /* can walk stack */ \
2868+
false, /* can abort process */ \
27132869
"Generated by the primitive maker" },\
27142870
\
27152871
{ "XClientMessageEvent_atomAt_wrapatomAt:ResultProxy:", \
@@ -2724,8 +2880,32 @@ false, /* can walk stack */ \
27242880
false, /* can abort process */ \
27252881
"Generated by the primitive maker" },\
27262882
\
2727-
{ "XClientMessageEvent_windowwindowResultProxy:", \
2728-
fntype(&XClientMessageEvent_window_Window_glue), \
2883+
{ "XClientMessageEvent_at_Atom_wrapat:Atom:", \
2884+
fntype(&XClientMessageEvent_at_Atom_wrap_At_Atom__glue), \
2885+
ExternalPrimitive, \
2886+
UnknownPrimType, \
2887+
true, /* can fail */ \
2888+
false, /* can scavenge */ \
2889+
false, /* can be constant folded */ \
2890+
true, /* cannot be moved or cut */ \
2891+
false, /* can walk stack */ \
2892+
false, /* can abort process */ \
2893+
"Generated by the primitive maker" },\
2894+
\
2895+
{ "XClientMessageEvent_at_Long_wrapat:Long:", \
2896+
fntype(&XClientMessageEvent_at_Long_wrap_At_Long__glue), \
2897+
ExternalPrimitive, \
2898+
UnknownPrimType, \
2899+
true, /* can fail */ \
2900+
false, /* can scavenge */ \
2901+
false, /* can be constant folded */ \
2902+
true, /* cannot be moved or cut */ \
2903+
false, /* can walk stack */ \
2904+
false, /* can abort process */ \
2905+
"Generated by the primitive maker" },\
2906+
\
2907+
{ "XClientMessageEvent_deletebasicDelete", \
2908+
fntype(&XClientMessageEvent_delete_BasicDelete_glue), \
27292909
ExternalPrimitive, \
27302910
UnknownPrimType, \
27312911
true, /* can fail */ \
@@ -4430,6 +4610,7 @@ Please do not change it manually. -- dmu 12/91 */\
44304610
C_func_9( proxy,(Window,Window_seal), XCreateSimpleWindow, XCreateSimpleWindow_XCreateSimpleWindowIn_X_Y_Width_Height_BorderWidth_Border_Background__glue, , proxy,(Display*,Display_seal), proxy,(Window,Window_seal), int,, int,, unsigned_int,, unsigned_int,, unsigned_int,, long,, long,) \
44314611
C_func_3( void,, XChangeWindowAttributes_wrap, XChangeWindowAttributes_wrap_XChangeWindowAttributesIn_Attributes__glue, , proxy,(Display*,Display_seal), proxy,(Window,Window_seal), proxy,(XSetWindowAttributesWrap*,XSetWindowAttributesWrap_seal)) \
44324612
C_func_2( proxy,(XWindowAttributes*,XWindowAttributes_seal), XGetWindowAttributes_wrap, XGetWindowAttributes_wrap_XGetWindowAttributesIn__glue, fail, proxy,(Display*,Display_seal), proxy,(Window,Window_seal)) \
4613+
C_func_5( int,, XSendEvent, XSendEvent_XSendEventToWindow_Propogate_EventMask_Event__glue, , proxy,(Display*,Display_seal), proxy,(Window,Window_seal), bool,, unsigned_long,, proxy,(XEvent*,XEvent_seal)) \
44334614
C_func_3( int,, XSetWMProtocol_wrap, XSetWMProtocol_wrap_XSetWMProtocolOfWindow_Protocol__glue, , proxy,(Display*,Display_seal), proxy,(Window,Window_seal), proxy,(Atom,Atom_seal)) \
44344615
C_func_3( void,, XSetWMName, XSetWMName_XSetWMNameOfWindow_To__glue, , proxy,(Display*,Display_seal), proxy,(Window,Window_seal), proxy,(XTextProperty*,XTextProperty_seal)) \
44354616
C_func_3( void,, XSetWMIconName, XSetWMIconName_XSetWMIconNameOfWindow_To__glue, , proxy,(Display*,Display_seal), proxy,(Window,Window_seal), proxy,(XTextProperty*,XTextProperty_seal)) \
@@ -4619,10 +4800,24 @@ Please do not change it manually. -- dmu 12/91 */\
46194800
C_get_comp( unsigned_int,, proxy,(XButtonEvent*,XButtonEvent_seal), .state, XButtonEvent_state_State_glue) \
46204801
C_get_comp( unsigned_int,, proxy,(XButtonEvent*,XButtonEvent_seal), .button, XButtonEvent_button_Button_glue) \
46214802
C_get_comp( proxy,(Window,Window_seal), proxy,(XButtonEvent*,XButtonEvent_seal), .window, XButtonEvent_window_Window_glue) \
4803+
CC_new_0( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), XClientMessageEvent, XClientMessageEvent_new_New_glue) \
4804+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .type, int,, XClientMessageEvent_type_Type__glue) \
4805+
C_get_comp( unsigned_int,, proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .serial, XClientMessageEvent_serial_Serial_glue) \
4806+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .serial, unsigned_int,, XClientMessageEvent_serial_Serial__glue) \
4807+
C_get_comp( bool,, proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .send_event, XClientMessageEvent_send_event_SendEvent_glue) \
4808+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .send_event, bool,, XClientMessageEvent_send_event_SendEvent__glue) \
4809+
C_get_comp( proxy,(Display*,Display_seal), proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .display, XClientMessageEvent_display_Display_glue) \
4810+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .display, proxy,(Display*,Display_seal), XClientMessageEvent_display_Display__glue) \
4811+
C_get_comp( proxy,(Window,Window_seal), proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .window, XClientMessageEvent_window_Window_glue) \
4812+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .window, proxy,(Window,Window_seal), XClientMessageEvent_window_Window__glue) \
46224813
C_get_comp( proxy,(Atom,Atom_seal), proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .message_type, XClientMessageEvent_message_type_Message_type_glue) \
4814+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .message_type, proxy,(Atom,Atom_seal), XClientMessageEvent_message_type_Message_type__glue) \
46234815
C_get_comp( int,, proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .format, XClientMessageEvent_format_Format_glue) \
4816+
C_set_comp( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .format, int,, XClientMessageEvent_format_Format__glue) \
46244817
C_func_2( proxy,(Atom,Atom_seal), XClientMessageEvent_atomAt_wrap, XClientMessageEvent_atomAt_wrap_AtomAt__glue, fail, proxy,(XClientMessageEvent*,XClientMessageEvent_seal), unsigned_int,) \
4625-
C_get_comp( proxy,(Window,Window_seal), proxy,(XClientMessageEvent*,XClientMessageEvent_seal), .window, XClientMessageEvent_window_Window_glue) \
4818+
C_func_3( void,, XClientMessageEvent_at_Atom_wrap, XClientMessageEvent_at_Atom_wrap_At_Atom__glue, fail, proxy,(XClientMessageEvent*,XClientMessageEvent_seal), unsigned_int,, proxy,(Atom,Atom_seal)) \
4819+
C_func_3( void,, XClientMessageEvent_at_Long_wrap, XClientMessageEvent_at_Long_wrap_At_Long__glue, fail, proxy,(XClientMessageEvent*,XClientMessageEvent_seal), unsigned_int,, long,) \
4820+
CC_delete( proxy,(XClientMessageEvent*,XClientMessageEvent_seal), XClientMessageEvent_delete_BasicDelete_glue) \
46264821
C_get_comp( bool,, proxy,(XColormapEvent*,XColormapEvent_seal), .c_new, XColormapEvent_c_new_C_new_glue) \
46274822
C_get_comp( unsigned_int,, proxy,(XColormapEvent*,XColormapEvent_seal), .state, XColormapEvent_state_State_glue) \
46284823
C_get_comp( proxy,(Window,Window_seal), proxy,(XColormapEvent*,XColormapEvent_seal), .window, XColormapEvent_window_Window_glue) \

objects/glue/xlibTemplates.self

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,12 @@ traits: traits xlib display
196196
= XWindowAttributes {xlib xWindowAttributes deadCopy} \
197197
call XGetWindowAttributes_wrap passFailHandle canAWS
198198

199+
Display xSendEventToWindow: proxy Window Window_seal \
200+
Propogate: bool \
201+
EventMask: unsigned_long \
202+
Event: XEvent \
203+
= int call XSendEvent canAWS
204+
199205
Display xSetWMProtocolOfWindow: proxy Window Window_seal \
200206
Protocol: proxy Atom Atom_seal \
201207
= int call XSetWMProtocol_wrap canAWS
@@ -786,7 +792,6 @@ traits: traits xlib events xEvent
786792
visibility: publicSlot
787793
XEvent type = int getMember type
788794

789-
790795
traits: traits xlib events xButtonEvent
791796
visibility: publicSlot
792797
XButtonEvent rawTime = oop call xButtonEvent_time
@@ -803,15 +808,32 @@ traits: traits xlib events xButtonEvent
803808

804809
traits: traits xlib events xClientMessageEvent
805810
visibility: publicSlot
811+
void new = XClientMessageEvent {xlib events xClientMessageEvent deadCopy} new
812+
XClientMessageEvent type: int = void setMember type
813+
XClientMessageEvent serial = unsigned_int getMember serial
814+
XClientMessageEvent serial: unsigned_int = void setMember serial
815+
XClientMessageEvent sendEvent = bool getMember send_event
816+
XClientMessageEvent sendEvent: bool = void setMember send_event
817+
XClientMessageEvent display = Display {xlib display deadCopy} getMember display
818+
XClientMessageEvent display: Display = void setMember display
819+
XClientMessageEvent window \
820+
= proxy Window Window_seal {xlib window deadCopy} getMember window
821+
XClientMessageEvent window: proxy Window Window_seal = void setMember window
806822
XClientMessageEvent message_type \
807823
= proxy Atom Atom_seal {xlib atom deadCopy} getMember message_type
824+
XClientMessageEvent message_type: proxy Atom Atom_seal \
825+
= void setMember message_type
808826
XClientMessageEvent format = int getMember format
827+
XClientMessageEvent format: int = void setMember format
809828
XClientMessageEvent atomAt: unsigned_int \
810829
= proxy Atom Atom_seal {xlib atom deadCopy} \
811830
call XClientMessageEvent_atomAt_wrap passFailHandle
812-
XClientMessageEvent window \
813-
= proxy Window Window_seal {xlib window deadCopy} getMember window
814-
831+
XClientMessageEvent at: unsigned_int Atom: proxy Atom Atom_seal \
832+
= void call XClientMessageEvent_at_Atom_wrap passFailHandle
833+
XClientMessageEvent at: unsigned_int Long: long \
834+
= void call XClientMessageEvent_at_Long_wrap passFailHandle
835+
visibility: privateSlot
836+
XClientMessageEvent basicDelete = void delete
815837

816838

817839
traits: traits xlib events xColormapEvent

objects/glue/xlib_glue.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,6 @@ XWindowAttributes *XGetWindowAttributes_wrap(Display *display,
243243
return attrs;
244244
}
245245

246-
247-
248-
249246
void XMoveWindowBy_wrap(Display* display, Window win,
250247
int x, int y) {
251248
int old_x, old_y;
@@ -441,6 +438,29 @@ Atom XClientMessageEvent_atomAt_wrap(XClientMessageEvent* rcvr,
441438
return rcvr->data.l[index];
442439
}
443440

441+
void XClientMessageEvent_at_Atom_wrap(XClientMessageEvent* rcvr,
442+
unsigned int index,
443+
Atom atom, void* FH) {
444+
if ( sizeof(rcvr->data.l[0]) * index
445+
>= sizeof(rcvr->data.l)) {
446+
prim_failure(FH, BADINDEXERROR);
447+
return;
448+
}
449+
rcvr->data.l[index] = atom;
450+
}
451+
452+
void XClientMessageEvent_at_Long_wrap(XClientMessageEvent* rcvr,
453+
unsigned int index,
454+
long l, void* FH) {
455+
if ( sizeof(rcvr->data.l[0]) * index
456+
>= sizeof(rcvr->data.l)) {
457+
prim_failure(FH, BADINDEXERROR);
458+
return;
459+
}
460+
rcvr->data.l[index] = l;
461+
}
462+
463+
444464
int XStringToTextProperty_wrap(XTextProperty* textProperty, char* string) {
445465
return XStringListToTextProperty(&string, 1, textProperty);
446466
}

0 commit comments

Comments
 (0)