From fadfd87356e3dcff6e1edf0dc6b1fd2c826f6ca7 Mon Sep 17 00:00:00 2001 From: Matthew Brush Date: Mon, 18 Jul 2016 18:41:38 -0700 Subject: [PATCH 3/3] Tasklist: Add only one "Start New Instance" item for grouped buttons Rather than having a "Start New Instance" item prepended to each grouped button's submenu, append the item after the individual instance's submenu items. Use the last instance's PID to figure out the path to launch. --- plugins/tasklist/tasklist-widget.c | 58 +++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c index 724830f..8bb09eb 100644 --- a/plugins/tasklist/tasklist-widget.c +++ b/plugins/tasklist/tasklist-widget.c @@ -2749,33 +2749,41 @@ xfce_tasklist_button_get_child_path (XfceTasklistChild *child) -static GtkWidget * -xfce_tasklist_button_create_context_menu (XfceTasklistChild *child) +static void +xfce_tasklist_button_add_new_start_new_instance_item (XfceTasklistChild *child, + GtkWidget *menu, + gboolean append) { - GtkWidget *menu; - gchar *path; - - menu = wnck_action_menu_new (child->window); + gchar *path; + GtkWidget *sep; + GtkWidget *item; - /* add "Start new Instance" item to menu if supported by the platform */ path = xfce_tasklist_button_get_child_path (child); - if (path != NULL) + if (path == NULL) + return; + + sep = gtk_separator_menu_item_new (); + + item = gtk_menu_item_new_with_label (_("Start New Instance...")); + g_object_set_data_full (G_OBJECT (item), "exe-path", path, g_free); + g_signal_connect (item, + "activate", + G_CALLBACK (xfce_tasklist_button_start_new_instance_clicked), + child); + + gtk_widget_show (sep); + gtk_widget_show (item); + + if (append) { - 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_append (GTK_MENU_SHELL (menu), sep); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + else + { + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), sep); 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; } @@ -2807,7 +2815,8 @@ xfce_tasklist_button_button_press_event (GtkWidget *button, if (event->button == 3) { - menu = xfce_tasklist_button_create_context_menu (child); + menu = wnck_action_menu_new (child->window); + xfce_tasklist_button_add_new_start_new_instance_item (child, menu, FALSE); g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (gtk_widget_destroy), NULL); @@ -3388,7 +3397,10 @@ xfce_tasklist_group_button_menu (XfceTasklistChild *group_child, if (action_menu_entries) gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), - xfce_tasklist_button_create_context_menu (child)); + wnck_action_menu_new (child->window)); + + if (li->next == NULL) + xfce_tasklist_button_add_new_start_new_instance_item (child, menu, TRUE); } } -- 2.7.4