summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren gmail com>2007-11-09 20:41:45 +0000
committerElijah Newren <newren@src.gnome.org>2007-11-09 20:41:45 +0000
commit618a9f03b35a3d1652d2a33387a7ad1727d5a365 (patch)
tree1ca640859a28b0b880926b28fa3a4d04bea4381e
parent98886f3d94fd2c7b99c4430588fc54bf1aa76b09 (diff)
downloadmetacity-618a9f03b35a3d1652d2a33387a7ad1727d5a365.tar.gz
If a window is launched without any kind of launch timestamp, grab the
2007-11-09 Elijah Newren <newren gmail com> * src/window.c (meta_window_new_with_attrs): If a window is launched without any kind of launch timestamp, grab the current time and stash it away. When transients of that window are also launched without a timestamp, we can use the stashed timestamp from the parent. Fixes #488468. svn path=/trunk/; revision=3381
-rw-r--r--ChangeLog8
-rw-r--r--src/window.c27
2 files changed, 35 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 3baa0abd..a8c1596d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-11-09 Elijah Newren <newren gmail com>
+
+ * src/window.c (meta_window_new_with_attrs): If a window is
+ launched without any kind of launch timestamp, grab the current
+ time and stash it away. When transients of that window are also
+ launched without a timestamp, we can use the stashed timestamp
+ from the parent. Fixes #488468.
+
2007-11-07 Federico Mena Quintero <federico@novell.com>
* src/window-props.c (reload_net_wm_user_time_window): Fix typo;
diff --git a/src/window.c b/src/window.c
index eb769829..1316a4fb 100644
--- a/src/window.c
+++ b/src/window.c
@@ -613,6 +613,33 @@ meta_window_new_with_attrs (MetaDisplay *display,
* based on startup notification
*/
meta_screen_apply_startup_properties (window->screen, window);
+
+ /* Try to get a "launch timestamp" for the window. If the window is
+ * a transient, we'd like to be able to get a last-usage timestamp
+ * from the parent window. If the window has no parent, there isn't
+ * much we can do...except record the current time so that any children
+ * can use this time as a fallback.
+ */
+ if (!window->net_wm_user_time_set) {
+ MetaWindow *parent = NULL;
+ if (window->xtransient_for)
+ parent = meta_display_lookup_x_window (window->display,
+ window->xtransient_for);
+
+ // First, maybe the app was launched with startup notification using an
+ // obsolete version of the spec; use that timestamp if it exists.
+ if (window->initial_timestamp_set)
+ // NOTE: Do NOT toggle net_wm_user_time_set to true; this is just
+ // being recorded as a fallback for potential transients
+ window->net_wm_user_time = window->initial_timestamp;
+ else if (parent != NULL)
+ meta_window_set_user_time(window, parent->net_wm_user_time);
+ else
+ // NOTE: Do NOT toggle net_wm_user_time_set to true; this is just
+ // being recorded as a fallback for potential transients
+ window->net_wm_user_time =
+ meta_display_get_current_time_roundtrip (window->display);
+ }
if (window->decorated)
meta_window_ensure_frame (window);