summaryrefslogtreecommitdiff
path: root/libmdock/mdock-item-window-selector.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmdock/mdock-item-window-selector.c')
-rw-r--r--libmdock/mdock-item-window-selector.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/libmdock/mdock-item-window-selector.c b/libmdock/mdock-item-window-selector.c
index 7bd0199..2fbf3e7 100644
--- a/libmdock/mdock-item-window-selector.c
+++ b/libmdock/mdock-item-window-selector.c
@@ -48,6 +48,8 @@ enum MDockItemWindowSelectorProperties {
static GParamSpec *obj_properties[N_PROPERTIES] = { NULL };
+G_DEFINE_QUARK(mdock-item-window-selector-menu, mdock_item_window_selector_menu)
+
static GSequenceIter * find_window(MDockItemWindowSelector *self, WnckWindow *window)
{
GSequenceIter *iter = g_sequence_get_begin_iter(self->priv->windows);
@@ -62,13 +64,34 @@ static GSequenceIter * find_window(MDockItemWindowSelector *self, WnckWindow *wi
return NULL;
}
+static gboolean handle_window_button_press(MDockItemWindowSelector *self, GdkEventButton *event, MDockWindow *window)
+{
+ g_debug("window item button press");
+
+ switch (event->button) {
+ case 3:
+ gtk_menu_popup(GTK_MENU(g_object_get_qdata(G_OBJECT(window), mdock_item_window_selector_menu_quark())),
+ NULL, NULL, NULL, NULL,
+ event->button, event->time);
+ break;
+ }
+
+ return TRUE;
+}
+
static gboolean handle_window_button_release(MDockItemWindowSelector *self, GdkEventButton *event, MDockWindow *window)
{
g_debug("window item button release");
switch (event->button) {
case 1:
- wnck_window_activate_transient(window->window, event->time);
+ if (!wnck_window_is_minimized(window->window) &&
+ (wnck_window_is_most_recently_activated(window->window)
+ || wnck_window_transient_is_most_recently_activated(window->window))) {
+ wnck_window_minimize(window->window);
+ } else {
+ wnck_window_activate_transient(window->window, event->time);
+ }
break;
}
@@ -188,9 +211,16 @@ void mdock_item_window_selector_add_window(MDockItemWindowSelector *self, WnckWi
gtk_widget_hide(GTK_WIDGET(self->priv->app_label));
gtk_widget_show(GTK_WIDGET(win));
+ g_signal_connect_object(win, "button-press-event",
+ G_CALLBACK(handle_window_button_press), self,
+ G_CONNECT_SWAPPED);
g_signal_connect_object(win, "button-release-event",
G_CALLBACK(handle_window_button_release), self,
G_CONNECT_SWAPPED);
+
+ g_object_set_qdata_full(G_OBJECT(win), mdock_item_window_selector_menu_quark(),
+ wnck_action_menu_new(window),
+ (GDestroyNotify)gtk_widget_destroy);
}
void mdock_item_window_selector_remove_window(MDockItemWindowSelector *self, WnckWindow *window)