From fd1ad6fba7437f049854720b892fdd033b3c8be3 Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 25 Jan 2015 03:26:37 +0100 Subject: right click on window selector --- libmdock/mdock-item-window-selector.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'libmdock/mdock-item-window-selector.c') 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) -- cgit v1.2.3