Hi, I have attached a patch, that will provide a button to close, minimize, restore group of same tasks in libWNCK:tasklist. Review it and provide me comments for improvisation. I have also attached a screen shot of how it will look like. Thanks Srini.
Index: tasklist.c =================================================================== RCS file: /cvs/gnome/libwnck/libwnck/tasklist.c,v retrieving revision 1.56 diff -u -r1.56 tasklist.c --- tasklist.c 10 Dec 2003 11:39:39 -0000 1.56 +++ tasklist.c 29 Jan 2004 06:41:38 -0000 @@ -248,6 +248,13 @@ WnckWindow *window); #endif +static void wnck_task_closeall(GtkMenuItem *menu_item, + gpointer data); +static void wnck_task_minimizeall(GtkMenuItem *menu_item, + gpointer data); +static void wnck_task_maximizeall(GtkMenuItem *menu_item, + gpointer data); + static gpointer task_parent_class; static gpointer tasklist_parent_class; @@ -1851,7 +1858,7 @@ GtkWidget *menu_item; GtkWidget *image; GList *l, *list; - + if (task->class_group == NULL) return; @@ -1872,8 +1879,8 @@ g_list_free (list); l = task->windows; - while (l) - { + while (l) + { win_task = WNCK_TASK (l->data); text = wnck_task_get_text (win_task); @@ -1881,21 +1888,21 @@ g_free (text); pixbuf = wnck_task_get_icon (win_task); - if (pixbuf) - { - image = gtk_image_new_from_pixbuf (pixbuf); - gtk_widget_show (image); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), - image); - g_object_unref (pixbuf); - } + if (pixbuf) + { + image = gtk_image_new_from_pixbuf (pixbuf); + gtk_widget_show (image); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), + image); + g_object_unref (pixbuf); + } gtk_widget_show (menu_item); - if (action_submenu) + if (action_submenu) gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), wnck_create_window_action_menu (win_task->window)); - else + else g_signal_connect_object (G_OBJECT (menu_item), "activate", G_CALLBACK (wnck_task_menu_activated), G_OBJECT (win_task), @@ -1906,16 +1913,112 @@ l = l->next; } - gtk_menu_set_screen (GTK_MENU (menu), - _wnck_screen_get_gdk_screen (task->tasklist->priv->screen)); + /* In case of Right click, show Close All, Minimize All, Maximize All*/ + if (action_submenu) + { + GtkWidget * separator; + GtkWidget *image; + + separator = gtk_separator_menu_item_new (); + gtk_widget_show (separator); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), separator); + + menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Minimize all")); + image = gtk_image_new_from_stock (WNCK_STOCK_MINIMIZE, GTK_ICON_SIZE_MENU); + gtk_widget_show (image); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); + gtk_widget_show (menu_item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + g_signal_connect_object (G_OBJECT (menu_item), "activate", + G_CALLBACK (wnck_task_minimizeall), + G_OBJECT (task), + 0); + + + menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Restore all")); + image = gtk_image_new_from_stock (WNCK_STOCK_MAXIMIZE, GTK_ICON_SIZE_MENU); + gtk_widget_show (image); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); + gtk_widget_show (menu_item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + + g_signal_connect_object (G_OBJECT (menu_item), "activate", + G_CALLBACK (wnck_task_maximizeall), + G_OBJECT (task), + 0); + + separator = gtk_separator_menu_item_new (); + gtk_widget_show (separator); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), + separator); + + menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Close all")); + image = gtk_image_new_from_stock (WNCK_STOCK_DELETE, GTK_ICON_SIZE_MENU); + gtk_widget_show (image); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); + gtk_widget_show (menu_item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + + g_signal_connect_object (G_OBJECT (menu_item), "activate", + G_CALLBACK (wnck_task_closeall), + G_OBJECT (task), + 0); + } + gtk_menu_set_screen (GTK_MENU (menu), + _wnck_screen_get_gdk_screen (task->tasklist->priv->screen)); - gtk_widget_show (menu); - gtk_menu_popup (GTK_MENU (menu), - NULL, NULL, + gtk_widget_show (menu); + gtk_menu_popup (GTK_MENU (menu), + NULL, NULL, wnck_task_position_menu, task->button, 1, gtk_get_current_event_time ()); } +static void wnck_task_closeall(GtkMenuItem *menu_item, + gpointer data) +{ + WnckTask *task = WNCK_TASK (data); + GList *l; + + l = task->windows; + while (l) + { + WnckTask *child = WNCK_TASK(l->data); + wnck_window_close (child->window); + l = l->next; + } +} + +static void wnck_task_maximizeall(GtkMenuItem *menu_item, + gpointer data) +{ + WnckTask *task = WNCK_TASK (data); + GList *l; + + l = task->windows; + while (l) + { + WnckTask *child = WNCK_TASK(l->data); + wnck_window_unminimize (child->window); + l = l->next; + } +} + +static void wnck_task_minimizeall(GtkMenuItem *menu_item, + gpointer data) +{ + WnckTask *task = WNCK_TASK (data); + GList *l; + + l = task->windows; + while (l) + { + WnckTask *child = WNCK_TASK(l->data); + wnck_window_minimize (child->window); + l = l->next; + } +} + static void wnck_task_button_toggled (GtkButton *button, WnckTask *task)
Attachment:
All.png
Description: PNG image