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