static gboolean move_applet (PanelWidget *panel, int pos, int applet_index) { GSList *applet_list; AppletInfo *info; GtkWidget *parent; applet_list = mate_panel_applet_list_applets (); info = g_slist_nth_data (applet_list, applet_index); if ( ! mate_panel_applet_can_freely_move (info)) return FALSE; if (pos < 0) pos = 0; parent = gtk_widget_get_parent (info->widget); if (info != NULL && info->widget != NULL && parent != NULL && PANEL_IS_WIDGET (parent)) { GSList *forb; forb = g_object_get_data (G_OBJECT (info->widget), MATE_PANEL_APPLET_FORBIDDEN_PANELS); if ( ! g_slist_find (forb, panel)) panel_widget_reparent (PANEL_WIDGET (parent), panel, info->widget, pos); } return TRUE; }
int panel_find_applet_index (GtkWidget *widget) { GSList *applet_list, *l; int i; applet_list = mate_panel_applet_list_applets (); for (i = 0, l = applet_list; l; i++, l = l->next) { AppletInfo *info = l->data; if (info->widget == widget) return i; } return i; }
static gboolean drop_internal_applet (PanelWidget *panel, int pos, const char *applet_type, int action) { int applet_index = -1; gboolean remove_applet = FALSE; gboolean success = FALSE; if (applet_type == NULL) return FALSE; if (sscanf (applet_type, "MENU:%d", &applet_index) == 1 || sscanf (applet_type, "DRAWER:%d", &applet_index) == 1) { if (action != GDK_ACTION_MOVE) g_warning ("Only MOVE supported for menus/drawers"); success = move_applet (panel, pos, applet_index); } else if (strncmp (applet_type, "MENU:", strlen ("MENU:")) == 0) { const char *menu; const char *menu_path; menu = &applet_type[strlen ("MENU:")]; menu_path = strchr (menu, '/'); if (!menu_path) { if (strncmp (menu, "MAIN", strlen ("MAIN")) == 0) success = drop_menu (panel, pos, NULL, NULL); else success = drop_menu (panel, pos, menu, NULL); } else { char *menu_filename; menu_filename = g_strndup (menu, menu_path - menu); menu_path++; success = drop_menu (panel, pos, menu_filename, menu_path); g_free (menu_filename); } } else if (!strcmp (applet_type, "DRAWER:NEW")) { if (panel_profile_id_lists_are_writable ()) { panel_drawer_create (panel->toplevel, pos, NULL, FALSE, NULL); success = TRUE; } else { success = FALSE; } } else if (!strncmp (applet_type, "ACTION:", strlen ("ACTION:"))) { if (panel_profile_id_lists_are_writable ()) { remove_applet = panel_action_button_load_from_drag ( panel->toplevel, pos, applet_type, &applet_index); success = TRUE; } else { success = FALSE; } } else if (!strcmp (applet_type, "MENUBAR:NEW")) { if (panel_profile_id_lists_are_writable ()) { panel_menu_bar_create (panel->toplevel, pos); success = TRUE; } else { success = FALSE; } } else if (!strcmp(applet_type,"SEPARATOR:NEW")) { if (panel_profile_id_lists_are_writable ()) { panel_separator_create (panel->toplevel, pos); success = TRUE; } else { success = FALSE; } } else if (!strcmp(applet_type,"LAUNCHER:ASK")) { if (panel_profile_id_lists_are_writable ()) { ask_about_launcher (NULL, panel, pos, TRUE); success = TRUE; } else { success = FALSE; } } if (remove_applet && action == GDK_ACTION_MOVE) { AppletInfo *info; GSList *applet_list; applet_list = mate_panel_applet_list_applets (); info = g_slist_nth_data (applet_list, applet_index); if (info) panel_profile_delete_object (info); } return success; }