void panel_applet_add_callback (AppletInfo *info, const char *callback_name, const char *stock_item, const char *menuitem_text, CallbackEnabledFunc is_enabled_func) { AppletUserMenu *menu; g_return_if_fail (info != NULL); g_return_if_fail (panel_applet_get_callback (info->user_menu, callback_name) == NULL); menu = g_new0 (AppletUserMenu, 1); menu->name = g_strdup (callback_name); menu->stock_item = g_strdup (stock_item); menu->text = g_strdup (menuitem_text); menu->is_enabled_func = is_enabled_func; menu->sensitive = TRUE; menu->info = info; menu->menuitem = NULL; menu->submenu = NULL; info->user_menu = g_list_append (info->user_menu, menu); panel_applet_recreate_menu (info); }
void launcher_load (PanelWidget *panel_widget, const char *id, GSettings *settings) { GSettings *settings_instance; Launcher *launcher; char *launcher_location; g_return_if_fail (panel_widget != NULL); g_return_if_fail (id != NULL); settings_instance = panel_layout_get_instance_settings (settings, PANEL_LAUNCHER_SCHEMA); launcher_location = g_settings_get_string (settings_instance, PANEL_LOCATION_KEY); if (PANEL_GLIB_STR_EMPTY (launcher_location)) { g_printerr (_("Launcher location is not set, cannot load launcher\n")); g_free (launcher_location); g_object_unref (settings_instance); return; } launcher = load_launcher_applet (launcher_location, panel_widget, id, settings); if (launcher) { if (!g_settings_is_writable (settings_instance, PANEL_LOCATION_KEY)) { AppletUserMenu *menu; menu = panel_applet_get_callback (launcher->info->user_menu, "properties"); if (menu != NULL) menu->sensitive = FALSE; } } g_free (launcher_location); g_object_unref (settings_instance); }
static void add_to_submenus (AppletInfo *info, const char *path, const char *name, AppletUserMenu *menu, GtkWidget *submenu, GList *user_menu) { char *n = g_strdup (name); char *p = strchr (n, '/'); char *t; AppletUserMenu *s_menu; /*this is the last one*/ if (p == NULL) { g_free (n); setup_an_item (menu, submenu, FALSE); return; } /*this is the last one and we are a submenu, we have already been set up*/ if(p==(n + strlen(n) - 1)) { g_free(n); return; } *p = '\0'; p++; t = g_strconcat (path, n, "/", NULL); s_menu = panel_applet_get_callback (user_menu, t); /*the user did not give us this sub menu, whoops, will create an empty one then*/ if (s_menu == NULL) { s_menu = g_new0 (AppletUserMenu,1); s_menu->name = g_strdup (t); s_menu->stock_item = NULL; s_menu->text = g_strdup (_("???")); s_menu->sensitive = TRUE; s_menu->info = info; s_menu->menuitem = NULL; s_menu->submenu = NULL; info->user_menu = g_list_append (info->user_menu,s_menu); user_menu = info->user_menu; } if (s_menu->submenu == NULL) { s_menu->submenu = gtk_menu_new (); /*a more elegant way to do this should be done when I don't want to go to sleep */ if (s_menu->menuitem != NULL) { gtk_widget_destroy (s_menu->menuitem); s_menu->menuitem = NULL; } } if (s_menu->menuitem == NULL) setup_an_item (s_menu, submenu, TRUE); add_to_submenus (info, t, p, menu, s_menu->submenu, user_menu); g_free(t); g_free(n); }