diff options
author | Javier <dev.git@javispedro.com> | 2015-01-25 03:26:37 +0100 |
---|---|---|
committer | Javier <dev.git@javispedro.com> | 2015-01-25 03:26:37 +0100 |
commit | fd1ad6fba7437f049854720b892fdd033b3c8be3 (patch) | |
tree | f60c87efe5e6b60725974672d7878771ada6335f /libmdock/mdock-item-window-selector.c | |
parent | a9c455b0094cfba67db87885079eb566146895c5 (diff) | |
download | mdock-fd1ad6fba7437f049854720b892fdd033b3c8be3.tar.gz mdock-fd1ad6fba7437f049854720b892fdd033b3c8be3.zip |
right click on window selector
Diffstat (limited to 'libmdock/mdock-item-window-selector.c')
-rw-r--r-- | libmdock/mdock-item-window-selector.c | 32 |
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) |