I tried now setting the atom with the main thread display (same display as will be calling XNextEvent) but I still do not get ClientMessage. Do I need to use the thread having created the window for this to work? Can I use an event loop in the render thread too?
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@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@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@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@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
signature.asc
Description: OpenPGP digital signature
_______________________________________________ xorg@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