projects
/
dana
/
openbox-history.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b3d26fd
)
don't focus helper windows that map unless there are no other valid targets in the...
author
Dana Jansens
<danakj@orodu.net>
Fri, 6 Jul 2007 19:41:23 +0000
(19:41 +0000)
committer
Dana Jansens
<danakj@orodu.net>
Fri, 6 Jul 2007 19:41:23 +0000
(19:41 +0000)
this fixes gucharmap.
openbox/client.c
patch
|
blob
|
history
openbox/focus.c
patch
|
blob
|
history
openbox/focus.h
patch
|
blob
|
history
openbox/focus_cycle.c
patch
|
blob
|
history
openbox/focus_cycle_popup.c
patch
|
blob
|
history
diff --git
a/openbox/client.c
b/openbox/client.c
index
015e36f
..
4383bc7
100644
(file)
--- a/
openbox/client.c
+++ b/
openbox/client.c
@@
-274,6
+274,9
@@
void client_manage(Window window)
/* get all the stuff off the window */
client_get_all(self, TRUE);
/* get all the stuff off the window */
client_get_all(self, TRUE);
+ ob_debug("Window type: %d\n", self->type);
+ ob_debug("Window group: 0x%x\n", self->group?self->group->leader:0);
+
/* specify that if we exit, the window should not be destroyed and
should be reparented back to root automatically */
XChangeSaveSet(ob_display, window, SetModeInsert);
/* specify that if we exit, the window should not be destroyed and
should be reparented back to root automatically */
XChangeSaveSet(ob_display, window, SetModeInsert);
@@
-320,7
+323,7
@@
void client_manage(Window window)
client_search_focus_tree_full(self)) &&
/* this checks for focus=false for the window */
(!settings || settings->focus != 0) &&
client_search_focus_tree_full(self)) &&
/* this checks for focus=false for the window */
(!settings || settings->focus != 0) &&
- focus_valid_target(self, FALSE, TRUE, FALSE, FALSE))
+ focus_valid_target(self, FALSE,
FALSE,
TRUE, FALSE, FALSE))
{
activate = TRUE;
}
{
activate = TRUE;
}
diff --git
a/openbox/focus.c
b/openbox/focus.c
index
3a0905c
..
9a0b2bd
100644
(file)
--- a/
openbox/focus.c
+++ b/
openbox/focus.c
@@
-126,7
+126,7
@@
static ObClient* focus_fallback_target(gboolean allow_refocus,
3. it is not shaded
*/
if ((allow_omnipresent || c->desktop == screen_desktop) &&
3. it is not shaded
*/
if ((allow_omnipresent || c->desktop == screen_desktop) &&
- focus_valid_target(c, FALSE, FALSE, FALSE, FALSE) &&
+ focus_valid_target(c,
TRUE,
FALSE, FALSE, FALSE, FALSE) &&
!c->shaded &&
(allow_refocus || client_focus_target(c) != old) &&
client_focus(c))
!c->shaded &&
(allow_refocus || client_focus_target(c) != old) &&
client_focus(c))
@@
-146,7
+146,7
@@
static ObClient* focus_fallback_target(gboolean allow_refocus,
a splashscreen or a desktop window (save the desktop as a
backup fallback though)
*/
a splashscreen or a desktop window (save the desktop as a
backup fallback though)
*/
- if (focus_valid_target(c, FALSE, FALSE, FALSE, TRUE) &&
+ if (focus_valid_target(c,
TRUE,
FALSE, FALSE, FALSE, TRUE) &&
(allow_refocus || client_focus_target(c) != old) &&
client_focus(c))
{
(allow_refocus || client_focus_target(c) != old) &&
client_focus(c))
{
@@
-284,7
+284,8
@@
static gboolean focus_target_has_siblings(ObClient *ft,
ObClient *c = it->data;
/* check that it's not a helper window to avoid infinite recursion */
if (c != ft && c->type == OB_CLIENT_TYPE_NORMAL &&
ObClient *c = it->data;
/* check that it's not a helper window to avoid infinite recursion */
if (c != ft && c->type == OB_CLIENT_TYPE_NORMAL &&
- focus_valid_target(c, iconic_windows, all_desktops, FALSE, FALSE))
+ focus_valid_target(c, TRUE, iconic_windows, all_desktops,
+ FALSE, FALSE))
{
return TRUE;
}
{
return TRUE;
}
@@
-293,6
+294,7
@@
static gboolean focus_target_has_siblings(ObClient *ft,
}
gboolean focus_valid_target(ObClient *ft,
}
gboolean focus_valid_target(ObClient *ft,
+ gboolean helper_windows,
gboolean iconic_windows,
gboolean all_desktops,
gboolean dock_windows,
gboolean iconic_windows,
gboolean all_desktops,
gboolean dock_windows,
@@
-326,10
+328,12
@@
gboolean focus_valid_target(ObClient *ft,
||
/* helper windows are valid targets if... */
(client_helper(ft) &&
||
/* helper windows are valid targets if... */
(client_helper(ft) &&
- /* ...a window in its group already has focus ... */
- ((focus_client && ft->group == focus_client->group) ||
+ /* ...a window in its group already has focus and we want to
+ include helper windows ... */
+ ((focus_client && ft->group == focus_client->group &&
+ helper_windows) ||
/* ... or if there are no other windows in its group
/* ... or if there are no other windows in its group
- that can be
cycled to
instead */
+ that can be
focused
instead */
!focus_target_has_siblings(ft, iconic_windows, all_desktops))));
/* it's not set to skip the taskbar (unless it is a type that would be
!focus_target_has_siblings(ft, iconic_windows, all_desktops))));
/* it's not set to skip the taskbar (unless it is a type that would be
@@
-348,6
+352,7
@@
gboolean focus_valid_target(ObClient *ft,
{
ObClient *cft = client_focus_target(ft);
ok = ok && (ft == cft || !focus_valid_target(cft,
{
ObClient *cft = client_focus_target(ft);
ok = ok && (ft == cft || !focus_valid_target(cft,
+ TRUE,
iconic_windows,
all_desktops,
dock_windows,
iconic_windows,
all_desktops,
dock_windows,
diff --git
a/openbox/focus.h
b/openbox/focus.h
index
f5033ae
..
93fe618
100644
(file)
--- a/
openbox/focus.h
+++ b/
openbox/focus.h
@@
-64,6
+64,7
@@
void focus_order_to_bottom(struct _ObClient *c);
struct _ObClient *focus_order_find_first(guint desktop);
gboolean focus_valid_target(struct _ObClient *ft,
struct _ObClient *focus_order_find_first(guint desktop);
gboolean focus_valid_target(struct _ObClient *ft,
+ gboolean helper_windows,
gboolean iconic_windows,
gboolean all_desktops,
gboolean dock_windows,
gboolean iconic_windows,
gboolean all_desktops,
gboolean dock_windows,
diff --git
a/openbox/focus_cycle.c
b/openbox/focus_cycle.c
index
0396dd8
..
02510c4
100644
(file)
--- a/
openbox/focus_cycle.c
+++ b/
openbox/focus_cycle.c
@@
-56,7
+56,7
@@
void focus_cycle_stop(ObClient *ifclient)
/* stop focus cycling if the given client is a valid focus target,
and so the cycling is being disrupted */
if (focus_cycle_target && ifclient &&
/* stop focus cycling if the given client is a valid focus target,
and so the cycling is being disrupted */
if (focus_cycle_target && ifclient &&
- focus_valid_target(ifclient,
+ focus_valid_target(ifclient,
TRUE,
focus_cycle_iconic_windows,
focus_cycle_all_desktops,
focus_cycle_dock_windows,
focus_cycle_iconic_windows,
focus_cycle_all_desktops,
focus_cycle_dock_windows,
@@
-119,7
+119,7
@@
ObClient* focus_cycle(gboolean forward, gboolean all_desktops,
if (it == NULL) it = g_list_last(list);
}
ft = it->data;
if (it == NULL) it = g_list_last(list);
}
ft = it->data;
- if (focus_valid_target(ft,
+ if (focus_valid_target(ft,
TRUE,
focus_cycle_iconic_windows,
focus_cycle_all_desktops,
focus_cycle_dock_windows,
focus_cycle_iconic_windows,
focus_cycle_all_desktops,
focus_cycle_dock_windows,
@@
-190,7
+190,7
@@
static ObClient *focus_find_directional(ObClient *c, ObDirection dir,
/* the currently selected window isn't interesting */
if (cur == c)
continue;
/* the currently selected window isn't interesting */
if (cur == c)
continue;
- if (!focus_valid_target(it->data, FALSE, FALSE, dock_windows,
+ if (!focus_valid_target(it->data,
TRUE,
FALSE, FALSE, dock_windows,
desktop_windows))
continue;
desktop_windows))
continue;
@@
-295,7
+295,7
@@
ObClient* focus_directional_cycle(ObDirection dir, gboolean dock_windows,
GList *it;
for (it = focus_order; it; it = g_list_next(it))
GList *it;
for (it = focus_order; it; it = g_list_next(it))
- if (focus_valid_target(it->data,
+ if (focus_valid_target(it->data,
TRUE,
focus_cycle_iconic_windows,
focus_cycle_all_desktops,
focus_cycle_dock_windows,
focus_cycle_iconic_windows,
focus_cycle_all_desktops,
focus_cycle_dock_windows,
diff --git
a/openbox/focus_cycle_popup.c
b/openbox/focus_cycle_popup.c
index
477619f
..
e0a8080
100644
(file)
--- a/
openbox/focus_cycle_popup.c
+++ b/
openbox/focus_cycle_popup.c
@@
-174,7
+174,7
@@
static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets,
for (it = g_list_last(focus_order); it; it = g_list_previous(it)) {
ObClient *ft = it->data;
for (it = g_list_last(focus_order); it; it = g_list_previous(it)) {
ObClient *ft = it->data;
- if (focus_valid_target(ft,
+ if (focus_valid_target(ft,
TRUE,
iconic_windows,
all_desktops,
dock_windows,
iconic_windows,
all_desktops,
dock_windows,