WM_DELETE_WINDOW does not send ClientMessage

Lucien Gentis lucien.gentis at univ-lorraine.fr
Sun Jan 19 14:53:20 UTC 2020


Le 19/01/2020 à 15:17, Roland Plüss a écrit :
>
> Hi Lucien,
>
> Depends what you call the same display. The window is created in the 
> render thread while event looping is done in the main thread. In both 
> places XOpenDisplay(getenv("DISPLAY")) is called. Is this not the same 
> display?
>

It is the same physical display, but each time you call 
XOpenDisplay(getenv("DISPLAY")) , you create a new Display* structure ; 
so "display" addresses a Display* structure and "pDisplay" another one. 
So "display" is affected by XSetWMProtocls, while "pDisplay" is not (I 
think so).

I don't use threads, but there must be a way to pass "display" variable 
from render thread to main thread (or "vice versa") in order to use only 
one Display* structure.

> If not how can I "attach" them together? It's a requirement that the 
> render thread creates the window while the main thread has to handle 
> the event loop (to my knowledge only this works).
>
> On 1/19/20 2:43 PM, Lucien Gentis wrote:
>>
>> Hello Roland,
>>
>> While defining delAtom and calling XSetWMProtocls, you specifiy 
>> "display", and in your loop, you specify "pDisplay" ; is it the same 
>> display ?
>>
>> Le 19/01/2020 à 13:33, Roland Plüss a écrit :
>>> I'm finishing up my software for releasing but run into a big issue. If
>>> I use window mode instead of full-screen mode the user should be able to
>>> close the window using the X button. I can prevent this from happening
>>> using this code:
>>>
>>> Atom delAtom = XInternAtom( display, "WM_DELETE_WINDOW", False );
>>> XSetWMProtocols( display, pWindow, &delAtom, 1 );
>>>
>>> The window will not be destroyed when X is pressed so I think this
>>> worked. The problem is though that I do not received ClientMessage and
>>> thus I am unable to close the window. This is the event loop:
>>>
>>> XEvent event;
>>> while( XPending( pDisplay ) ){
>>>     XNextEvent( pDisplay, &event );
>>>     log("Event %d", event.type);
>>>     switch( event.type ){
>>>     ...
>>>     case ClientMessage:
>>>        log("Quit Request Received");
>>>        break;
>>>     }
>>> }
>>>
>>> Window is created like this:
>>>
>>> #define BASIC_EVENT_MASK     ( StructureNotifyMask | ExposureMask |
>>> PropertyChangeMask \
>>>                               | EnterWindowMask | LeaveWindowMask |
>>> KeyPressMask \
>>>                               | KeyReleaseMask | KeymapStateMask |
>>> FocusChangeMask )
>>>
>>> #define NOT_PROPAGATE_MASK   ( KeyPressMask | KeyReleaseMask |
>>> ButtonPressMask \
>>>                               | ButtonReleaseMask | PointerMotionMask |
>>> ButtonMotionMask )
>>>
>>> XSetWindowAttributes swa;
>>> swa.colormap = colMap;
>>> swa.backing_store = NotUseful;
>>> swa.border_pixel = 0;
>>> swa.event_mask = BASIC_EVENT_MASK;
>>> swa.do_not_propagate_mask = NOT_PROPAGATE_MASK;
>>> swa.override_redirect = False;
>>> swa.save_under = False;
>>> swa.cursor = 0;
>>> swa.bit_gravity = ForgetGravity;
>>> swa.win_gravity = NorthWestGravity;
>>>
>>> Any idea what else I need to do to get this working?
>>>
>>>
>>> _______________________________________________
>>> xorg at lists.x.org: X.Org support
>>> Archives:http://lists.freedesktop.org/archives/xorg
>>> Info:https://lists.x.org/mailman/listinfo/xorg
>>> Your subscription address: %(user_address)s
>>
>> _______________________________________________
>> xorg at lists.x.org: X.Org support
>> Archives:http://lists.freedesktop.org/archives/xorg
>> Info:https://lists.x.org/mailman/listinfo/xorg
>> Your subscription address: %(user_address)s
>
> -- 
> Mit freundlichen Grüssen
> Plüss Roland
>
> Leader und Head Programmer
> - Game: Epsylon ( http://www.indiedb.com/games/epsylon )
> - Game Engine: Drag[en]gine ( 
> http://www.indiedb.com/engines/dragengine , 
> http://dragengine.rptd.ch/wiki )
> - Sowie verschiedene Blender Export-Skripts und Game-Tools
>
> _______________________________________________
> xorg at lists.x.org: X.Org support
> Archives: http://lists.freedesktop.org/archives/xorg
> Info: https://lists.x.org/mailman/listinfo/xorg
> Your subscription address: %(user_address)s
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.x.org/archives/xorg/attachments/20200119/30ff7b16/attachment-0001.htm>


More information about the xorg mailing list