Ignore xconfigurerequest events for stacking when it should be safe to do

2005-02-06  Elijah Newren  <newren@gmail.com>

	Ignore xconfigurerequest events for stacking when it should be
	safe to do so.  Again, thanks to Crispin Flowerday for the test
	case.  Thanks to KWin for the inspiration (and to Google for
	indexing their source code).  Fixes the other half of #166395.

	* src/window.c: (meta_window_configure_request): if the
	active_window is from a separate application than the one getting
	the configure request and the net_wm_user_time of the active
	window is later than that of the window getting the configure
	request, then ignore the request.
This commit is contained in:
Elijah Newren 2005-02-06 17:01:41 +00:00 committed by Elijah Newren
parent d11681e505
commit 459c6668fb
2 changed files with 50 additions and 11 deletions

View File

@ -1,3 +1,16 @@
2005-02-06 Elijah Newren <newren@gmail.com>
Ignore xconfigurerequest events for stacking when it should be
safe to do so. Again, thanks to Crispin Flowerday for the test
case. Thanks to KWin for the inspiration (and to Google for
indexing their source code). Fixes the other half of #166395.
* src/window.c: (meta_window_configure_request): if the
active_window is from a separate application than the one getting
the configure request and the net_wm_user_time of the active
window is later than that of the window getting the configure
request, then ignore the request.
2005-02-06 Elijah Newren <newren@gmail.com> 2005-02-06 Elijah Newren <newren@gmail.com>
If activation requests are too old, set the demands_attention hint If activation requests are too old, set the demands_attention hint

View File

@ -3819,6 +3819,31 @@ meta_window_configure_request (MetaWindow *window,
* the raise-just-above/below-sibling. * the raise-just-above/below-sibling.
*/ */
if (event->xconfigurerequest.value_mask & CWStackMode) if (event->xconfigurerequest.value_mask & CWStackMode)
{
MetaWindow *active_window;
active_window = window->display->expected_focus_window;
if (meta_prefs_get_disable_workarounds ())
{
meta_topic (META_DEBUG_STACK,
"%s sent an xconfigure stacking request; this is "
"broken behavior and the request is being ignored.\n",
window->desc);
}
else if (active_window &&
!meta_window_same_application (window, active_window) &&
XSERVER_TIME_IS_BEFORE (window->net_wm_user_time,
active_window->net_wm_user_time))
{
meta_topic (META_DEBUG_STACK,
"Ignoring xconfigure stacking request from %s (with "
"user_time %lu); currently active application is %s (with "
"user_time %lu).\n",
window->desc,
window->net_wm_user_time,
active_window->desc,
active_window->net_wm_user_time);
}
else
{ {
switch (event->xconfigurerequest.detail) switch (event->xconfigurerequest.detail)
{ {
@ -3834,6 +3859,7 @@ meta_window_configure_request (MetaWindow *window,
break; break;
} }
} }
}
return TRUE; return TRUE;
} }