diff --git a/plugins/tasklist/tasklist-dialog.glade b/plugins/tasklist/tasklist-dialog.glade
index db6db74..8fa64c4 100644
--- a/plugins/tasklist/tasklist-dialog.glade
+++ b/plugins/tasklist/tasklist-dialog.glade
@@ -220,6 +220,19 @@
3
+
+
+
+ 4
+
+
diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c
index 5978dbd..8b92ba6 100644
--- a/plugins/tasklist/tasklist-widget.c
+++ b/plugins/tasklist/tasklist-widget.c
@@ -95,7 +95,8 @@ enum
PROP_SHOW_HANDLE,
PROP_SORT_ORDER,
PROP_WINDOW_SCROLLING,
- PROP_INCLUDE_ALL_BLINKING
+ PROP_INCLUDE_ALL_BLINKING,
+ PROP_MIDDLE_BUTTON_CLOSE
};
struct _XfceTasklistClass
@@ -160,6 +161,9 @@ struct _XfceTasklist
* or only the active workspace */
guint all_blinking : 1;
+ /* close window with the mouse middle button */
+ guint middle_button_close : 1;
+
/* whether we only show windows that are in the geometry of
* the monitor the tasklist is on */
guint all_monitors : 1;
@@ -472,6 +476,13 @@ xfce_tasklist_class_init (XfceTasklistClass *klass)
TRUE,
EXO_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_MIDDLE_BUTTON_CLOSE,
+ g_param_spec_boolean ("middle-button-close",
+ NULL, NULL,
+ TRUE,
+ EXO_PARAM_READWRITE));
+
gtk_widget_class_install_style_property (gtkwidget_class,
g_param_spec_int ("max-button-length",
NULL,
@@ -549,6 +560,7 @@ xfce_tasklist_init (XfceTasklist *tasklist)
tasklist->all_monitors = TRUE;
tasklist->window_scrolling = TRUE;
tasklist->all_blinking = TRUE;
+ tasklist->middle_button_close = FALSE;
xfce_tasklist_geometry_set_invalid (tasklist);
#ifdef GDK_WINDOWING_X11
tasklist->wireframe_window = 0;
@@ -639,6 +651,10 @@ xfce_tasklist_get_property (GObject *object,
g_value_set_boolean (value, tasklist->all_blinking);
break;
+ case PROP_MIDDLE_BUTTON_CLOSE:
+ g_value_set_boolean (value, tasklist->middle_button_close);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -713,6 +729,10 @@ xfce_tasklist_set_property (GObject *object,
tasklist->all_blinking = g_value_get_boolean (value);
break;
+ case PROP_MIDDLE_BUTTON_CLOSE:
+ tasklist->middle_button_close = g_value_get_boolean (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -2716,6 +2736,19 @@ xfce_tasklist_button_button_release_event (GtkWidget *button,
xfce_tasklist_button_activate (child, event->time);
}
+ /* close the window on middle mouse button */
+ if (event->type == GDK_BUTTON_RELEASE
+ && !xfce_taskbar_is_locked (child->tasklist)
+ && event->button == 2
+ && child->tasklist->middle_button_close
+ && !(event->x == 0 && event->y == 0) /* 0,0 = outside the widget in Gtk */
+ && event->x >= 0 && event->x < button->allocation.width
+ && event->y >= 0 && event->y < button->allocation.height)
+ {
+ wnck_window_close (child->window, event->time);
+ return TRUE;
+ }
+
return FALSE;
}
diff --git a/plugins/tasklist/tasklist.c b/plugins/tasklist/tasklist.c
index 71881c5..b705c4d 100644
--- a/plugins/tasklist/tasklist.c
+++ b/plugins/tasklist/tasklist.c
@@ -141,6 +141,7 @@ tasklist_plugin_construct (XfcePanelPlugin *panel_plugin)
{ "sort-order", G_TYPE_UINT },
{ "window-scrolling", G_TYPE_BOOLEAN },
{ "include-all-blinking", G_TYPE_BOOLEAN },
+ { "middle-button-close", G_TYPE_BOOLEAN },
{ NULL }
};
@@ -253,6 +254,7 @@ tasklist_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
TASKLIST_DIALOG_BIND ("show-handle", "active")
TASKLIST_DIALOG_BIND ("sort-order", "active")
TASKLIST_DIALOG_BIND ("window-scrolling", "active")
+ TASKLIST_DIALOG_BIND ("middle-button-close", "active")
#ifndef GDK_WINDOWING_X11
/* not functional in x11, so avoid confusion */