Exemplo n.º 1
0
void
panel_launch_desktop_file (const char  *desktop_file,
			   const char  *fallback_exec,
			   GdkScreen   *screen,
			   GError     **error)
{
	GnomeDesktopItem *ditem;

	if (g_path_is_absolute (desktop_file))
		ditem = gnome_desktop_item_new_from_file (desktop_file, 0,
							  error);
	else
		ditem = gnome_desktop_item_new_from_basename (desktop_file, 0,
							      error);

	if (ditem != NULL) {
		panel_ditem_launch (ditem, NULL, screen, error);
		gnome_desktop_item_unref (ditem);
	} else if (fallback_exec != NULL) {
		char *argv [2] = {(char *)fallback_exec, NULL};

		if (*error) {
			g_error_free (*error);
			*error = NULL;
		}

		gdk_spawn_on_screen (screen, NULL, argv, NULL,
				     G_SPAWN_SEARCH_PATH,
				     NULL, NULL, NULL, error);
	}
}
Exemplo n.º 2
0
static GnomeDesktopItem*
find_desktop_item(const char *desktop_name)
{
    GnomeDesktopItem *result;
    GSList *dirs;
    GSList *l;

    result = NULL;
    
    dirs = get_xdg_data_dirs();

    for (l = dirs; l != NULL; l = l->next) {
        const char *dir;
        char *path;
        char *filename;

        dir = l->data;
        filename = g_strconcat(desktop_name, ".desktop", NULL);

        path = g_build_filename(dir, "applications", filename, NULL);
        
        if (g_file_test(path, G_FILE_TEST_EXISTS)) {
            result = gnome_desktop_item_new_from_file(path,
                                                      GNOME_DESKTOP_ITEM_LOAD_ONLY_IF_EXISTS | GNOME_DESKTOP_ITEM_LOAD_NO_TRANSLATIONS, NULL);
        }

        g_free(filename);
        g_free(path);
        
        if (result != NULL)
            goto out;
    }
    
 out:
    g_slist_foreach(dirs, (GFunc) g_free, NULL);
    g_slist_free(dirs);

    return result;
}