all repos — openbox @ 56fface3a4e2b5970e4867047207da84a58adeb2

openbox fork - make it a bit more like ryudo

add an option to next/previous window to only include hilited/flashing/urgent windows (feature req/bug #4341)
Dana Jansens danakj@orodu.net
commit

56fface3a4e2b5970e4867047207da84a58adeb2

parent

fde5d8601a182ae28fd65270766e51bea1f15a94

M openbox/actions/cyclewindows.copenbox/actions/cyclewindows.c

@@ -11,6 +11,7 @@ typedef struct {

gboolean linear; gboolean dock_windows; gboolean desktop_windows; + gboolean only_hilite_windows; gboolean all_desktops; gboolean forward; gboolean bar;

@@ -83,6 +84,8 @@ if ((n = obt_xml_find_node(node, "raise")))

o->raise = obt_xml_node_bool(n); if ((n = obt_xml_find_node(node, "panels"))) o->dock_windows = obt_xml_node_bool(n); + if ((n = obt_xml_find_node(node, "hilite"))) + o->only_hilite_windows = obt_xml_node_bool(n); if ((n = obt_xml_find_node(node, "desktop"))) o->desktop_windows = obt_xml_node_bool(n); if ((n = obt_xml_find_node(node, "allDesktops")))

@@ -154,6 +157,7 @@ struct _ObClient *ft;

ft = focus_cycle(o->forward, o->all_desktops, + !o->only_hilite_windows, o->dock_windows, o->desktop_windows, o->linear,

@@ -226,6 +230,7 @@ struct _ObClient *ft;

ft = focus_cycle(o->forward, o->all_desktops, + !o->only_hilite_windows, o->dock_windows, o->desktop_windows, o->linear,
M openbox/client.copenbox/client.c

@@ -295,7 +295,7 @@ (user_time != 0) &&

/* this checks for focus=false for the window */ (!settings || settings->focus != 0) && focus_valid_target(self, self->desktop, - FALSE, FALSE, TRUE, FALSE, FALSE, + FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, settings->focus == 1)) { activate = TRUE;
M openbox/client_list_combined_menu.copenbox/client_list_combined_menu.c

@@ -54,7 +54,8 @@ menu_add_separator(menu, SEPARATOR, screen_desktop_names[desktop]);

for (it = focus_order; it; it = g_list_next(it)) { ObClient *c = it->data; if (focus_valid_target(c, desktop, - TRUE, TRUE, FALSE, FALSE, FALSE, FALSE)) + TRUE, TRUE, + FALSE, TRUE, FALSE, FALSE, FALSE)) { empty = FALSE;
M openbox/client_list_menu.copenbox/client_list_menu.c

@@ -55,7 +55,7 @@

for (it = focus_order; it; it = g_list_next(it)) { ObClient *c = it->data; if (focus_valid_target(c, d->desktop, - TRUE, TRUE, FALSE, FALSE, FALSE, FALSE)) { + TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE)) { ObMenuEntry *e; empty = FALSE;
M openbox/focus.copenbox/focus.c

@@ -133,7 +133,8 @@ 3. it is not shaded

*/ if ((allow_omnipresent || c->desktop == screen_desktop) && focus_valid_target(c, screen_desktop, - TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) && + TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, + FALSE) && !c->shaded && (allow_refocus || client_focus_target(c) != old) && client_focus(c))

@@ -154,7 +155,7 @@ a splashscreen or a desktop window (save the desktop as a

backup fallback though) */ if (focus_valid_target(c, screen_desktop, - TRUE, FALSE, FALSE, FALSE, TRUE, FALSE) && + TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE) && (allow_refocus || client_focus_target(c) != old) && client_focus(c)) {

@@ -288,7 +289,7 @@ /* 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, screen_desktop, TRUE, iconic_windows, all_desktops, - FALSE, FALSE, FALSE)) + TRUE, FALSE, FALSE, FALSE)) { return TRUE; }

@@ -301,6 +302,7 @@ guint desktop,

gboolean helper_windows, gboolean iconic_windows, gboolean all_desktops, + gboolean nonhilite_windows, gboolean dock_windows, gboolean desktop_windows, gboolean user_request)

@@ -320,6 +322,9 @@ do this check first because it will usually filter out the most

windows */ ok = (all_desktops || ft->desktop == desktop || ft->desktop == DESKTOP_ALL); + + /* if we only include hilited windows, check if the window is */ + ok = ok && (nonhilite_windows || ft->demands_attention); /* the window can receive focus somehow */ ok = ok && (ft->can_focus || ft->focus_notify);

@@ -370,6 +375,7 @@ screen_desktop,

TRUE, iconic_windows, all_desktops, + nonhilite_windows, dock_windows, desktop_windows, FALSE));
M openbox/focus.hopenbox/focus.h

@@ -73,6 +73,7 @@ guint desktop,

gboolean helper_windows, gboolean iconic_windows, gboolean all_desktops, + gboolean nonhilite_windows, gboolean dock_windows, gboolean desktop_windows, gboolean user_request);
M openbox/focus_cycle.copenbox/focus_cycle.c

@@ -39,6 +39,7 @@ ObClient *focus_cycle_target = NULL;

static ObCycleType focus_cycle_type = OB_CYCLE_NONE; static gboolean focus_cycle_iconic_windows; static gboolean focus_cycle_all_desktops; +static gboolean focus_cycle_nonhilite_windows; static gboolean focus_cycle_dock_windows; static gboolean focus_cycle_desktop_windows;

@@ -89,12 +90,13 @@ focus_cycle_target = focus_cycle_popup_refresh(focus_cycle_target,

TRUE); focus_cycle_update_indicator(focus_cycle_target); if (!focus_cycle_target) - focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, + focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE); } } ObClient* focus_cycle(gboolean forward, gboolean all_desktops, + gboolean nonhilite_windows, gboolean dock_windows, gboolean desktop_windows, gboolean linear, gboolean interactive, gboolean showbar, ObFocusCyclePopupMode mode,

@@ -126,6 +128,7 @@

if (focus_cycle_target == NULL) { focus_cycle_iconic_windows = TRUE; focus_cycle_all_desktops = all_desktops; + focus_cycle_nonhilite_windows = nonhilite_windows; focus_cycle_dock_windows = dock_windows; focus_cycle_desktop_windows = desktop_windows; start = it = g_list_find(list, focus_client);

@@ -153,12 +156,7 @@ focus_cycle_type = OB_CYCLE_NORMAL;

focus_cycle_draw_indicator(showbar ? ft : NULL); } /* same arguments as focus_target_valid */ - focus_cycle_popup_show(ft, - focus_cycle_iconic_windows, - focus_cycle_all_desktops, - focus_cycle_dock_windows, - focus_cycle_desktop_windows, - mode); + focus_cycle_popup_show(ft, mode); return focus_cycle_target; } else if (ft != focus_cycle_target) { focus_cycle_target = ft;

@@ -302,6 +300,7 @@

if (focus_cycle_target == NULL) { focus_cycle_iconic_windows = FALSE; focus_cycle_all_desktops = FALSE; + focus_cycle_nonhilite_windows = TRUE; focus_cycle_dock_windows = dock_windows; focus_cycle_desktop_windows = desktop_windows; }

@@ -332,11 +331,7 @@ focus_cycle_draw_indicator(showbar ? ft : NULL);

} if (focus_cycle_target && dialog) /* same arguments as focus_target_valid */ - focus_cycle_popup_single_show(focus_cycle_target, - focus_cycle_iconic_windows, - focus_cycle_all_desktops, - focus_cycle_dock_windows, - focus_cycle_desktop_windows); + focus_cycle_popup_single_show(focus_cycle_target); return focus_cycle_target; done_cycle:

@@ -357,6 +352,7 @@ {

return focus_valid_target(client, screen_desktop, TRUE, focus_cycle_iconic_windows, focus_cycle_all_desktops, + focus_cycle_nonhilite_windows, focus_cycle_dock_windows, focus_cycle_desktop_windows, FALSE);
M openbox/focus_cycle.hopenbox/focus_cycle.h

@@ -36,6 +36,7 @@ void focus_cycle_shutdown(gboolean reconfig);

/*! Cycle focus amongst windows. */ struct _ObClient* focus_cycle(gboolean forward, gboolean all_desktops, + gboolean nonhilite_windows, gboolean dock_windows, gboolean desktop_windows, gboolean linear, gboolean interactive, gboolean showbar, ObFocusCyclePopupMode mode,
M openbox/focus_cycle_popup.copenbox/focus_cycle_popup.c

@@ -700,10 +700,7 @@

XFlush(obt_display); } -void focus_cycle_popup_show(ObClient *c, gboolean iconic_windows, - gboolean all_desktops, gboolean dock_windows, - gboolean desktop_windows, - ObFocusCyclePopupMode mode) +void focus_cycle_popup_show(ObClient *c, ObFocusCyclePopupMode mode) { g_assert(c != NULL);

@@ -747,11 +744,7 @@

popup_cleanup(); } -void focus_cycle_popup_single_show(struct _ObClient *c, - gboolean iconic_windows, - gboolean all_desktops, - gboolean dock_windows, - gboolean desktop_windows) +void focus_cycle_popup_single_show(struct _ObClient *c) { gchar *text;
M openbox/focus_cycle_popup.hopenbox/focus_cycle_popup.h

@@ -33,17 +33,10 @@

void focus_cycle_popup_startup(gboolean reconfig); void focus_cycle_popup_shutdown(gboolean reconfig); -void focus_cycle_popup_show(struct _ObClient *c, gboolean iconic_windows, - gboolean all_desktops, gboolean dock_windows, - gboolean desktop_windows, - ObFocusCyclePopupMode mode); +void focus_cycle_popup_show(struct _ObClient *c, ObFocusCyclePopupMode mode); void focus_cycle_popup_hide(void); -void focus_cycle_popup_single_show(struct _ObClient *c, - gboolean iconic_windows, - gboolean all_desktops, - gboolean dock_windows, - gboolean desktop_windows); +void focus_cycle_popup_single_show(struct _ObClient *c); void focus_cycle_popup_single_hide(void); gboolean focus_cycle_popup_is_showing(struct _ObClient *c);