I just ran the following test after instrumenting the kXDarwinWindowState event (quartz.c, line 460ish): Starting from Terminal.app without X11 running: $ xterm & $ xterm & Then I used Expose to restack the xterms. Note that focus never went to X11.app $ killall X11 Then I tried again, but this time I didn't do anything with Expose: $ xterm & $ xterm & $ killall X11 The log output was identical for both tests. So we're not getting that event on Expose window restacking. Cheers, -n8 --
-- Nathaniel Gray -- Caltech Computer Science ------> -- Mojave Project -- http://mojave.cs.caltech.edu -->
On Nov 30, 2007, at 2:41 PM, Nathaniel Gray wrote:
I just ran the following test after instrumenting the kXDarwinWindowState event (quartz.c, line 460ish):
Starting from Terminal.app without X11 running: $ xterm & $ xterm & Then I used Expose to restack the xterms. Note that focus never went to X11.app $ killall X11
Then I tried again, but this time I didn't do anything with Expose: $ xterm & $ xterm & $ killall X11
The log output was identical for both tests. So we're not getting that event on Expose window restacking.
Interesting. And we're not getting a WindowMoved notification, right? If you look in /usr/include/Xplugin.h, here are the different kinds of events we can get from Xplugin: /* Event types generated by the plugin. */ enum xp_event_type_enum { /* The global display configuration changed somehow. */ XP_EVENT_DISPLAY_CHANGED = 1 << 0, /* A window changed state. Argument is xp_window_state_event */ XP_EVENT_WINDOW_STATE_CHANGED = 1 << 1, /* An async request encountered an error. Argument is of type xp_async_error_event */ XP_EVENT_ASYNC_ERROR = 1 << 2, /* Sent when a surface is destroyed as a side effect of destroying a window. Arg is of type xp_surface_id. */ XP_EVENT_SURFACE_DESTROYED = 1 << 3, /* Sent when any GL contexts pointing at the given surface need to call xp_update_gl_context () to refresh their state (because the window moved or was resized. Arg is of type xp_surface_id. */ XP_EVENT_SURFACE_CHANGED = 1 << 4, /* Sent when a window has been moved. Arg is of type xp_window_id. */ XP_EVENT_WINDOW_MOVED = 1 << 5, }; /* Possible window states. */ enum xp_window_state_enum { /* The window is not in the global list of possibly-visible windows. */ XP_WINDOW_STATE_OFFSCREEN = 1 << 0, /* Parts of the window may be obscured by other windows. */ XP_WINDOW_STATE_OBSCURED = 1 << 1, }; Point being, if Expose is moving windows around on us and we're not getting told via this mechanism, I need to ask for the Xplugin interface to be fixed. -- Ben Byer CoreOS / BSD Technology Group, XDarwin maintainer
participants (2)
-
Ben Byer
-
Nathaniel Gray