#include "focus_cycle.h"
#include "focus_cycle_indicator.h"
-#include "focus_cycle_popup.h"
#include "client.h"
#include "frame.h"
#include "focus.h"
ObClient *focus_cycle_target = NULL;
static ObCycleType focus_cycle_type = OB_CYCLE_NONE;
+static gboolean focus_cycle_linear;
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;
v = focus_cycle_valid(c);
s = focus_cycle_popup_is_showing(c);
- if (v != s) {
- focus_cycle_target =
- focus_cycle_popup_refresh(focus_cycle_target, redraw);
- }
+ if (v != s)
+ focus_cycle_reorder();
}
else if (redraw) {
focus_cycle_reorder();
{
if (focus_cycle_type == OB_CYCLE_NORMAL) {
focus_cycle_target = focus_cycle_popup_refresh(focus_cycle_target,
- TRUE);
+ TRUE,
+ focus_cycle_linear);
focus_cycle_update_indicator(focus_cycle_target);
if (!focus_cycle_target)
- focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, TRUE, TRUE, TRUE);
+ focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, OB_FOCUS_CYCLE_POPUP_MODE_NONE,
+ 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, gboolean dialog,
+ gboolean showbar, ObFocusCyclePopupMode mode,
gboolean done, gboolean cancel)
{
static GList *order = NULL;
}
if (focus_cycle_target == NULL) {
+ focus_cycle_linear = linear;
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);
focus_cycle_type = OB_CYCLE_NORMAL;
focus_cycle_draw_indicator(showbar ? ft : NULL);
}
- if (dialog)
- /* 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);
+ /* same arguments as focus_target_valid */
+ focus_cycle_popup_show(ft, mode, focus_cycle_linear);
return focus_cycle_target;
} else if (ft != focus_cycle_target) {
focus_cycle_target = ft;
goto done_cycle;
if (focus_cycle_target == NULL) {
+ focus_cycle_linear = FALSE;
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;
}
}
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:
gboolean focus_cycle_valid(struct _ObClient *client)
{
- return focus_valid_target(client, TRUE,
+ 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);