Index: windowlist.c =================================================================== --- windowlist.c (revision 20101) +++ windowlist.c (working copy) @@ -264,8 +264,8 @@ static void plugin_button_clicked (GtkWidget * w, - GdkEventButton *ev, - Windowlist * wl) + GdkEventButton *ev, + Windowlist * wl) { static GtkWidget *menu = NULL; GtkWidget *mi, *img; @@ -282,7 +282,7 @@ PangoFontDescription *bold_italic = pango_font_description_from_string ("bold italic"); if (menu) - gtk_widget_destroy (menu); + gtk_widget_destroy (menu); gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &icon_width, &icon_height); @@ -292,76 +292,79 @@ menu = gtk_menu_new (); if (wl->show_all_workspaces) - wscount = netk_screen_get_workspace_count (wl->screen); + wscount = netk_screen_get_workspace_count (wl->screen); else - wscount = 1; + wscount = 1; for (i = 0; i < wscount; i++) { if (wl->show_all_workspaces) - netk_workspace = netk_screen_get_workspace (wl->screen, i); + netk_workspace = netk_screen_get_workspace (wl->screen, i); else - netk_workspace = netk_screen_get_active_workspace (wl->screen); + netk_workspace = netk_screen_get_active_workspace (wl->screen); - ws_name = netk_workspace_get_name (netk_workspace); + if (wl->show_all_workspaces) + { + ws_name = netk_workspace_get_name (netk_workspace); - if(!ws_name || atoi(ws_name) == i+1) - ws_label = g_strdup_printf(_("Workspace %d"), i+1); - else - ws_label = g_markup_printf_escaped("%s", ws_name); + if(!ws_name || atoi(ws_name) == i+1) + ws_label = g_strdup_printf(_("Workspace %d"), i+1); + else + ws_label = g_markup_printf_escaped("%s", ws_name); - mi = gtk_menu_item_new_with_label (ws_label); - g_free (ws_label); - g_signal_connect_swapped (mi, "activate", - G_CALLBACK (netk_workspace_activate), netk_workspace); + mi = gtk_menu_item_new_with_label (ws_label); + g_free (ws_label); + g_signal_connect_swapped (mi, "activate", + G_CALLBACK (netk_workspace_activate), netk_workspace); - if (netk_workspace == active_workspace) - gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), bold); - else - gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), italic); + if (netk_workspace == active_workspace) + gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), bold); + else + gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), italic); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); - mi = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + mi = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + } for (li = windows; li; li = li->next) { window = li->data; window_workspace = netk_window_get_workspace (window); if (netk_workspace != window_workspace && !(netk_window_is_sticky (window) && netk_workspace == active_workspace)) - continue; - - state = netk_window_get_state (window); + continue; + state = netk_window_get_state (window); + mi = create_menu_item (window, - wl, - icon_width, - icon_height); + wl, + icon_width, + icon_height); if (!mi) continue; - - if(state & NETK_WINDOW_STATE_URGENT && netk_workspace == active_workspace) - { - gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), - bold); - } - else if (state & NETK_WINDOW_STATE_URGENT) - { - gtk_widget_modify_fg (gtk_bin_get_child (GTK_BIN (mi)), + + if(state & NETK_WINDOW_STATE_URGENT && netk_workspace == active_workspace) + { + gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), + bold); + } + else if (state & NETK_WINDOW_STATE_URGENT) + { + gtk_widget_modify_fg (gtk_bin_get_child (GTK_BIN (mi)), GTK_STATE_NORMAL, &(menu->style->fg[GTK_STATE_INSENSITIVE])); - gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), - bold_italic); - } - else if (netk_workspace != active_workspace) + gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), + bold_italic); + } + else if (netk_workspace != active_workspace) { gtk_widget_modify_fg (gtk_bin_get_child (GTK_BIN (mi)), GTK_STATE_NORMAL, &(menu->style->fg[GTK_STATE_INSENSITIVE])); - gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), - italic); + gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (mi)), + italic); } g_signal_connect (mi, "button-release-event", @@ -370,69 +373,75 @@ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); } - mi = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + if (wl->show_all_workspaces) + { + mi = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + } } - + pango_font_description_free(italic); pango_font_description_free(bold); pango_font_description_free(bold_italic); - /* Count workspace number */ - wscount = netk_screen_get_workspace_count (wl->screen); + if (wl->show_all_workspaces) + { + /* Count workspace number */ + wscount = netk_screen_get_workspace_count (wl->screen); - /* Add workspace */ - if (wl->show_windowlist_icons) - { - mi = gtk_image_menu_item_new_with_label (_("Add workspace")); - img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img); + /* Add workspace */ + if (wl->show_windowlist_icons) + { + mi = gtk_image_menu_item_new_with_label (_("Add workspace")); + img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img); + } + else + { + mi = gtk_menu_item_new_with_label (_("Add workspace")); + } + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + g_signal_connect_swapped (mi, "activate", G_CALLBACK (set_num_screens), + GINT_TO_POINTER (wscount + 1)); + + /* Remove workspace */ + if (!wl->show_all_workspaces) + { + netk_workspace = netk_screen_get_workspace (wl->screen, wscount-1); + ws_name = netk_workspace_get_name (netk_workspace); + } + + if(!ws_name || atoi(ws_name) == wscount) + rm_label = g_strdup_printf(_("Remove Workspace %d"), wscount); + else + rm_label = g_markup_printf_escaped(_("Remove Workspace '%s'"), ws_name); + + if (wl->show_windowlist_icons) + { + mi = gtk_image_menu_item_new_with_label (rm_label); + img = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img); + } + else + { + mi = gtk_menu_item_new_with_label (rm_label); + } + + g_free (rm_label); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + g_signal_connect_swapped (mi, "activate", G_CALLBACK (set_num_screens), + GINT_TO_POINTER (wscount - 1)); } - else - { - mi = gtk_menu_item_new_with_label (_("Add workspace")); - } - - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); - g_signal_connect_swapped (mi, "activate", G_CALLBACK (set_num_screens), - GINT_TO_POINTER (wscount + 1)); - /* Remove workspace */ - if (!wl->show_all_workspaces) - { - netk_workspace = netk_screen_get_workspace (wl->screen, wscount-1); - ws_name = netk_workspace_get_name (netk_workspace); - } - - if(!ws_name || atoi(ws_name) == wscount) - rm_label = g_strdup_printf(_("Remove Workspace %d"), wscount); - else - rm_label = g_markup_printf_escaped(_("Remove Workspace '%s'"), ws_name); - - if (wl->show_windowlist_icons) - { - mi = gtk_image_menu_item_new_with_label (rm_label); - img = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img); - } - else - { - mi = gtk_menu_item_new_with_label (rm_label); - } - - g_free (rm_label); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); - g_signal_connect_swapped (mi, "activate", G_CALLBACK (set_num_screens), - GINT_TO_POINTER (wscount - 1)); - /* Activate toggle button */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wl->button), TRUE); - + g_signal_connect (menu, "deactivate", G_CALLBACK (menu_deactivated), wl->button); gtk_widget_show_all (menu); - + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, (GtkMenuPositionFunc)position_menu, wl, ev->button, ev->time);