WM_DELETE_WINDOW does not send ClientMessage
Roland Plüss
roland at rptd.ch
Sun Jan 19 16:40:58 UTC 2020
Is X not "not thread safe"? I can't just pass a display struct around
can't I? That said if I create a window on the render thread display and
use WM_DELETE_WINDOW on the main thread display then I should get the
notification?
What I don't get is why I do get notifications like gain/loose focus of
the window but not the ClientMessage. I can change who sets these window
manager hints but I would like to understand why some stuff should work
and not the other.
On 1/19/20 3:53 PM, Lucien Gentis wrote:
>
>
> 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
>
> _______________________________________________
> 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
--
Yours sincerely
Plüss Roland
Leader and 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 )
- As well as various Blender export scripts und game tools
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.x.org/archives/xorg/attachments/20200119/9bdfb48b/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: OpenPGP digital signature
URL: <https://lists.x.org/archives/xorg/attachments/20200119/9bdfb48b/attachment.sig>
More information about the xorg
mailing list