diff -Naur xfwm4-4.5.91-orig/defaults/defaults xfwm4-4.5.91/defaults/defaults --- xfwm4-4.5.91-orig/defaults/defaults 2008-10-10 00:42:42.000000000 +0200 +++ xfwm4-4.5.91/defaults/defaults 2008-11-01 16:52:26.539539519 +0100 @@ -19,6 +19,7 @@ frame_opacity=100 full_width_title=true inactive_opacity=100 +invert_scroll_workspaces=false keytheme=Default maximized_offset=0 move_opacity=100 diff -Naur xfwm4-4.5.91-orig/settings-dialogs/tweaks-settings.c xfwm4-4.5.91/settings-dialogs/tweaks-settings.c --- xfwm4-4.5.91-orig/settings-dialogs/tweaks-settings.c 2008-10-13 13:39:21.000000000 +0200 +++ xfwm4-4.5.91/settings-dialogs/tweaks-settings.c 2008-11-01 16:50:16.328812562 +0100 @@ -110,6 +110,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)) @@ -165,6 +171,7 @@ /* Workspaces tab */ GtkWidget *scroll_workspaces_check = glade_xml_get_widget (gxml, "scroll_workspaces_check"); + GtkWidget *invert_scroll_workspaces_check = glade_xml_get_widget (gxml, "invert_scroll_workspaces_check"); GtkWidget *toggle_workspaces_check = glade_xml_get_widget (gxml, "toggle_workspaces_check"); GtkWidget *wrap_layout_check = glade_xml_get_widget (gxml, "wrap_layout_check"); GtkWidget *wrap_cycle_check = glade_xml_get_widget (gxml, "wrap_cycle_check"); @@ -249,6 +256,12 @@ G_CALLBACK (cb_prevent_focus_stealing_check_button_toggled), prevent_focus_stealing_box); #endif + + 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), @@ -327,6 +340,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.5.91-orig/settings-dialogs/xfwm4-tweaks-dialog.glade xfwm4-4.5.91/settings-dialogs/xfwm4-tweaks-dialog.glade --- xfwm4-4.5.91-orig/settings-dialogs/xfwm4-tweaks-dialog.glade 2008-10-10 00:42:41.000000000 +0200 +++ xfwm4-4.5.91/settings-dialogs/xfwm4-tweaks-dialog.glade 2008-11-01 16:50:02.740533621 +0100 @@ -377,6 +377,29 @@ + + True + 6 + 12 + + + True + False + True + _Invert mouse wheel workspace switching direction + True + 0 + True + + + + + False + False + 1 + + + True True @@ -389,7 +412,7 @@ False False - 1 + 2 @@ -404,7 +427,7 @@ False False - 2 + 3 @@ -419,7 +442,7 @@ False False - 3 + 4 diff -Naur xfwm4-4.5.91-orig/src/events.c xfwm4-4.5.91/src/events.c --- xfwm4-4.5.91-orig/src/events.c 2008-10-14 10:10:49.000000000 +0200 +++ xfwm4-4.5.91/src/events.c 2008-11-01 16:52:47.659991662 +0100 @@ -835,11 +835,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.5.91-orig/src/settings.c xfwm4-4.5.91/src/settings.c --- xfwm4-4.5.91-orig/src/settings.c 2008-10-10 00:42:42.000000000 +0200 +++ xfwm4-4.5.91/src/settings.c 2008-11-01 16:54:54.438644152 +0100 @@ -655,6 +655,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}, @@ -677,6 +678,7 @@ {"frame_opacity", NULL, G_TYPE_INT, TRUE}, {"full_width_title", NULL, G_TYPE_BOOLEAN, TRUE}, {"inactive_opacity", NULL, G_TYPE_INT, TRUE}, + {"invert_scroll_workspaces", NULL, G_TYPE_BOOLEAN, FALSE}, {"keytheme", NULL, G_TYPE_STRING, TRUE}, {"margin_bottom", NULL, G_TYPE_INT, FALSE}, {"margin_left", NULL, G_TYPE_INT, FALSE}, @@ -933,6 +935,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); @@ -1327,6 +1331,10 @@ { screen_info->params->scroll_workspaces = 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.5.91-orig/src/settings.h xfwm4-4.5.91/src/settings.h --- xfwm4-4.5.91-orig/src/settings.h 2008-10-10 00:42:42.000000000 +0200 +++ xfwm4-4.5.91/src/settings.h 2008-11-01 16:53:16.000579394 +0100 @@ -200,6 +200,7 @@ gboolean focus_hint; gboolean focus_new; gboolean full_width_title; + gboolean invert_scroll_workspaces; gboolean prevent_focus_stealing; gboolean raise_on_click; gboolean raise_on_focus;