[metacity] Use correct timestamp for focus stealing prevention
- From: Thomas James Alexander Thurman <tthurman src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] Use correct timestamp for focus stealing prevention
- Date: Sun, 2 May 2010 15:47:36 +0000 (UTC)
commit b272c4ca7f3a784d011eea5c3fd348011f8558b3
Author: Tomas Frydrych <tf linux intel com>
Date: Sat Aug 8 17:59:01 2009 +0100
Use correct timestamp for focus stealing prevention
When window initially maps, use the more recent of NET_WM_USER_TIME and
startup notification timestamps to compare against last known user action to
decide whether to focus the window or not. Once we show the window, clear
the initial_timestamp_set flag, so the startup notification timestamp is not
taken into account again.
Based on patch for metacity by Alexander Larsson
http://bugzilla.gnome.org/show_bug.cgi?id=573922
src/core/window.c | 30 ++++++++++++++++++++++++------
1 files changed, 24 insertions(+), 6 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index ebbb047..9af5283 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1881,13 +1881,22 @@ intervening_user_event_occurred (MetaWindow *window)
/* To determine the "launch" time of an application,
* startup-notification can set the TIMESTAMP and the
* application (usually via its toolkit such as gtk or qt) can
- * set the _NET_WM_USER_TIME. If both are set, then it means
- * the user has interacted with the application since it
- * launched, and _NET_WM_USER_TIME is the value that should be
- * used in the comparison.
+ * set the _NET_WM_USER_TIME. If both are set, we need to be
+ * using the newer of the two values.
+ *
+ * See http://bugzilla.gnome.org/show_bug.cgi?id=573922
*/
- compare = window->initial_timestamp_set ? window->initial_timestamp : 0;
- compare = window->net_wm_user_time_set ? window->net_wm_user_time : compare;
+ compare = 0;
+ if (window->net_wm_user_time_set &&
+ window->initial_timestamp_set)
+ compare =
+ XSERVER_TIME_IS_BEFORE (window->net_wm_user_time,
+ window->initial_timestamp) ?
+ window->initial_timestamp : window->net_wm_user_time;
+ else if (window->net_wm_user_time_set)
+ compare = window->net_wm_user_time;
+ else if (window->initial_timestamp_set)
+ compare = window->initial_timestamp;
if ((focus_window != NULL) &&
XSERVER_TIME_IS_BEFORE (compare, focus_window->net_wm_user_time))
@@ -2325,6 +2334,15 @@ meta_window_show (MetaWindow *window)
window->desc);
invalidate_work_areas (window);
}
+
+ /*
+ * Now that we have shown the window, we no longer want to consider the
+ * initial timestamp in any subsequent deliberations whether to focus this
+ * window or not, so clear the flag.
+ *
+ * See http://bugzilla.gnome.org/show_bug.cgi?id=573922
+ */
+ window->initial_timestamp_set = FALSE;
}
/* XXX META_EFFECT_*_UNMAP */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]