summaryrefslogtreecommitdiff
path: root/openbox/focus.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-06 05:51:08 +0000
committerDana Jansens <danakj@orodu.net>2007-05-06 05:51:08 +0000
commita7f65a818c48e272aa9c8c49f2339b46b794078e (patch)
treecfa2dff31be09bf386c09edd4ae6f8e22ca2a735 /openbox/focus.c
parent857245960e4a35f9307f1b6124a4b7b4e726298b (diff)
add an allDesktops option to Next/PreviousWindow to alt-tab across all desktops.
Diffstat (limited to 'openbox/focus.c')
-rw-r--r--openbox/focus.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/openbox/focus.c b/openbox/focus.c
index cf65ff25..755b6cea 100644
--- a/openbox/focus.c
+++ b/openbox/focus.c
@@ -61,7 +61,7 @@ static void focus_cycle_destructor(ObClient *client, gpointer data)
be used
*/
if (focus_cycle_target == client)
- focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
+ focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
}
static Window createWindow(Window parent, gulong mask,
@@ -170,7 +170,7 @@ void focus_set_client(ObClient *client)
be used.
*/
if (focus_cycle_target)
- focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
+ focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
focus_client = client;
@@ -457,7 +457,9 @@ void focus_cycle_draw_indicator()
}
}
-static gboolean valid_focus_target(ObClient *ft, gboolean dock_windows)
+static gboolean valid_focus_target(ObClient *ft,
+ gboolean all_desktops,
+ gboolean dock_windows)
{
gboolean ok = FALSE;
/* we don't use client_can_focus here, because that doesn't let you
@@ -483,7 +485,9 @@ static gboolean valid_focus_target(ObClient *ft, gboolean dock_windows)
ft->type == OB_CLIENT_TYPE_MENU || /* being allowed to target */
ft->type == OB_CLIENT_TYPE_UTILITY)) /* one of these, don't let */
ok = ok && !ft->skip_taskbar; /* skip taskbar stop us */
- ok = ok && (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL);
+ if (!all_desktops)
+ ok = ok && (ft->desktop == screen_desktop ||
+ ft->desktop == DESKTOP_ALL);
ok = ok && ft == client_focus_target(ft);
return ok;
/*
@@ -501,7 +505,8 @@ static gboolean valid_focus_target(ObClient *ft, gboolean dock_windows)
*/
}
-void focus_cycle(gboolean forward, gboolean dock_windows,
+void focus_cycle(gboolean forward, gboolean all_desktops,
+ gboolean dock_windows,
gboolean linear, gboolean interactive,
gboolean dialog, gboolean done, gboolean cancel)
{
@@ -546,7 +551,7 @@ void focus_cycle(gboolean forward, gboolean dock_windows,
if (it == NULL) it = g_list_last(list);
}
ft = it->data;
- if (valid_focus_target(ft, dock_windows)) {
+ if (valid_focus_target(ft, all_desktops, dock_windows)) {
if (interactive) {
if (ft != focus_cycle_target) { /* prevents flicker */
focus_cycle_target = ft;
@@ -712,7 +717,7 @@ void focus_directional_cycle(ObDirection dir, gboolean dock_windows,
GList *it;
for (it = focus_order; it; it = g_list_next(it))
- if (valid_focus_target(it->data, dock_windows))
+ if (valid_focus_target(it->data, FALSE, dock_windows))
ft = it->data;
}