コード例 #1
0
ファイル: xde_openboxold.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #2
0
ファイル: menu.c プロジェクト: sunnynarayan/gnome-panel
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;
}
コード例 #3
0
ファイル: xde_uwm.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #4
0
ファイル: xde_openboxold.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #5
0
ファイル: xde_openbox.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #6
0
ファイル: xde_openboxold.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #7
0
ファイル: menu-cache-gen.c プロジェクト: magist3r/menu-cache
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 );
}
コード例 #8
0
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;
}
コード例 #9
0
ファイル: xde_openbox.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #10
0
ファイル: xde_vtwm.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #11
0
ファイル: xde_openboxold.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #12
0
/*! \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;
}
コード例 #13
0
ファイル: xde_openbox.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #14
0
ファイル: xde_openbox.c プロジェクト: bbidulock/xde-menu
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);
}
コード例 #15
0
ファイル: menu.c プロジェクト: sunnynarayan/gnome-panel
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);
}
コード例 #16
0
ファイル: backend-gnome.c プロジェクト: jalovcan/awn-extras
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;
}
コード例 #17
0
ファイル: elsa-launcher.c プロジェクト: AOSC-Dev/elsa-shell
/*
 * 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;
    }
}