Re: focus events question
Steven J Abner <[email protected]> Wed, 12 Feb 2025 17:14:07 -0500
| Newsgroups | gmane.comp.freedesktop.xcb |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Feb 11 2025 at 07:31:38 PM +0000, Steven J Abner <[email protected]> wrote: > popup, a transient window: > xcb_map_window(); > xcb_set_input_focus(); > xcb_grab_pointer(); I believe I figured the problem or at least closer to succinctly phrasing it. Basically above is what X11 manuals are suggesting, and it makes sense. It probably works if no interception of events. I've tried ICCCM and EWM suggestions and in various combinations. Even placed in XCB_VISIBILITY_NOTIFY so I could grab after the popup was mapped. The GrabButton you mentioned fortunately was the key to understanding. If using GrabButton one must state the button. xcb_grab_pointer has both passive and active grabs. Nowhere does it state that the active grab must be done during a button press event. I assumed xcb_grab_pointer() was the equivalent of xcb_set_input_focus(). This assumption was based on no other functions are listed to receive mouse events. Focus in/out are mouse press on windows other than the current, root being a window also. For grabs one can receive motion and button release. An actual test confirmed that xcb_grab_pointer() is useless without a button to hold grab. This leaves me with one option, creating a loop directly connected to X server. I would need to only use xcb_query_pointer() to obtain the mask for the button press bit. The loop would start on leave event, polling motion events for query. What I seem to need is the function to receive mouse data directly? It can send mouse events to the window manager, I don't care, let it have its fun. But I need the un-interpreted mouse motion event as described by X11 libraries. To use a previous threads topic, I need to hijack the hijackers. If the function(s) elude you, maybe the section within xcb/xlib code/file that deals with getting/interrupting mouse type device firmware/signals such that maybe others can avoid window managers also? Maybe even create a xcb_set_input_mouse()? Steve