diff --git a/defaults/defaults b/defaults/defaults
index 38d34704b..a1371bf06 100644
--- a/defaults/defaults
+++ b/defaults/defaults
@@ -28,6 +28,7 @@ horiz_scroll_opacity=false
inactive_opacity=100
maximized_offset=0
mousewheel_rollup=true
+mousewheel_lower=true
move_opacity=100
placement_mode=center
placement_ratio=20
diff --git a/settings-dialogs/tweaks-settings.c b/settings-dialogs/tweaks-settings.c
index d5f711be6..93174bff9 100644
--- a/settings-dialogs/tweaks-settings.c
+++ b/settings-dialogs/tweaks-settings.c
@@ -140,6 +140,13 @@ cb_activate_placement_mouse_radio_toggled (GtkToggleButton *toggle, XfconfChanne
}
}
+static void
+cb_mousewheel_rollup_button_toggled (GtkToggleButton *toggle, GtkWidget *mousewheel_lower)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mousewheel_lower), FALSE);
+ gtk_widget_set_sensitive (mousewheel_lower, gtk_toggle_button_get_active (toggle));
+}
+
static void
cb_urgent_blink_button_toggled (GtkToggleButton *toggle, GtkWidget *repeat_urgent_blink)
{
@@ -194,6 +201,7 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
GtkWidget *urgent_blink = GTK_WIDGET (gtk_builder_get_object (builder, "urgent_blink"));
GtkWidget *repeat_urgent_blink = GTK_WIDGET (gtk_builder_get_object (builder, "repeat_urgent_blink"));
GtkWidget *mousewheel_rollup = GTK_WIDGET (gtk_builder_get_object (builder, "mousewheel_rollup"));
+ GtkWidget *mousewheel_lower = GTK_WIDGET (gtk_builder_get_object (builder, "mousewheel_lower"));
/* Workspaces tab */
GtkWidget *scroll_workspaces_check = GTK_WIDGET (gtk_builder_get_object (builder, "scroll_workspaces_check"));
@@ -299,6 +307,10 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
"toggled",
G_CALLBACK (cb_urgent_blink_button_toggled),
repeat_urgent_blink);
+ g_signal_connect (G_OBJECT (mousewheel_rollup),
+ "toggled",
+ G_CALLBACK (cb_mousewheel_rollup_button_toggled),
+ mousewheel_lower);
/* Bind easy properties */
/* Cycling tab */
@@ -370,6 +382,12 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
"/general/mousewheel_rollup",
G_TYPE_BOOLEAN,
(GObject *)mousewheel_rollup, "active");
+ xfconf_g_property_bind (xfwm4_channel,
+ "/general/mousewheel_lower",
+ G_TYPE_BOOLEAN,
+ (GObject *)mousewheel_lower, "active");
+ gtk_widget_set_sensitive (mousewheel_lower,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (mousewheel_rollup)));
gtk_widget_set_sensitive (repeat_urgent_blink,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (urgent_blink)));
gtk_widget_set_sensitive (titleless_maximize_check,
diff --git a/settings-dialogs/xfwm4-tweaks-dialog.glade b/settings-dialogs/xfwm4-tweaks-dialog.glade
index 38135a7e9..65ae7f4d0 100644
--- a/settings-dialogs/xfwm4-tweaks-dialog.glade
+++ b/settings-dialogs/xfwm4-tweaks-dialog.glade
@@ -528,6 +528,22 @@ or "skip taskbar" properties set
6
+
+
+
+ False
+ False
+ 7
+
+
@@ -557,7 +573,7 @@ or "skip taskbar" properties set
False
False
- 8
+ 9
diff --git a/src/events.c b/src/events.c
index 91c0dd6c5..f672ea2f0 100644
--- a/src/events.c
+++ b/src/events.c
@@ -835,6 +835,10 @@ titleButton (Client *c, guint state, XfwmEventButton *event)
if (screen_info->params->mousewheel_rollup)
{
clientShade (c);
+ if (screen_info->params->mousewheel_lower)
+ {
+ clientLower (c, None);
+ }
}
}
}
@@ -853,6 +857,10 @@ titleButton (Client *c, guint state, XfwmEventButton *event)
if (screen_info->params->mousewheel_rollup)
{
clientUnshade (c);
+ if (screen_info->params->mousewheel_lower)
+ {
+ clientRaise (c, None);
+ }
}
}
}
diff --git a/src/settings.c b/src/settings.c
index c74194b80..eeb5d6722 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -697,6 +697,7 @@ loadSettings (ScreenInfo *screen_info)
{"margin_top", NULL, G_TYPE_INT, FALSE},
{"maximized_offset", NULL, G_TYPE_INT, TRUE},
{"mousewheel_rollup", NULL, G_TYPE_BOOLEAN, FALSE},
+ {"mousewheel_lower", NULL, G_TYPE_BOOLEAN, FALSE},
{"move_opacity", NULL, G_TYPE_INT, TRUE},
{"placement_mode", NULL, G_TYPE_STRING, TRUE},
{"placement_ratio", NULL, G_TYPE_INT, TRUE},
@@ -790,6 +791,8 @@ loadSettings (ScreenInfo *screen_info)
getBoolValue ("horiz_scroll_opacity", rc);
screen_info->params->mousewheel_rollup =
getBoolValue ("mousewheel_rollup", rc);
+ screen_info->params->mousewheel_lower =
+ getBoolValue ("mousewheel_lower", rc);
screen_info->params->prevent_focus_stealing =
getBoolValue ("prevent_focus_stealing", rc);
screen_info->params->raise_delay =
@@ -1353,6 +1356,10 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_
{
screen_info->params->mousewheel_rollup = g_value_get_boolean (value);
}
+ else if (!strcmp (name, "mousewheel_lower"))
+ {
+ screen_info->params->mousewheel_lower = g_value_get_boolean (value);
+ }
else if (!strcmp (name, "prevent_focus_stealing"))
{
screen_info->params->prevent_focus_stealing = g_value_get_boolean (value);
diff --git a/src/settings.h b/src/settings.h
index f20c6db46..ffa75fcd2 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -220,6 +220,7 @@ struct _XfwmParams
gboolean full_width_title;
gboolean horiz_scroll_opacity;
gboolean mousewheel_rollup;
+ gboolean mousewheel_lower;
gboolean prevent_focus_stealing;
gboolean raise_on_click;
gboolean raise_on_focus;