static gboolean mate_panel_applet_load_idle_handler (gpointer dummy) { PanelObjectType applet_type; MatePanelAppletToLoad *applet = NULL; PanelToplevel *toplevel = NULL; PanelWidget *panel_widget; GSList *l; if (!mate_panel_applets_to_load) { mate_panel_applet_have_load_idle = FALSE; return FALSE; } for (l = mate_panel_applets_to_load; l; l = l->next) { applet = l->data; toplevel = panel_profile_get_toplevel_by_id (applet->toplevel_id); if (toplevel) break; } if (!l) { /* All the remaining applets don't have a panel */ for (l = mate_panel_applets_to_load; l; l = l->next) free_applet_to_load (l->data); g_slist_free (mate_panel_applets_to_load); mate_panel_applets_to_load = NULL; mate_panel_applet_have_load_idle = FALSE; if (mate_panel_applets_loading == NULL) { /* unhide any potential initially hidden toplevel */ mate_panel_applet_queue_initial_unhide_toplevels (NULL); } return FALSE; } mate_panel_applets_to_load = g_slist_delete_link (mate_panel_applets_to_load, l); mate_panel_applets_loading = g_slist_append (mate_panel_applets_loading, applet); panel_widget = panel_toplevel_get_panel_widget (toplevel); if (applet->right_stick) { if (!panel_widget->packed) applet->position = panel_widget->size - applet->position; else applet->position = -1; } /* We load applets asynchronously, so we specifically don't call * mate_panel_applet_stop_loading() for this type. However, in case of * failure during the load, we might call mate_panel_applet_stop_loading() * synchronously, which will make us lose the content of the applet * variable. So we save the type to be sure we always ignore the * applets. */ applet_type = applet->type; switch (applet_type) { case PANEL_OBJECT_APPLET: mate_panel_applet_frame_load_from_gsettings ( panel_widget, applet->locked, applet->position, applet->id); break; case PANEL_OBJECT_DRAWER: drawer_load_from_gsettings (panel_widget, applet->locked, applet->position, applet->id); break; case PANEL_OBJECT_MENU: panel_menu_button_load_from_gsettings (panel_widget, applet->locked, applet->position, TRUE, applet->id); break; case PANEL_OBJECT_LAUNCHER: launcher_load_from_gsettings (panel_widget, applet->locked, applet->position, applet->id); break; case PANEL_OBJECT_ACTION: panel_action_button_load_from_gsettings ( panel_widget, applet->locked, applet->position, TRUE, applet->id); break; case PANEL_OBJECT_MENU_BAR: panel_menu_bar_load_from_gsettings ( panel_widget, applet->locked, applet->position, TRUE, applet->id); break; case PANEL_OBJECT_SEPARATOR: panel_separator_load_from_gsettings (panel_widget, applet->locked, applet->position, applet->id); break; default: g_assert_not_reached (); break; } /* Only the real applets will do a late stop_loading */ if (applet_type != PANEL_OBJECT_APPLET) mate_panel_applet_stop_loading (applet->id); return TRUE; }
static void load_drawer_applet (char *toplevel_id, GSettings *settings, const char *custom_icon, gboolean use_custom_icon, const char *tooltip, PanelToplevel *parent_toplevel, gboolean locked, int pos, gboolean exactpos, const char *id) { PanelOrientation orientation; PanelToplevel *toplevel = NULL; Drawer *drawer = NULL; PanelWidget *panel_widget; orientation = panel_toplevel_get_orientation (parent_toplevel); if (toplevel_id) toplevel = panel_profile_get_toplevel_by_id (toplevel_id); if (!toplevel) toplevel = create_drawer_toplevel (id, settings); if (toplevel) { panel_toplevel_hide (toplevel, FALSE, -1); drawer = create_drawer_applet (toplevel, parent_toplevel, tooltip, custom_icon, use_custom_icon, orientation); } if (!drawer) return; panel_widget = panel_toplevel_get_panel_widget (parent_toplevel); drawer->info = mate_panel_applet_register (drawer->button, drawer, (GDestroyNotify) g_free, panel_widget, locked, pos, exactpos, PANEL_OBJECT_DRAWER, id); if (!drawer->info) { gtk_widget_destroy (GTK_WIDGET (toplevel)); return; } g_signal_connect_after (drawer->button, "size_allocate", G_CALLBACK (drawer_button_size_allocated), drawer); panel_widget_add_forbidden (panel_toplevel_get_panel_widget (drawer->toplevel)); panel_widget_set_applet_expandable (panel_widget, GTK_WIDGET (drawer->button), FALSE, TRUE); panel_widget_set_applet_size_constrained (panel_widget, GTK_WIDGET (drawer->button), TRUE); mate_panel_applet_add_callback (drawer->info, "add", "list-add", _("_Add to Drawer..."), drawer_changes_enabled); mate_panel_applet_add_callback (drawer->info, "properties", "document-properties", _("_Properties"), drawer_changes_enabled); mate_panel_applet_add_callback (drawer->info, "help", "help-browser", _("_Help"), NULL); panel_drawer_connect_to_gsettings (drawer); }