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
This commit is contained in:
Elijah Newren 2007-11-09 20:41:45 +00:00 committed by Elijah Newren
parent 98886f3d94
commit 618a9f03b3
2 changed files with 35 additions and 0 deletions

View File

@ -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;

View File

@ -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);