static gboolean move_applet (PanelWidget *panel, PanelObjectPackType pack_type, int pack_index, int applet_index) { GSList *applet_list; AppletInfo *info; GtkWidget *parent; applet_list = panel_applet_list_applets (); info = g_slist_nth_data (applet_list, applet_index); if (info == NULL || info->widget == NULL || !panel_applet_can_freely_move (info)) return FALSE; parent = gtk_widget_get_parent (info->widget); if (parent != NULL && PANEL_IS_WIDGET (parent)) { panel_widget_reparent (PANEL_WIDGET (parent), panel, info->widget, pack_type, pack_index); } return TRUE; }
static GtkWidget * panel_applet_get_edit_menu (AppletInfo *info) { GtkWidget *menu; GtkWidget *menuitem; GtkWidget *image; gboolean movable; gboolean removable; if (info->edit_menu) return info->edit_menu; if (panel_lockdown_get_panels_locked_down_s ()) return NULL; menu = panel_applet_create_bare_menu (info); movable = panel_applet_can_freely_move (info); removable = panel_layout_is_writable (); menuitem = gtk_menu_item_new_with_mnemonic (_("_Move")); g_signal_connect (menuitem, "activate", G_CALLBACK (move_applet_callback), info); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_set_sensitive (menuitem, movable); menuitem = gtk_image_menu_item_new_with_mnemonic (_("_Remove From Panel")); image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image); g_signal_connect (menuitem, "activate", G_CALLBACK (applet_remove_callback), info); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_set_sensitive (menuitem, removable); info->edit_menu = menu; panel_lockdown_on_notify (panel_lockdown_get (), "panels-locked-down", G_OBJECT (info->edit_menu), panel_applet_edit_menu_lockdown_changed, info); return info->edit_menu; }
static GtkWidget * panel_applet_get_menu (AppletInfo *info) { GtkWidget *menu; GList *l; gboolean added_anything = FALSE; /** * Separator to split the menu * * APPLET ITEMS * ------------- * Move * Remove From Panel */ GtkSeparatorMenuItem *separator; /** * Variables for the edit menu */ GtkWidget *menuitem; GtkWidget *image; gboolean movable; gboolean removable; if (info->menu) return info->menu; menu = panel_applet_create_bare_menu (info); /** * Moved the panel_applet_get_edit_menu code to here * to recombine the menu as seen in the traditional * Gnome 2 setup */ movable = panel_applet_can_freely_move (info); removable = panel_layout_is_writable (); // Hack. We always added something now :P added_anything = TRUE; for (l = info->user_menu; l; l = l->next) { AppletUserMenu *user_menu = l->data; if (user_menu->is_enabled_func && !user_menu->is_enabled_func ()) continue; add_to_submenus (info, "", user_menu->name, user_menu, menu, info->user_menu); added_anything = TRUE; } // Add the separator before we add the move/remove items (less confusion) separator = gtk_separator_menu_item_new (); gtk_widget_show (separator); gtk_menu_shell_append (GTK_MENU_SHELL(menu), separator); menuitem = gtk_menu_item_new_with_mnemonic (_("_Move")); g_signal_connect (menuitem, "activate", G_CALLBACK (move_applet_callback), info); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_set_sensitive (menuitem, movable); // TODO: Add a seperator menuitem = gtk_image_menu_item_new_with_mnemonic (_("_Remove From Panel")); image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image); g_signal_connect (menuitem, "activate", G_CALLBACK (applet_remove_callback), info); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_set_sensitive (menuitem, removable); if ( ! added_anything) { g_signal_handlers_disconnect_by_func (menu, G_CALLBACK (applet_menu_show), info); g_signal_handlers_disconnect_by_func (menu, G_CALLBACK (applet_menu_deactivate), info); g_object_unref (menu); return NULL; } info->menu = menu; panel_lockdown_on_notify (panel_lockdown_get (), NULL, G_OBJECT (info->menu), panel_applet_menu_lockdown_changed, info); return info->menu; }