projects
/
mikachu
/
openbox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'backport' into work
[mikachu/openbox.git]
/
openbox
/
client.c
diff --git
a/openbox/client.c
b/openbox/client.c
index
c0864bc
..
b57d616
100644
(file)
--- a/
openbox/client.c
+++ b/
openbox/client.c
@@
-414,6
+414,12
@@
void client_manage(Window window, ObPrompt *prompt)
activate ? "yes" : "no");
if (activate) {
gboolean raise = FALSE;
activate ? "yes" : "no");
if (activate) {
gboolean raise = FALSE;
+ gboolean relative_focused = FALSE;
+
+ relative_focused = (focus_client != NULL &&
+ client_search_focus_tree_full(self) != NULL &&
+ client_search_focus_group_full(self) != NULL);
+
/* This is focus stealing prevention */
ob_debug_type(OB_DEBUG_FOCUS,
/* This is focus stealing prevention */
ob_debug_type(OB_DEBUG_FOCUS,
@@
-444,10
+450,8
@@
void client_manage(Window window, ObPrompt *prompt)
"Not focusing the window because its on another "
"desktop");
}
"Not focusing the window because its on another "
"desktop");
}
- /* If something is focused, and it's not our relative... */
- else if (focus_client && client_search_focus_tree_full(self) == NULL &&
- client_search_focus_group_full(self) == NULL)
- {
+ /* If something is focused... */
+ 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 the user is working in another window right now, then don't
steal focus */
if (event_last_user_time && launch_time &&
@@
-461,8
+465,9
@@
void client_manage(Window window, ObPrompt *prompt)
"Not focusing the window because the user is "
"working in another window");
}
"Not focusing the window because the user is "
"working in another window");
}
- /* If it's a transient (and its parents aren't focused) */
- else if (client_has_parent(self)) {
+ /* If the new window is a transient (and its relatives aren't
+ focused) */
+ else if (client_has_parent(self) && !relative_focused) {
activate = FALSE;
ob_debug_type(OB_DEBUG_FOCUS,
"Not focusing the window because it is a "
activate = FALSE;
ob_debug_type(OB_DEBUG_FOCUS,
"Not focusing the window because it is a "
@@
-488,8
+493,11
@@
void client_manage(Window window, ObPrompt *prompt)
"Not focusing the window because another window "
"would get the focus anyway");
}
"Not focusing the window because another window "
"would get the focus anyway");
}
+ /* Don't move focus if the window is not visible on the current
+ desktop and none of its relatives are focused */
else if (!(self->desktop == screen_desktop ||
else if (!(self->desktop == screen_desktop ||
- self->desktop == DESKTOP_ALL))
+ self->desktop == DESKTOP_ALL) &&
+ !relative_focused)
{
activate = FALSE;
raise = TRUE;
{
activate = FALSE;
raise = TRUE;