From 3606a4af6f75b5e35ce540bf083b776a097d096f Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 6 Mar 2008 02:35:26 -0500 Subject: when a window pops up a child, don't avoid focusing it because you were working in its parent window before this. that's probably what made the window appear in the first place --- openbox/client.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'openbox/client.c') diff --git a/openbox/client.c b/openbox/client.c index 82976f6a..f55af2b8 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -495,7 +495,10 @@ void client_manage(Window window, ObPrompt *prompt) if (activate) { gboolean raise = FALSE; gboolean relative_focused = FALSE; + gboolean parent_focused = FALSE; + parent_focused = (focus_client != NULL && + client_search_focus_parent(self)); relative_focused = (focus_client != NULL && client_search_focus_tree_full(self) != NULL && client_search_focus_group_full(self) != NULL); @@ -534,7 +537,8 @@ void client_manage(Window window, ObPrompt *prompt) else if (focus_client) { /* If the user is working in another window right now, then don't steal focus */ - if (event_last_user_time && launch_time && + if (!parent_focused && + event_last_user_time && launch_time && event_time_after(event_last_user_time, launch_time) && event_last_user_time != launch_time && event_time_after(event_last_user_time, @@ -543,7 +547,8 @@ void client_manage(Window window, ObPrompt *prompt) activate = FALSE; ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because the user is " - "working in another window\n"); + "working in another window that is not " + "its parent\n"); } /* If the new window is a transient (and its relatives aren't focused) */ @@ -4049,6 +4054,21 @@ ObClient *client_search_focus_parent(ObClient *self) return NULL; } +ObClient *client_search_focus_parent_full(ObClient *self) +{ + GSList *it; + ObClient *ret = NULL; + + for (it = self->parents; it; it = g_slist_next(it)) { + if (client_focused(it->data)) + ret = it->data; + else + ret = client_search_focus_parent_full(it->data); + if (ret) break; + } + return ret; +} + ObClient *client_search_parent(ObClient *self, ObClient *search) { GSList *it; -- cgit v1.2.3 From 07f5240d8c6d4fc6d70d396c4205a42f87ee7a95 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 6 Mar 2008 02:43:32 -0500 Subject: fix the check for if a relative is focused on map --- openbox/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'openbox/client.c') diff --git a/openbox/client.c b/openbox/client.c index f55af2b8..0bb1d11d 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -500,8 +500,8 @@ void client_manage(Window window, ObPrompt *prompt) parent_focused = (focus_client != NULL && client_search_focus_parent(self)); relative_focused = (focus_client != NULL && - client_search_focus_tree_full(self) != NULL && - client_search_focus_group_full(self) != NULL); + (client_search_focus_tree_full(self) != NULL || + client_search_focus_group_full(self) != NULL)); /* This is focus stealing prevention */ -- cgit v1.2.3 From ae0971659fdd41fc7e9ccb6ca2b2536f96c09061 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 6 Mar 2008 02:44:58 -0500 Subject: don't set variables twice --- openbox/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'openbox/client.c') diff --git a/openbox/client.c b/openbox/client.c index 0bb1d11d..585379ec 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -494,8 +494,8 @@ void client_manage(Window window, ObPrompt *prompt) activate ? "yes" : "no"); if (activate) { gboolean raise = FALSE; - gboolean relative_focused = FALSE; - gboolean parent_focused = FALSE; + gboolean relative_focused; + gboolean parent_focused; parent_focused = (focus_client != NULL && client_search_focus_parent(self)); -- cgit v1.2.3