void panel_action_button_load_from_mateconf (PanelWidget *panel, gboolean locked, int position, gboolean exactpos, const char *id) { int type; const char *key; char *action_type; key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "action_type"); action_type = mateconf_client_get_string (panel_mateconf_get_client (), key, NULL); if (!mateconf_string_to_enum (panel_action_type_map, action_type, &type)) { g_warning ("Unkown action type '%s' from %s", action_type, key); g_free (action_type); return; } g_free (action_type); /* compatibility: migrate from MATE < 2.13.90 */ if (type == PANEL_ACTION_SCREENSHOT) panel_compatibility_migrate_screenshot_action (panel_mateconf_get_client (), id); else panel_action_button_load (type, panel, locked, position, exactpos, id, FALSE); }
void panel_action_button_load_from_mateconf (PanelWidget *panel, gboolean locked, int position, gboolean exactpos, const char *id) { int type; const char *key; char *action_type; key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "action_type"); action_type = mateconf_client_get_string (panel_mateconf_get_client (), key, NULL); if (!mateconf_string_to_enum (panel_action_type_map, action_type, &type)) { g_warning ("Unkown action type '%s' from %s", action_type, key); g_free (action_type); return; } g_free (action_type); panel_action_button_load (type, panel, locked, position, exactpos, id); }
/* This is only for backwards compatibility with 2.0.x * We load an old-style lock/logout button as an action * button but make sure to retain the lock/logout configuration * so logging back into 2.0.x still works. */ void panel_action_button_load_compatible (PanelObjectType object_type, PanelWidget *panel, gboolean locked, int position, gboolean exactpos, const char *id) { PanelActionButtonType action_type; g_assert (object_type == PANEL_OBJECT_LOGOUT || object_type == PANEL_OBJECT_LOCK); action_type = object_type == PANEL_OBJECT_LOGOUT ? PANEL_ACTION_LOGOUT : PANEL_ACTION_LOCK; panel_action_button_load (action_type, panel, locked, position, exactpos, id, TRUE); }
void panel_action_button_load_from_gsettings (PanelWidget *panel, gboolean locked, int position, gboolean exactpos, const char *id) { GSettings *settings; PanelActionButtonType type; char *path; path = g_strdup_printf (PANEL_OBJECT_PATH "%s/", id); settings = g_settings_new_with_path (PANEL_OBJECT_SCHEMA, path); type = g_settings_get_enum (settings, PANEL_OBJECT_ACTION_TYPE_KEY); g_free (path); g_object_unref (settings); panel_action_button_load (type, panel, locked, position, exactpos, id); }
static gboolean panel_object_loader_idle_handler (gpointer dummy) { PanelObjectToLoad *object = NULL; PanelToplevel *toplevel = NULL; PanelWidget *panel_widget; GSList *l; char *iid = NULL; PanelObjectType object_type; char *object_type_detail = NULL; gboolean ret; if (!panel_objects_to_load) { panel_object_loader_have_idle = FALSE; return FALSE; } for (l = panel_objects_to_load; l; l = l->next) { object = l->data; toplevel = panel_toplevel_get_by_id (object->toplevel_id); if (toplevel) break; } if (!l) { /* All the remaining objects don't have a panel */ for (l = panel_objects_to_load; l; l = l->next) free_object_to_load (l->data); g_slist_free (panel_objects_to_load); panel_objects_to_load = NULL; panel_object_loader_have_idle = FALSE; if (panel_objects_loading == NULL) { /* unhide any potential initially hidden toplevel */ panel_object_loader_queue_initial_unhide_toplevels (NULL); } return FALSE; } panel_objects_to_load = g_slist_delete_link (panel_objects_to_load, l); panel_objects_loading = g_slist_append (panel_objects_loading, object); panel_widget = panel_toplevel_get_panel_widget (toplevel); iid = g_settings_get_string (object->settings, PANEL_OBJECT_IID_KEY); ret = panel_object_iid_to_type (iid, &object_type, &object_type_detail); if (!ret) { g_printerr ("Object '%s' has an invalid iid ('%s')\n", object->id, iid); panel_object_loader_stop_loading (object->id); g_free (iid); return TRUE; } g_free (iid); switch (object_type) { case PANEL_OBJECT_APPLET: panel_applet_frame_load (panel_widget, object->id, object->settings); break; case PANEL_OBJECT_MENU: panel_menu_button_load (panel_widget, object->id, object->settings); break; case PANEL_OBJECT_LAUNCHER: launcher_load (panel_widget, object->id, object->settings); break; case PANEL_OBJECT_ACTION: panel_action_button_load (panel_widget, object->id, object->settings, object_type_detail); break; case PANEL_OBJECT_MENU_BAR: panel_menu_bar_load (panel_widget, object->id, object->settings); break; case PANEL_OBJECT_SEPARATOR: panel_separator_load (panel_widget, object->id, object->settings); break; case PANEL_OBJECT_USER_MENU: panel_user_menu_load (panel_widget, object->id, object->settings); break; default: g_assert_not_reached (); break; } /* We load applets asynchronously, so we specifically don't call * panel_object_loader_stop_loading() for this type. */ if (object_type != PANEL_OBJECT_APPLET) panel_object_loader_stop_loading (object->id); return TRUE; }