diff -Naur 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-08-20 20:31:08.178933600 +0200 @@ -24,6 +24,7 @@ full_width_title=true horiz_scroll_opacity=false inactive_opacity=100 +invert_scroll_workspaces=false maximized_offset=0 mousewheel_rollup=true move_opacity=100 diff -Naur xfwm4-4.12.3-orig/settings-dialogs/Makefile.in xfwm4-4.12.3/settings-dialogs/Makefile.in --- xfwm4-4.12.3-orig/settings-dialogs/Makefile.in 2015-05-16 18:45:47.000000000 +0200 +++ xfwm4-4.12.3/settings-dialogs/Makefile.in 2016-08-20 20:31:08.178933600 +0200 @@ -956,8 +956,8 @@ @MAINTAINER_MODE_TRUE@xfwm4-dialog_ui.h: xfwm4-dialog.glade @MAINTAINER_MODE_TRUE@ $(AM_V_GEN) exo-csource --static --strip-comments --strip-content --name=xfwm4_dialog_ui $< >$@ -@MAINTAINER_MODE_TRUE@xfwm4-tweaks-dialog_ui.h: xfwm4-tweaks-dialog.glade -@MAINTAINER_MODE_TRUE@ $(AM_V_GEN) exo-csource --static --strip-comments --strip-content --name=tweaks_dialog_ui $< >$@ +xfwm4-tweaks-dialog_ui.h: xfwm4-tweaks-dialog.glade + $(AM_V_GEN) exo-csource --static --strip-comments --strip-content --name=tweaks_dialog_ui $< >$@ @MAINTAINER_MODE_TRUE@monitor-icon.h: $(srcdir)/monitor-icon.png @MAINTAINER_MODE_TRUE@ $(AM_V_GEN) gdk-pixbuf-csource --raw --build-list \ diff -Naur 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-08-20 20:31:08.178933600 +0200 @@ -118,6 +118,12 @@ } static void +cb_scroll_workspaces_toggled (GtkToggleButton *toggle, GtkWidget *invert) +{ + gtk_widget_set_sensitive (invert, gtk_toggle_button_get_active (toggle)); +} + +static void cb_activate_placement_center_radio_toggled (GtkToggleButton *toggle, XfconfChannel *channel) { if (gtk_toggle_button_get_active (toggle)) @@ -191,6 +197,7 @@ /* Workspaces tab */ GtkWidget *scroll_workspaces_check = GTK_WIDGET (gtk_builder_get_object (builder, "scroll_workspaces_check")); + GtkWidget *invert_scroll_workspaces_check = GTK_WIDGET (gtk_builder_get_object (builder, "invert_scroll_workspaces_check")); GtkWidget *toggle_workspaces_check = GTK_WIDGET (gtk_builder_get_object (builder, "toggle_workspaces_check")); GtkWidget *wrap_layout_check = GTK_WIDGET (gtk_builder_get_object (builder, "wrap_layout_check")); GtkWidget *wrap_cycle_check = GTK_WIDGET (gtk_builder_get_object (builder, "wrap_cycle_check")); @@ -274,6 +281,12 @@ "toggled", G_CALLBACK (cb_borderless_maximize_button_toggled), titleless_maximize_check); + + g_signal_connect (G_OBJECT (scroll_workspaces_check), + "toggled", + G_CALLBACK (cb_scroll_workspaces_toggled), + invert_scroll_workspaces_check); + g_signal_connect (G_OBJECT (placement_center_option), "toggled", G_CALLBACK (cb_activate_placement_center_radio_toggled), @@ -376,6 +389,10 @@ G_TYPE_BOOLEAN, (GObject *)scroll_workspaces_check, "active"); xfconf_g_property_bind (xfwm4_channel, + "/general/invert_scroll_workspaces", + G_TYPE_BOOLEAN, + (GObject *)invert_scroll_workspaces_check, "active"); + xfconf_g_property_bind (xfwm4_channel, "/general/wrap_layout", G_TYPE_BOOLEAN, (GObject *)wrap_layout_check, "active"); diff -Naur 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-08-20 20:31:08.178933600 +0200 @@ -565,6 +565,29 @@ + + True + 12 + + + _Invert mouse wheel workspace switching direction + False + True + True + True + False + True + True + + + + + False + False + 1 + + + _Remember and recall previous workspace when switching via keyboard shortcuts @@ -578,7 +601,7 @@ False False - 1 + 2 @@ -594,7 +617,7 @@ False False - 2 + 3 @@ -610,7 +633,7 @@ False False - 3 + 4 diff -Naur xfwm4-4.12.3-orig/src/events.c xfwm4-4.12.3/src/events.c --- xfwm4-4.12.3-orig/src/events.c 2015-05-15 14:25:56.000000000 +0200 +++ xfwm4-4.12.3/src/events.c 2016-08-20 20:31:08.178933600 +0200 @@ -891,11 +891,13 @@ if (ev->button == Button4) { - workspaceSwitch (screen_info, screen_info->current_ws - 1, NULL, TRUE, ev->time); + workspaceSwitch (screen_info, screen_info->current_ws - (screen_info->params->invert_scroll_workspaces ? -1 : 1), NULL, TRUE, ev->time); + } else if (ev->button == Button5) { - workspaceSwitch (screen_info, screen_info->current_ws + 1, NULL, TRUE, ev->time); + workspaceSwitch (screen_info, screen_info->current_ws + (screen_info->params->invert_scroll_workspaces ? -1 : 1), NULL, TRUE, ev->time); + } } diff -Naur 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-08-20 20:31:08.178933600 +0200 @@ -704,6 +704,7 @@ {"inactive_hilight_2", NULL, G_TYPE_STRING, FALSE}, {"inactive_shadow_2", NULL, G_TYPE_STRING, FALSE}, {"inactive_mid_2", NULL, G_TYPE_STRING, FALSE}, + {"invert_scroll_workspaces", NULL, G_TYPE_BOOLEAN, FALSE}, /* You can change the order of the following parameters */ {"activate_action", NULL, G_TYPE_STRING, TRUE}, {"borderless_maximize", NULL, G_TYPE_BOOLEAN, TRUE}, @@ -731,6 +732,7 @@ {"full_width_title", NULL, G_TYPE_BOOLEAN, TRUE}, {"horiz_scroll_opacity", NULL, G_TYPE_BOOLEAN, FALSE}, {"inactive_opacity", NULL, G_TYPE_INT, TRUE}, + {"invert_scroll_workspaces", NULL, G_TYPE_BOOLEAN, FALSE}, {"margin_bottom", NULL, G_TYPE_INT, FALSE}, {"margin_left", NULL, G_TYPE_INT, FALSE}, {"margin_right", NULL, G_TYPE_INT, FALSE}, @@ -897,6 +899,8 @@ getBoolValue ("wrap_cycle", rc); screen_info->params->scroll_workspaces = getBoolValue ("scroll_workspaces", rc); + screen_info->params->invert_scroll_workspaces = + getBoolValue ("invert_scroll_workspaces", rc); screen_info->params->wrap_resistance = getIntValue ("wrap_resistance", rc); @@ -1405,6 +1409,10 @@ { screen_info->params->sync_to_vblank = g_value_get_boolean (value); } + else if (!strcmp (name, "invert_scroll_workspaces")) + { + screen_info->params->invert_scroll_workspaces = g_value_get_boolean (value); + } else if (!strcmp (name, "toggle_workspaces")) { screen_info->params->toggle_workspaces = g_value_get_boolean (value); diff -Naur 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-08-20 20:31:08.178933600 +0200 @@ -223,6 +223,7 @@ gboolean raise_with_any_button; gboolean repeat_urgent_blink; gboolean scroll_workspaces; + gboolean invert_scroll_workspaces; gboolean show_app_icon; gboolean show_dock_shadow; gboolean show_frame_shadow;