From 0e76136436d5f50347775089cc0a78a94c72aa03 Mon Sep 17 00:00:00 2001 From: Matthew Brush Date: Mon, 18 Jul 2016 18:02:23 -0700 Subject: [PATCH 2/2] Tasklist: Add "Start New Instance" for grouped buttons --- plugins/tasklist/tasklist-widget.c | 55 +++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c index 82f7d08..724830f 100644 --- a/plugins/tasklist/tasklist-widget.c +++ b/plugins/tasklist/tasklist-widget.c @@ -2749,6 +2749,37 @@ xfce_tasklist_button_get_child_path (XfceTasklistChild *child) +static GtkWidget * +xfce_tasklist_button_create_context_menu (XfceTasklistChild *child) +{ + GtkWidget *menu; + gchar *path; + + menu = wnck_action_menu_new (child->window); + + /* add "Start new Instance" item to menu if supported by the platform */ + path = xfce_tasklist_button_get_child_path (child); + if (path != NULL) + { + GtkWidget *item; + item = gtk_separator_menu_item_new (); + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + item = gtk_menu_item_new_with_label (_("Start New Instance...")); + g_object_set_data_full (G_OBJECT (item), "exe-path", path, g_free); + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + g_signal_connect (item, + "activate", + G_CALLBACK (xfce_tasklist_button_start_new_instance_clicked), + child); + } + + return menu; +} + + + static gboolean xfce_tasklist_button_button_press_event (GtkWidget *button, GdkEventButton *event, @@ -2776,30 +2807,10 @@ xfce_tasklist_button_button_press_event (GtkWidget *button, if (event->button == 3) { - gchar *path; - - menu = wnck_action_menu_new (child->window); + menu = xfce_tasklist_button_create_context_menu (child); g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (gtk_widget_destroy), NULL); - /* add "Start new Instance" item to menu if supported by the platform */ - path = xfce_tasklist_button_get_child_path (child); - if (path != NULL) - { - GtkWidget *item; - item = gtk_separator_menu_item_new (); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - gtk_widget_show (item); - item = gtk_menu_item_new_with_label (_("Start New Instance...")); - g_object_set_data_full (G_OBJECT (item), "exe-path", path, g_free); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - gtk_widget_show (item); - g_signal_connect (item, - "activate", - G_CALLBACK (xfce_tasklist_button_start_new_instance_clicked), - child); - } - gtk_menu_attach_to_widget (GTK_MENU (menu), button, NULL); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, child->type == CHILD_TYPE_WINDOW ? xfce_panel_plugin_position_menu : NULL, @@ -3377,7 +3388,7 @@ xfce_tasklist_group_button_menu (XfceTasklistChild *group_child, if (action_menu_entries) gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), - wnck_action_menu_new (child->window)); + xfce_tasklist_button_create_context_menu (child)); } } -- 2.7.4