diff options
author | Elijah Newren <newren gmail com> | 2007-11-09 20:41:45 +0000 |
---|---|---|
committer | Elijah Newren <newren@src.gnome.org> | 2007-11-09 20:41:45 +0000 |
commit | 618a9f03b35a3d1652d2a33387a7ad1727d5a365 (patch) | |
tree | 1ca640859a28b0b880926b28fa3a4d04bea4381e | |
parent | 98886f3d94fd2c7b99c4430588fc54bf1aa76b09 (diff) | |
download | metacity-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-- | ChangeLog | 8 | ||||
-rw-r--r-- | src/window.c | 27 |
2 files changed, 35 insertions, 0 deletions
@@ -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); |