diff -ur xfwm4-4.12.3-orig/defaults/defaults xfwm4-4.12.3/defaults/defaults
--- xfwm4-4.12.3-orig/defaults/defaults 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/defaults/defaults 2016-06-05 01:19:38.708387619 +0200
@@ -10,6 +10,7 @@
cycle_draw_frame=true
cycle_hidden=true
cycle_minimum=true
+cycle_on_monitor=false
cycle_preview=true
cycle_tabwin_mode=0
cycle_workspaces=false
diff -ur xfwm4-4.12.3-orig/settings-dialogs/tweaks-settings.c xfwm4-4.12.3/settings-dialogs/tweaks-settings.c
--- xfwm4-4.12.3-orig/settings-dialogs/tweaks-settings.c 2015-05-16 18:41:45.000000000 +0200
+++ xfwm4-4.12.3/settings-dialogs/tweaks-settings.c 2016-06-05 00:49:22.088504842 +0200
@@ -169,6 +169,7 @@
GtkWidget *cycle_minimum_check = GTK_WIDGET (gtk_builder_get_object (builder, "cycle_minimum_check"));
GtkWidget *cycle_draw_frame = GTK_WIDGET (gtk_builder_get_object (builder, "cycle_draw_frame"));
GtkWidget *cycle_tabwin_mode = GTK_WIDGET (gtk_builder_get_object (builder, "cycle_tabwin_mode"));
+ GtkWidget *cycle_on_monitor = GTK_WIDGET (gtk_builder_get_object (builder, "cycle_on_monitor"));
/* Focus tab */
GtkWidget *prevent_focus_stealing_check = GTK_WIDGET (gtk_builder_get_object (builder, "prevent_focus_stealing_check"));
@@ -317,6 +318,10 @@
"/general/cycle_tabwin_mode",
G_TYPE_INT,
(GObject *)cycle_tabwin_mode, "active");
+ xfconf_g_property_bind (xfwm4_channel,
+ "/general/cycle_on_monitor",
+ G_TYPE_BOOLEAN,
+ (GObject *)cycle_on_monitor, "active");
/* Focus tab */
xfconf_g_property_bind (xfwm4_channel,
diff -ur xfwm4-4.12.3-orig/settings-dialogs/xfwm4-tweaks-dialog.glade xfwm4-4.12.3/settings-dialogs/xfwm4-tweaks-dialog.glade
--- xfwm4-4.12.3-orig/settings-dialogs/xfwm4-tweaks-dialog.glade 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/settings-dialogs/xfwm4-tweaks-dialog.glade 2016-06-05 00:50:45.841081660 +0200
@@ -187,6 +187,22 @@
4
+
+
+
+ False
+ False
+ 5
+
+
diff -ur xfwm4-4.12.3-orig/src/cycle.c xfwm4-4.12.3/src/cycle.c
--- xfwm4-4.12.3-orig/src/cycle.c 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/src/cycle.c 2016-06-05 02:14:17.822672990 +0200
@@ -95,6 +95,7 @@
Client *c2;
guint range, search_range, i;
GList *client_list;
+ GdkRectangle monitor_rect;
g_return_val_if_fail (c, NULL);
TRACE ("entering clientCycleCreateList");
@@ -103,6 +104,11 @@
range = clientGetCycleRange (screen_info);
client_list = NULL;
+ if (screen_info->params->cycle_on_monitor)
+ {
+ myScreenFindMonitorAtPoint(screen_info, c->x, c->y, &monitor_rect);
+ }
+
for (c2 = c, i = 0; c && i < screen_info->client_count; i++, c2 = c2->next)
{
search_range = range;
@@ -119,6 +125,17 @@
TRACE ("%s not in select mask", c2->name);
continue;
}
+ if (screen_info->params->cycle_on_monitor)
+ {
+ GdkRectangle client_rect;
+
+ myScreenFindMonitorAtPoint(screen_info, c2->x, c2->y, &client_rect);
+
+ if (monitor_rect.x != client_rect.x || monitor_rect.y != client_rect.y)
+ {
+ continue;
+ }
+ }
if (screen_info->params->cycle_apps_only)
{
/*
@@ -503,7 +520,7 @@
{
passdata.wireframe = wireframeCreate ((Client *) selected->data);
}
- passdata.tabwin = tabwinCreate (&client_list, selected, screen_info->params->cycle_workspaces);
+ passdata.tabwin = tabwinCreate (&client_list, selected, screen_info->params->cycle_workspaces, screen_info->params->cycle_on_monitor);
eventFilterPush (display_info->xfilter, clientCycleEventFilter, &passdata);
gtk_main ();
diff -ur xfwm4-4.12.3-orig/src/settings.c xfwm4-4.12.3/src/settings.c
--- xfwm4-4.12.3-orig/src/settings.c 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/src/settings.c 2016-06-05 00:44:53.807534248 +0200
@@ -717,6 +717,7 @@
{"cycle_draw_frame", NULL, G_TYPE_BOOLEAN, TRUE},
{"cycle_hidden", NULL, G_TYPE_BOOLEAN, TRUE},
{"cycle_minimum", NULL, G_TYPE_BOOLEAN, TRUE},
+ {"cycle_on_monitor", NULL, G_TYPE_BOOLEAN, FALSE},
{"cycle_preview", NULL, G_TYPE_BOOLEAN, TRUE},
{"cycle_tabwin_mode", NULL, G_TYPE_INT, FALSE},
{"cycle_workspaces", NULL, G_TYPE_BOOLEAN, TRUE},
@@ -814,6 +815,8 @@
getBoolValue ("cycle_draw_frame", rc);
screen_info->params->cycle_hidden =
getBoolValue ("cycle_hidden", rc);
+ screen_info->params->cycle_on_monitor =
+ getBoolValue ("cycle_on_monitor", rc);
screen_info->params->cycle_preview =
getBoolValue ("cycle_preview", rc);
screen_info->params->cycle_tabwin_mode =
@@ -1341,6 +1344,10 @@
{
screen_info->params->cycle_hidden = g_value_get_boolean (value);
}
+ else if (!strcmp (name, "cycle_on_monitor"))
+ {
+ screen_info->params->cycle_on_monitor = g_value_get_boolean (value);
+ }
else if (!strcmp (name, "cycle_workspaces"))
{
screen_info->params->cycle_workspaces = g_value_get_boolean (value);
diff -ur xfwm4-4.12.3-orig/src/settings.h xfwm4-4.12.3/src/settings.h
--- xfwm4-4.12.3-orig/src/settings.h 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/src/settings.h 2016-06-05 00:42:49.798583771 +0200
@@ -212,6 +212,7 @@
gboolean cycle_minimum;
gboolean cycle_preview;
gboolean cycle_workspaces;
+ gboolean cycle_on_monitor;
gboolean focus_hint;
gboolean focus_new;
gboolean full_width_title;
diff -ur xfwm4-4.12.3-orig/src/tabwin.c xfwm4-4.12.3/src/tabwin.c
--- xfwm4-4.12.3-orig/src/tabwin.c 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/src/tabwin.c 2016-06-05 02:13:15.775752672 +0200
@@ -933,13 +933,14 @@
}
Tabwin *
-tabwinCreate (GList **client_list, GList *selected, gboolean display_workspace)
+tabwinCreate (GList **client_list, GList *selected, gboolean display_workspace, gboolean one_monitor)
{
ScreenInfo *screen_info;
Client *c;
Tabwin *tabwin;
TabwinWidget *win;
int num_monitors, i;
+ GdkRectangle monitor_rect;
g_return_val_if_fail (selected, NULL);
g_return_val_if_fail (client_list, NULL);
@@ -956,12 +957,28 @@
tabwin->tabwin_list = NULL;
tabwin->icon_list = NULL;
+ if (one_monitor)
+ {
+ myScreenFindMonitorAtPoint(screen_info, c->x, c->y, &monitor_rect);
+ }
+
num_monitors = myScreenGetNumMonitors (screen_info);
for (i = 0; i < num_monitors; i++)
{
gint monitor_index;
monitor_index = myScreenGetMonitorIndex (screen_info, i);
+
+ if (one_monitor) {
+ GdkRectangle monitor;
+
+ gdk_screen_get_monitor_geometry (screen_info->gscr, monitor_index, &monitor);
+ if (monitor.x != monitor_rect.x || monitor.y != monitor_rect.y)
+ {
+ continue;
+ }
+ }
+
win = tabwinCreateWidget (tabwin, screen_info, monitor_index);
tabwin->tabwin_list = g_list_append (tabwin->tabwin_list, win);
}
diff -ur xfwm4-4.12.3-orig/src/tabwin.h xfwm4-4.12.3/src/tabwin.h
--- xfwm4-4.12.3-orig/src/tabwin.h 2015-05-15 14:25:56.000000000 +0200
+++ xfwm4-4.12.3/src/tabwin.h 2016-06-05 02:05:25.716505648 +0200
@@ -84,6 +84,7 @@
Tabwin *tabwinCreate (GList **,
GList *,
+ gboolean,
gboolean);
Client *tabwinGetSelected (Tabwin *);
Client *tabwinSelectHead (Tabwin *);