static GList * xde_directory(MenuContext *ctx, GMenuTreeDirectory *dir) { GList *text = NULL; const char *name, *path; char *esc1, *esc2; GIcon *gicon = NULL; char *icon = NULL; name = gmenu_tree_directory_get_name(dir); esc1 = xde_character_escape(name, ')'); esc2 = xde_character_escape(name, '}'); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_directory_get_desktop_file_path(dir))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_entry_icon(ctx, file, gicon, "folder", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "folder", "unknown"); icon = ctx->wmm.wrap(ctx, icon); text = g_list_append(text, g_strdup_printf("%s%s (%s) {%s Menu}%s\n", ctx->indent, "[submenu]", esc1, esc2, icon)); text = g_list_concat(text, ctx->wmm.ops.menu(ctx, dir)); text = g_list_append(text, g_strdup_printf("%s[end]\n", ctx->indent)); free(icon); free(esc1); free(esc2); return (text); }
static GtkWidget * create_submenu_entry (GtkWidget *menu, GMenuTreeDirectory *directory) { GtkWidget *menuitem; gboolean force_categories_icon; force_categories_icon = g_object_get_data (G_OBJECT (menu), "panel-menu-force-icon-for-categories") != NULL; if (force_categories_icon) menuitem = panel_image_menu_item_new2 (); else menuitem = panel_image_menu_item_new (); panel_load_menu_image_deferred (menuitem, panel_menu_icon_get_size (), gmenu_tree_directory_get_icon (directory), NULL, PANEL_ICON_FOLDER); setup_menuitem (menuitem, panel_menu_icon_get_size (), NULL, gmenu_tree_directory_get_name (directory)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_show (menuitem); return menuitem; }
static GList * xde_wmmenu(MenuContext *ctx) { GList *text = NULL; GList *xsessions, *xsession; char *icon, *s; icon = ctx->wmm.wrap(ctx, xde_get_icon(ctx, "gtk-quit")); s = g_strdup_printf("%s[ %stext = \"%s\" menu = [\n", ctx->indent, icon, "Window Managers"); text = g_list_append(text, s); free(icon); xde_increase_indent(ctx); s = g_strdup_printf("%slabel = \"%s\"\n", ctx->indent, "Window Managers"); text = g_list_append(text, s); icon = ctx->wmm.wrap(ctx, xde_get_icon(ctx, "gtk-refresh")); s = g_strdup_printf("%s[ %stext = \"%s\" restart = true ]\n", ctx->indent, icon, "Restart"); text = g_list_append(text, s); free(icon); xsessions = xde_get_xsessions(ctx); for (xsession = xsessions; xsession; xsession = xsession->next) { XdeXsession *xsess = xsession->data; char *esc1, *esc2, *cmd; GIcon *gicon = NULL; if (strncasecmp(xsess->key, ctx->name, strlen(ctx->name)) == 0) continue; if (strncasecmp(xsess->key, "uwm", strlen("uwm")) == 0 || strncasecmp(xsess->key, "μWM", strlen("μWM")) == 0) continue; if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); icon = xde_get_entry_icon(ctx, xsess->entry, gicon, "preferences-system-windows", "metacity", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); if (options.launch) cmd = g_strdup_printf("xdg-launch --pointer -X %s", xsess->key); else cmd = xde_get_command(xsess->info, xsess->key, icon); esc1 = xde_character_escape(xsess->name, '"'); esc2 = xde_character_escape(cmd, '"'); icon = ctx->wmm.wrap(ctx, icon); s = g_strdup_printf("%s[ %stext = \"%s\" exit = \"%s\" ]\n", ctx->indent, icon, esc1, esc2); text = g_list_append(text, s); free(esc2); free(esc1); free(icon); free(cmd); } s = g_strdup_printf("%s] ; menu Window Managers\n", ctx->indent); text = g_list_append(text, s); xde_decrease_indent(ctx); s = g_strdup_printf("%s]\n", ctx->indent); text = g_list_append(text, s); return (text); }
static GList * xde_entry(MenuContext *ctx, GMenuTreeEntry *ent) { GDesktopAppInfo *info; GList *text = NULL, *acts; const char *name; char *esc1, *esc2, *cmd, *p; char *s, *icon = NULL; GIcon *gicon = NULL; char *appid; if (!(info = gmenu_tree_entry_get_app_info(ent)) || g_desktop_app_info_get_is_hidden(info) || g_desktop_app_info_get_nodisplay(info) || !g_desktop_app_info_get_show_in(info, NULL) || !g_app_info_should_show(G_APP_INFO(info))) return (text); name = g_app_info_get_name(G_APP_INFO(info)); esc1 = xde_character_escape(name, ')'); if ((appid = strdup(gmenu_tree_entry_get_desktop_file_id(ent))) && (p = strstr(appid, ".desktop"))) *p = '\0'; if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); icon = xde_get_app_icon(ctx, info, gicon, "exec", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); if (options.launch) { cmd = g_strdup_printf("xdg-launch --pointer %s", appid); } else { cmd = xde_get_command(info, appid, icon); } esc2 = xde_character_escape(cmd, '}'); icon = ctx->wmm.wrap(ctx, icon); if (options.actions && (acts = ctx->wmm.ops.actions(ctx, ent, info))) { xde_increase_indent(ctx); s = g_strdup_printf("%s[exec] (%s) {%s}%s\n", ctx->indent, esc1, esc2, icon); xde_decrease_indent(ctx); acts = g_list_prepend(acts, s); s = g_strdup_printf("%s[submenu] (%s) {%s}%s\n", ctx->indent, esc1, esc1, icon); acts = g_list_prepend(acts, s); s = g_strdup_printf("%s[end]\n", ctx->indent); acts = g_list_append(acts, s); text = g_list_concat(text, acts); } else { s = g_strdup_printf("%s[exec] (%s) {%s}%s\n", ctx->indent, esc1, esc2, icon); text = g_list_append(text, s); } free(icon); free(appid); free(esc1); free(esc2); free(cmd); return (text); }
static GList * xde_wmmenu(MenuContext *ctx) { GList *text = NULL; GList *xsessions, *xsession; char *icon; char *s; icon = ctx->wmm.wrap(ctx, xde_get_icon(ctx, "gtk-quit")); s = g_strdup_printf("%s<menu id=\"%s\" label=\"%s\"%s>\n", ctx->indent, "Window Managers Menu", "Window Managers", icon); text = g_list_append(text, s); free(icon); xde_increase_indent(ctx); xsessions = xde_get_xsessions(ctx); for (xsession = xsessions; xsession; xsession = xsession->next) { XdeXsession *xsess = xsession->data; char *esc1, *esc2, *cmd; GIcon *gicon = NULL; if (strncasecmp(xsess->key, ctx->name, strlen(ctx->name)) == 0) continue; if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); icon = xde_get_entry_icon(ctx, xsess->entry, gicon, "preferences-system-windows", "metacity", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG); if (options.launch) cmd = g_strdup_printf("xdg-launch --pointer -X %s", xsess->key); else cmd = xde_get_command(xsess->info, xsess->key, icon); icon = ctx->wmm.wrap(ctx, icon); esc1 = g_markup_printf_escaped("%s", xsess->name); esc2 = g_markup_printf_escaped("%s", cmd); s = g_strdup_printf("%s<item label=\"%s\"%s>\n", ctx->indent, esc1, icon); text = g_list_append(text, s); s = g_strdup_printf("%s <action name=\"Restart\">\n", ctx->indent); text = g_list_append(text, s); s = g_strdup_printf("%s <command>%s</command>\n", ctx->indent, esc2); text = g_list_append(text, s); s = g_strdup_printf("%s </action>\n", ctx->indent); text = g_list_append(text, s); s = g_strdup_printf("%s</item>\n", ctx->indent); text = g_list_append(text, s); g_free(esc2); g_free(esc1); g_free(icon); g_free(cmd); } xde_decrease_indent(ctx); s = g_strdup_printf("%s</menu>\n\n", ctx->indent); text = g_list_append(text, s); xde_free_xsessions(xsessions); return (text); }
static GList * xde_wmmenu(MenuContext *ctx) { GList *text = NULL; GList *xsessions, *xsession; char *icon; char *s; icon = ctx->wmm.wrap(ctx, xde_get_icon(ctx, "gtk-quit")); s = g_strdup_printf("%s[submenu] (Window Managers) {Window Managers}%s\n", ctx->indent, icon); text = g_list_append(text, s); free(icon); xde_increase_indent(ctx); icon = ctx->wmm.wrap(ctx, xde_get_icon(ctx, "gtk-refresh")); s = g_strdup_printf("%s[restart] (Restart)%s\n", ctx->indent, icon); text = g_list_append(text, s); free(icon); xsessions = xde_get_xsessions(ctx); for (xsession = xsessions; xsession; xsession = xsession->next) { XdeXsession *xsess = xsession->data; char *esc1, *esc2, *cmd; GIcon *gicon = NULL; if (strncasecmp(xsess->key, ctx->name, strlen(ctx->name)) == 0) continue; if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); icon = xde_get_entry_icon(ctx, xsess->entry, gicon, "preferences-system-windows", "metacity", GET_ENTRY_ICON_FLAG_XPM|GET_ENTRY_ICON_FLAG_PNG); if (options.launch) cmd = g_strdup_printf("xdg-launch --pointer -X %s", xsess->key); else cmd = xde_get_command(xsess->info, xsess->key, icon); esc1 = xde_character_escape(xsess->name, ')'); esc2 = xde_character_escape(cmd, '}'); icon = ctx->wmm.wrap(ctx, icon); s = g_strdup_printf("%s[restart] (Start %s) {%s}%s\n", ctx->indent, esc1, esc2, icon); text = g_list_append(text, s); free(icon); free(esc2); free(esc1); free(cmd); } xde_decrease_indent(ctx); s = g_strdup_printf("%s[end]\n", ctx->indent); text = g_list_append(text, s); xde_free_xsessions(xsessions); return (text); }
static void write_dir( FILE* of, GMenuTreeDirectory* dir ) { GSList* l; const char* cstr; char* str; fprintf( of, "+%s\n", gmenu_tree_directory_get_menu_id( dir ) ); fprintf( of, "%s\n", gmenu_tree_directory_get_name( dir ) ); cstr = gmenu_tree_directory_get_comment( dir ); fprintf( of, "%s\n", cstr ? cstr : "" ); cstr = gmenu_tree_directory_get_icon( dir ); fprintf( of, "%s\n", cstr ? cstr : "" ); if( gmenu_tree_directory_get_desktop_file_path( dir ) ) { /* get basename of its desktop file. */ str = g_path_get_basename( gmenu_tree_directory_get_desktop_file_path( dir ) ); fprintf( of, "%s\n", str ); g_free( str ); /* get the location of its desktop file. */ str = g_path_get_dirname( gmenu_tree_directory_get_desktop_file_path( dir ) ); fprintf( of, "%d\n", dirname_index( str ) ); g_free( str ); } else { fprintf( of, "\n-1\n" ); } // fprintf( of, "\n" ); /* end of item info */ for( l = gmenu_tree_directory_get_contents(dir); l; l = l->next ) { GMenuTreeItem* item = (GMenuTreeItem*)l->data; GMenuTreeItemType type = gmenu_tree_item_get_type(item); if( type == GMENU_TREE_ITEM_DIRECTORY ) { write_dir( of, (GMenuTreeDirectory*)item ); } else if( type == GMENU_TREE_ITEM_ENTRY ) { write_entry( of, (GMenuTreeEntry*)item ); } else if( type == GMENU_TREE_ITEM_SEPARATOR ) fputs( "-\n", of ); } fputs( "\n", of ); }
static char * panel_menu_button_get_icon (PanelMenuButton *button) { GMenuTreeDirectory *directory; char *retval; retval = NULL; if (button->priv->use_custom_icon && button->priv->custom_icon) retval = g_strdup (button->priv->custom_icon); if (!retval && button->priv->use_menu_path && button->priv->menu_path && panel_menu_button_create_menu (button)) { directory = g_object_get_data (G_OBJECT (button->priv->menu), "panel-menu-tree-directory"); if (!directory) { GMenuTree *tree; if ((tree = g_object_get_data (G_OBJECT (button->priv->menu), "panel-menu-tree"))) { directory = gmenu_tree_get_directory_from_path (tree, button->priv->menu_path); g_object_set_data_full (G_OBJECT (button->priv->menu), "panel-menu-tree-directory", directory, (GDestroyNotify) gmenu_tree_item_unref); } } if (directory) retval = g_strdup (gmenu_tree_directory_get_icon (directory)); } if (!retval) { const char *logo; logo = panel_get_distributor_logo (); if (logo != NULL) retval = g_strdup (logo); else retval = g_strdup (PANEL_MAIN_MENU_ICON); } return retval; }
static GList * xde_directory(MenuContext *ctx, GMenuTreeDirectory *dir) { GList *text = NULL; const char *name, *path; char *icon = NULL, *s; GIcon *gicon = NULL; char *esc; int level; name = gmenu_tree_directory_get_name(dir); esc = g_markup_escape_text(name, -1); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_directory_get_desktop_file_path(dir))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_entry_icon(ctx, file, gicon, "folder", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "folder", "unknown"); icon = ctx->wmm.wrap(ctx, icon); level = xde_reset_indent(ctx, 0); s = g_strdup_printf("%s<menu id=\"%s Menu\" label=\"%s\"%s>\n", ctx->indent, esc, esc, icon); text = g_list_append(text, s); text = g_list_concat(text, ctx->wmm.ops.menu(ctx, dir)); s = g_strdup_printf("%s</menu> <!-- %s Menu -->\n\n", ctx->indent, esc); text = g_list_append(text, s); level = xde_reset_indent(ctx, level); ctx->wmm.output = g_list_concat(ctx->wmm.output, text); s = g_strdup_printf("%s<menu id=\"%s Menu\" label=\"%s\"%s />\n", ctx->indent, esc, esc, icon); text = g_list_append(NULL, s); free(icon); g_free(esc); return (text); }
static GList * xde_entry(MenuContext *ctx, GMenuTreeEntry *ent) { GDesktopAppInfo *info; GList *text = NULL; const char *name; char *esc1, *qname, *esc2, *cmd, *p; char *s, *icon = NULL; GIcon *gicon = NULL; char *appid; if (!(info = gmenu_tree_entry_get_app_info(ent)) || g_desktop_app_info_get_is_hidden(info) || g_desktop_app_info_get_nodisplay(info) || !g_desktop_app_info_get_show_in(info, NULL) || !g_app_info_should_show(G_APP_INFO(info))) return (text); name = g_app_info_get_name(G_APP_INFO(info)); esc1 = xde_character_escape(name, '"'); qname = g_strdup_printf("\"%s\"", esc1); if ((appid = strdup(gmenu_tree_entry_get_desktop_file_id(ent))) && (p = strstr(appid, ".desktop"))) *p = '\0'; if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); icon = xde_get_app_icon(ctx, info, gicon, "exec", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); if (options.launch) { cmd = g_strdup_printf("xdg-launch --pointer %s", appid); } else { cmd = xde_get_command(info, appid, icon); } esc2 = xde_character_escape(cmd, '"'); s = g_strdup_printf(" %-32s f.exec \"exec %s &\"\n", qname, esc2); text = g_list_append(text, s); free(icon); free(appid); g_free(qname); free(esc1); free(esc2); free(cmd); return (text); }
static GList * xde_action(MenuContext *ctx, GMenuTreeEntry *ent, GDesktopAppInfo *info, const char *action) { GList *text = NULL; const char *name, *path; char *esc1, *esc2, *cmd, *p; char *s, *icon = NULL; GIcon *gicon = NULL; char *appid; name = g_desktop_app_info_get_action_name(info, action); esc1 = xde_character_escape(name, ')'); if ((appid = strdup(gmenu_tree_entry_get_desktop_file_id(ent))) && (p = strstr(appid, ".desktop"))) *p = '\0'; if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_entry_get_desktop_file_path(ent))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_action_icon(ctx, file, action, gicon, "exec", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "exec", "unknown"); gicon = g_app_info_get_icon(G_APP_INFO(info)); if (options.launch) cmd = g_strdup_printf("xdg-launch --pointer --action='%s' %s", action, appid); else cmd = xde_get_action(info, appid, icon, action); esc2 = xde_character_escape(cmd, '}'); icon = ctx->wmm.wrap(ctx, icon); s = g_strdup_printf("%s[exec] (%s) {%s}%s\n", ctx->indent, esc1, esc2, icon); text = g_list_append(text, s); free(icon); free(appid); free(esc1); free(esc2); free(cmd); return (text); }
/*! \fn gboolean CDesktopAppChooser::m_AddAppsMenuTopLevelNode(GMenuTreeDirectory *appsDir) \brief To create top-level(Directory) nodes. \param[in] appsDir. \return TRUE or FALSE */ gboolean CDesktopAppChooser::m_AddAppsMenuTopLevelNode(GMenuTreeDirectory *appsDir) { GdkPixbuf *pixbuf = NULL; /* To get PixelBuffer of the Directory icon. */ pixbuf = m_LoadIcon(gmenu_tree_directory_get_icon(appsDir), IMG_SIZE, TRUE ); /* To set the columns' content. */ gtk_tree_store_append(m_TreeStore, &m_TopLevelNodeIter, NULL); gtk_tree_store_set(m_TreeStore, &m_TopLevelNodeIter, COLUMN_ICON, pixbuf, COLUMN_TEXT, gmenu_tree_directory_get_name(appsDir), COLUMN_NODEDATA, NULL, -1); /* pixbuf has a referece count of "1" now, as the tree store has added its own reference. So to decrease the reference count of pixbuf. */ g_object_unref(pixbuf); return true; }
static GList * xde_header(MenuContext *ctx, GMenuTreeHeader *hdr) { GMenuTreeDirectory *dir; GList *text = NULL; const char *name, *path; GIcon *gicon = NULL; char *icon = NULL, *s; char *esc; if (!(dir = gmenu_tree_header_get_directory(hdr))) return (text); name = gmenu_tree_directory_get_name(dir); esc = g_markup_escape_text(name, -1); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_directory_get_desktop_file_path(dir))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_entry_icon(ctx, file, gicon, "folder", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "folder", "unknown"); icon = ctx->wmm.wrap(ctx, icon); s = g_strdup_printf("%s<separator label=\"%s\"%s />\n", ctx->indent, esc, icon); text = g_list_append(text, s); free(icon); g_free(esc); text = g_list_concat(text, ctx->wmm.ops.directory(ctx, dir)); return (text); }
static GList * xde_entry(MenuContext *ctx, GMenuTreeEntry *ent) { GDesktopAppInfo *info; GList *text = NULL; const char *name; char *esc1, *esc2, *cmd, *p; char *icon = NULL, *wrap, *s; GIcon *gicon = NULL; gboolean notify; char *wmclass, *appid; if (!(info = gmenu_tree_entry_get_app_info(ent)) || g_desktop_app_info_get_is_hidden(info) || g_desktop_app_info_get_nodisplay(info) || !g_desktop_app_info_get_show_in(info, NULL) || !g_app_info_should_show(G_APP_INFO(info))) return (text); name = g_app_info_get_name(G_APP_INFO(info)); esc1 = g_markup_escape_text(name, -1); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); icon = xde_get_app_icon(ctx, info, gicon, "exec", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); wrap = ctx->wmm.wrap(ctx, strdup(icon)); notify = g_desktop_app_info_get_boolean(info, G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY); wmclass = g_desktop_app_info_get_string(info, G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS); if ((appid = strdup(gmenu_tree_entry_get_desktop_file_id(ent))) && (p = strstr(appid, ".desktop"))) *p = '\0'; if (options.launch) { cmd = g_strdup_printf("xdg-launch --pointer %s", appid); } else { cmd = xde_get_command(info, appid, icon); } esc2 = g_markup_escape_text(cmd, -1); s = g_strdup_printf("%s<item label=\"%s\"%s>\n", ctx->indent, esc1, wrap); text = g_list_append(text, s); s = g_strdup_printf("%s <action name=\"Execute\">\n", ctx->indent); text = g_list_append(text, s); s = g_strdup_printf("%s <command>%s</command>\n", ctx->indent, esc2); text = g_list_append(text, s); if (!options.launch && (notify || wmclass)) { /* don't put launch specifics if we are launching with xdg-launch */ s = g_strdup_printf("%s <startupnotify>\n", ctx->indent); text = g_list_append(text, s); if (notify) { s = g_strdup_printf("%s <enabled>yes</enabled>\n", ctx->indent); text = g_list_append(text, s); } if (wmclass) { s = g_strdup_printf("%s <wmclass>%s</wmclass>\n", ctx->indent, wmclass); text = g_list_append(text, s); } s = g_strdup_printf("%s <name>%s</name>\n", ctx->indent, esc1); text = g_list_append(text, s); if (icon) { s = g_strdup_printf("%s <icon>%s</icon>\n", ctx->indent, icon); text = g_list_append(text, s); } s = g_strdup_printf("%s </startupnotify>\n", ctx->indent); text = g_list_append(text, s); } s = g_strdup_printf("%s </action>\n", ctx->indent); text = g_list_append(text, s); s = g_strdup_printf("%s</item>\n", ctx->indent); text = g_list_append(text, s); free(wrap); free(icon); g_free(wmclass); free(appid); g_free(esc1); g_free(esc2); free(cmd); return (text); }
static void create_menuitem (GtkWidget *menu, GMenuTreeEntry *entry, GMenuTreeDirectory *alias_directory) { GtkWidget *menuitem; menuitem = panel_image_menu_item_new2 (); if (alias_directory) panel_load_menu_image_deferred (menuitem, panel_menu_icon_get_size (), gmenu_tree_directory_get_icon (alias_directory), NULL, NULL); else panel_load_menu_image_deferred (menuitem, panel_menu_icon_get_size (), g_app_info_get_icon (G_APP_INFO (gmenu_tree_entry_get_app_info (entry))), NULL, NULL); setup_menuitem (menuitem, panel_menu_icon_get_size (), NULL, alias_directory ? gmenu_tree_directory_get_name (alias_directory) : g_app_info_get_display_name (G_APP_INFO (gmenu_tree_entry_get_app_info (entry)))); if (alias_directory && gmenu_tree_directory_get_comment (alias_directory)) panel_util_set_tooltip_text (menuitem, gmenu_tree_directory_get_comment (alias_directory)); else if (!alias_directory) { const char *description = g_app_info_get_description (G_APP_INFO (gmenu_tree_entry_get_app_info (entry))); if (!description) description = g_desktop_app_info_get_generic_name (gmenu_tree_entry_get_app_info (entry)); if (description) panel_util_set_tooltip_text (menuitem, description); } g_signal_connect_after (menuitem, "button_press_event", G_CALLBACK (menu_dummy_button_press_event), NULL); if (!panel_lockdown_get_panels_locked_down_s ()) { GIcon *icon; static GtkTargetEntry menu_item_targets[] = { { "text/uri-list", 0, 0 } }; gtk_drag_source_set (menuitem, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, menu_item_targets, 1, GDK_ACTION_COPY); icon = g_app_info_get_icon (G_APP_INFO (gmenu_tree_entry_get_app_info (entry))); if (icon != NULL) gtk_drag_source_set_icon_gicon (menuitem, icon); g_signal_connect (G_OBJECT (menuitem), "drag_begin", G_CALLBACK (drag_begin_menu_cb), NULL); g_signal_connect (menuitem, "drag_data_get", G_CALLBACK (drag_data_get_menu_cb), entry); g_signal_connect (menuitem, "drag_end", G_CALLBACK (drag_end_menu_cb), NULL); } gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (activate_app_def), entry); gtk_widget_show (menuitem); }
static void fill_er_up(GMenuTreeDirectory *directory, GSList**p) { GSList* data = *p; GSList *items; GSList *tmp; const char *path; char *freeme; freeme = make_path(directory); if (!strcmp(freeme, "/")) path = freeme; else path = freeme + 1; items = gmenu_tree_directory_get_contents(directory); tmp = items; while (tmp != NULL) { GMenuTreeItem *item = tmp->data; switch (gmenu_tree_item_get_type(item)) { case GMENU_TREE_ITEM_ENTRY: // print_entry (GMENU_TREE_ENTRY (item), path); add_entry(GMENU_TREE_ENTRY(item), path, &data); break; case GMENU_TREE_ITEM_DIRECTORY: { Menu_list_item * dir_item; dir_item = g_malloc(sizeof(Menu_list_item)); dir_item->item_type = MENU_ITEM_DIRECTORY; dir_item->name = gmenu_tree_directory_get_name(item); dir_item->desktop = gmenu_tree_directory_get_desktop_file_path(item); dir_item->comment = NULL; dir_item->null = NULL; dir_item->comment = gmenu_tree_directory_get_comment(item); dir_item->icon = gmenu_tree_directory_get_icon(item); dir_item->sublist = NULL; data = g_slist_append(data, dir_item); fill_er_up(GMENU_TREE_DIRECTORY(item), &dir_item->sublist); dir_item->sublist = g_slist_prepend(dir_item->sublist, get_blank()); dir_item->sublist = g_slist_append(dir_item->sublist, get_blank()); } break; case GMENU_TREE_ITEM_HEADER: // printf("GMENU_TREE_ITEM_HEADER\n"); break; case GMENU_TREE_ITEM_SEPARATOR: // printf("GMENU_TREE_ITEM_HEADER\n"); break; case GMENU_TREE_ITEM_ALIAS: // printf("GMENU_TREE_ITEM_ALIAS\n"); /* { GMenuTreeItem *aliased_item; aliased_item = gmenu_tree_alias_get_item (GMENU_TREE_ALIAS (item)); if (gmenu_tree_item_get_type (aliased_item) == GMENU_TREE_ITEM_ENTRY) print_entry (GMENU_TREE_ENTRY (aliased_item), path); }*/ break; default: g_assert_not_reached(); break; } gmenu_tree_item_unref(tmp->data); tmp = tmp->next; } g_slist_free(items); g_free(freeme); *p = data; }
/* * This function inherit from gnome-menus/util/test-menu-spec.c */ static void traverse_directory(GMenuTreeDirectory *dir, GtkWidget *parent) { GMenuTreeIter *iter = NULL; GtkWidget *dir_submenu = parent ? gtk_menu_new() : NULL; GtkWidget *entry_submenu = gtk_menu_new(); GIcon *icon = NULL; const char *text = NULL; GtkWidget *menuitem = NULL; iter = gmenu_tree_directory_iter(dir); while (TRUE) { gpointer item = NULL; switch (gmenu_tree_iter_next(iter)) { case GMENU_TREE_ITEM_INVALID: goto done; case GMENU_TREE_ITEM_ENTRY: item = gmenu_tree_iter_get_entry(iter); GDesktopAppInfo *appinfo = gmenu_tree_entry_get_app_info((GMenuTreeEntry *)item); icon = g_app_info_get_icon((GAppInfo *)appinfo); text = g_app_info_get_display_name((GAppInfo *)appinfo); menuitem = menu_item_new_with_icon_text(icon, text); gtk_menu_shell_append(GTK_MENU_SHELL(entry_submenu), menuitem); g_object_connect(G_OBJECT(menuitem), "signal::activate", G_CALLBACK(menu_item_activate), appinfo, NULL); break; case GMENU_TREE_ITEM_DIRECTORY: item = gmenu_tree_iter_get_directory(iter); icon = gmenu_tree_directory_get_icon((GMenuTreeDirectory *)item); text = gmenu_tree_directory_get_name((GMenuTreeDirectory *)item); menuitem = menu_item_new_with_icon_text(icon, text); gtk_menu_shell_append(dir_submenu ? GTK_MENU_SHELL(dir_submenu) : GTK_MENU_SHELL(popup), menuitem); traverse_directory(item, menuitem); break; } if (item) { gmenu_tree_item_unref(item); item = NULL; } continue; done: break; } if (parent) { if (dir_submenu) gtk_menu_item_set_submenu(GTK_MENU_ITEM(parent), dir_submenu); gtk_menu_item_set_submenu(GTK_MENU_ITEM(parent), entry_submenu); } if (iter) { gmenu_tree_iter_unref(iter); iter = NULL; } }