From c74ab35c6c3d4c345dcb93ea6f80cc4d70d6b008 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Tue, 28 Dec 2004 06:01:42 +0000 Subject: [PATCH] Focus windows that manually position themselves too (fixes #107347). 2004-12-27 Elijah Newren Focus windows that manually position themselves too (fixes #107347). * src/window.h (struct _MetaWindow): add a new showing_for_first_time flag * src/window.c (meta_window_new_with_attrs): initialize showing_for_first_time flag to !mapped, (meta_window_show): replace did_placement with showing_for_first_time in the section to decided whether to focus since did_placement isn't quite what we want --- ChangeLog | 14 ++++++++++++++ src/window.c | 9 ++++++++- src/window.h | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9b68475d0..aef0eafec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2004-12-27 Elijah Newren + + Focus windows that manually position themselves too (fixes + #107347). + + * src/window.h (struct _MetaWindow): add a new + showing_for_first_time flag + + * src/window.c (meta_window_new_with_attrs): initialize + showing_for_first_time flag to !mapped, (meta_window_show): + replace did_placement with showing_for_first_time in the section + to decided whether to focus since did_placement isn't quite what + we want + 2004-12-27 Elijah Newren * src/display.c (meta_display_set_input_focus_window, diff --git a/src/window.c b/src/window.c index cc44aab0c..3a06eaf5b 100644 --- a/src/window.c +++ b/src/window.c @@ -438,6 +438,8 @@ meta_window_new_with_attrs (MetaDisplay *display, window->minimized = FALSE; window->iconic = FALSE; window->mapped = attrs->map_state != IsUnmapped; + /* if already mapped, no need to worry about focus-on-first-time-showing */ + window->showing_for_first_time = !window->mapped; /* if already mapped we don't want to do the placement thing */ window->placed = window->mapped; if (window->placed) @@ -1761,8 +1763,13 @@ meta_window_show (MetaWindow *window) } } - if (did_placement) + /* We don't want to worry about all cases from inside + * implement_showing(); we only want to worry about focus if this + * window has not been shown before. + */ + if (window->showing_for_first_time) { + window->showing_for_first_time = FALSE; if (takes_focus_on_map) { meta_window_focus (window, diff --git a/src/window.h b/src/window.h index dca7e6dea..1d5ca2f20 100644 --- a/src/window.h +++ b/src/window.h @@ -207,6 +207,9 @@ struct _MetaWindow /* Have we placed this window? */ guint placed : 1; + /* Has this window not ever been shown yet? */ + guint showing_for_first_time : 1; + /* Are we in meta_window_free()? */ guint unmanaging : 1;