GAppInfo * problem_create_app_from_cmdline (const char *cmdline) { GAppInfo *app; GList *apps, *l; GList *shortlist; char *binary; char **cmdargs; binary = problem_get_argv0(cmdline); apps = g_app_info_get_all (); shortlist = NULL; app = NULL; for (l = apps; l != NULL; l = l->next) { GAppInfo *a = l->data; if (!g_app_info_should_show(a)) continue; if (!compare_binaries (binary, g_app_info_get_executable (a))) continue; shortlist = g_list_prepend (shortlist, a); } if (shortlist == NULL) { g_list_free_full (apps, g_object_unref); return NULL; } cmdargs = g_strsplit (cmdline, " ", -1); remove_quotes (cmdargs); for (l = shortlist; l != NULL; l = l->next) { GAppInfo *a = l->data; char **dcmdargs; const char *commandline = g_app_info_get_commandline (a); if (commandline == NULL) continue; dcmdargs = g_strsplit (commandline, " ", -1); remove_quotes (dcmdargs); if (compare_args (cmdargs, dcmdargs)) app = g_object_ref (a); g_strfreev (dcmdargs); if (app != NULL) break; } g_list_free (shortlist); g_list_free_full (apps, g_object_unref); return app; }
PRIVATE JSObjectRef _init_category_table() { JSObjectRef items = json_array_create(); GList* app_infos = g_app_info_get_all(); GList* iter = app_infos; for (gsize i=0, skip=0; iter != NULL; i++, iter = g_list_next(iter)) { GAppInfo* info = iter->data; if (!g_app_info_should_show(info)) { skip++; continue; } record_category_info(G_DESKTOP_APP_INFO(info)); json_array_insert_nobject(items, i - skip, info, g_object_ref, g_object_unref); g_object_unref(info); } g_list_free(app_infos); //the element of GAppInfo should free by JSRunTime not here! return items; }
static void scan_startup_wm_class_to_id (ShellAppSystem *self) { ShellAppSystemPrivate *priv = self->priv; GList *apps, *l; g_hash_table_remove_all (priv->startup_wm_class_to_id); apps = g_app_info_get_all (); for (l = apps; l != NULL; l = l->next) { GAppInfo *info = l->data; const char *startup_wm_class, *id, *old_id; id = g_app_info_get_id (info); startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info)); if (startup_wm_class == NULL) continue; /* In case multiple .desktop files set the same StartupWMClass, prefer * the one where ID and StartupWMClass match */ old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, startup_wm_class); if (old_id == NULL || strcmp (id, startup_wm_class) == 0) g_hash_table_insert (priv->startup_wm_class_to_id, g_strdup (startup_wm_class), g_strdup (id)); } g_list_free_full (apps, g_object_unref); }
static void load_apps_thread (GTask *task, gpointer panel, gpointer task_data, GCancellable *cancellable) { GList *iter, *apps; apps = g_app_info_get_all (); for (iter = apps; iter && !g_cancellable_is_cancelled (cancellable); iter = iter->next) { GDesktopAppInfo *app; app = iter->data; if (g_desktop_app_info_get_boolean (app, "X-GNOME-UsesNotifications")) { process_app_info (panel, task, G_APP_INFO (app)); g_debug ("Processing app '%s'", g_app_info_get_id (G_APP_INFO (app))); } else { g_debug ("Skipped app '%s', doesn't use notifications", g_app_info_get_id (G_APP_INFO (app))); } } g_list_free_full (apps, g_object_unref); }
static VALUE appinfo_get_all(int argc, VALUE *argv, VALUE self) { VALUE content_type; rb_scan_args(argc, argv, "01", &content_type); if (!NIL_P(content_type)) return appinfo_get_all_for_type(self, content_type); return GLIST2ARY_FREE(g_app_info_get_all()); }
static void test_app_monitor (void) { gchar *path; GAppInfoMonitor *monitor; GMainLoop *loop; path = g_build_filename (g_get_user_data_dir (), "applications", NULL); g_mkdir (path, 0755); /* FIXME: this shouldn't be required */ g_list_free_full (g_app_info_get_all (), g_object_unref); monitor = g_app_info_monitor_get (); loop = g_main_loop_new (NULL, FALSE); g_signal_connect (monitor, "changed", G_CALLBACK (changed_cb), loop); g_idle_add (create_app, path); g_timeout_add_seconds (3, quit_loop, loop); g_main_loop_run (loop); g_assert (changed_fired); changed_fired = FALSE; /* FIXME: this shouldn't be required */ g_list_free_full (g_app_info_get_all (), g_object_unref); g_timeout_add_seconds (3, quit_loop, loop); g_main_loop_run (loop); g_assert (changed_fired); g_main_loop_unref (loop); g_object_unref (monitor); delete_app (path); g_free (path); }
/** * Create or find already existing application info for specified command * and application name. * @param cmd command to execute * @param appName application name * @param appInfo location where created GAppInfo is stored * @return NS_OK when object is created, NS_ERROR_FAILURE otherwise. */ NS_IMETHODIMP nsGIOService::CreateAppFromCommand(nsACString const& cmd, nsACString const& appName, nsIGIOMimeApp** appInfo) { GError *error = NULL; *appInfo = nsnull; GAppInfo *app_info = NULL, *app_info_from_list = NULL; GList *apps = g_app_info_get_all(); GList *apps_p = apps; // Try to find relevant and existing GAppInfo in all installed application // We do this by comparing each GAppInfo's executable with out own while (apps_p) { app_info_from_list = (GAppInfo*) apps_p->data; if (!app_info) { // If the executable is not absolute, get it's full path char *executable = g_find_program_in_path(g_app_info_get_executable(app_info_from_list)); if (executable && strcmp(executable, PromiseFlatCString(cmd).get()) == 0) { g_object_ref (app_info_from_list); app_info = app_info_from_list; } g_free(executable); } g_object_unref(app_info_from_list); apps_p = apps_p->next; } g_list_free(apps); if (!app_info) { app_info = g_app_info_create_from_commandline(PromiseFlatCString(cmd).get(), PromiseFlatCString(appName).get(), G_APP_INFO_CREATE_SUPPORTS_URIS, &error); } if (!app_info) { g_warning("Cannot create application info from command: %s", error->message); g_error_free(error); return NS_ERROR_FAILURE; } nsGIOMimeApp *mozApp = new nsGIOMimeApp(app_info); NS_ENSURE_TRUE(mozApp, NS_ERROR_OUT_OF_MEMORY); NS_ADDREF(*appInfo = mozApp); return NS_OK; }
void egg_app_info_model_changed (GAppInfoMonitor *monitor, gpointer user_data) { EggKeyedListStore *store = user_data; GHashTable *old_app_ids; GList *new_apps; GList *it; guint n_items; gint i; GHashTableIter iter; const gchar *id; old_app_ids = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); n_items = g_list_model_get_n_items (G_LIST_MODEL (store)); for (i = 0; i < n_items; i++) { GAppInfo *info; info = g_list_model_get_item (G_LIST_MODEL (store), i); g_hash_table_insert (old_app_ids, (gpointer) g_app_info_get_id (info), info); } new_apps = g_app_info_get_all (); for (it = new_apps; it; it = it->next) { GAppInfo *info = it->data; if (!g_app_info_should_show (info)) continue; id = g_app_info_get_id (info); /* only add the application if we didn't have it before */ if (!g_hash_table_remove (old_app_ids, id)) egg_keyed_list_store_insert (store, id, info); } /* remove app ids that aren't in new_apps */ g_hash_table_iter_init (&iter, old_app_ids); while (g_hash_table_iter_next (&iter, (gpointer) &id, NULL)) egg_keyed_list_store_remove (store, id); g_list_free_full (new_apps, g_object_unref); g_hash_table_destroy (old_app_ids); }
static GAppInfo * get_app_info_for_id (const char *id) { GList *list, *l; GAppInfo *ret_info; list = g_app_info_get_all (); ret_info = NULL; for (l = list; l != NULL; l = l->next) { GAppInfo *info; info = l->data; if (ret_info == NULL && g_strcmp0 (g_app_info_get_id (info), id) == 0) ret_info = info; else g_object_unref (info); } g_list_free (list); return ret_info; }
static int app_list (gchar **args) { GList *apps; if (g_strv_length (args)) return app_no_args ("list"); apps = g_app_info_get_all (); while (apps) { GDesktopAppInfo *info = apps->data; if (G_IS_DESKTOP_APP_INFO (info)) if (g_desktop_app_info_get_boolean (info, "DBusActivatable")) { const gchar *filename; filename = g_app_info_get_id (G_APP_INFO (info)); if (g_str_has_suffix (filename, ".desktop")) { gchar *id; id = g_strndup (filename, strlen (filename) - 8); g_print ("%s\n", id); g_free (id); } } apps = g_list_delete_link (apps, apps); g_object_unref (info); } return 0; }
static void show_dialog(MateDACapplet* capplet, const gchar* start_page) { #define get_widget(name) GTK_WIDGET(gtk_builder_get_object(builder, name)) GtkBuilder* builder; guint builder_result; capplet->builder = builder = gtk_builder_new (); if (g_file_test(MATECC_UI_DIR "/mate-default-applications-properties.ui", G_FILE_TEST_EXISTS) != FALSE) { builder_result = gtk_builder_add_from_file(builder, MATECC_UI_DIR "/mate-default-applications-properties.ui", NULL); } else { builder_result = gtk_builder_add_from_file(builder, "./mate-default-applications-properties.ui", NULL); } if (builder_result == 0) { GtkWidget* dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not load the main interface")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("Please make sure that the applet is properly installed")); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); exit(EXIT_FAILURE); } capplet->window = get_widget("preferred_apps_dialog"); g_signal_connect(capplet->window, "response", G_CALLBACK(close_cb), capplet); capplet->web_combo_box = get_widget("web_browser_combobox"); capplet->mail_combo_box = get_widget("mail_reader_combobox"); capplet->term_combo_box = get_widget("terminal_combobox"); capplet->media_combo_box = get_widget("media_player_combobox"); capplet->video_combo_box = get_widget("video_combobox"); capplet->visual_combo_box = get_widget("visual_combobox"); capplet->mobility_combo_box = get_widget("mobility_combobox"); capplet->text_combo_box = get_widget("text_combobox"); capplet->file_combo_box = get_widget("filemanager_combobox"); capplet->image_combo_box = get_widget("image_combobox"); capplet->document_combo_box = get_widget("document_combobox"); capplet->word_combo_box = get_widget("word_combobox"); capplet->spreadsheet_combo_box = get_widget("spreadsheet_combobox"); capplet->visual_startup_checkbutton = get_widget("visual_start_checkbutton"); capplet->mobility_startup_checkbutton = get_widget("mobility_start_checkbutton"); g_signal_connect(capplet->window, "screen-changed", G_CALLBACK(screen_changed_cb), capplet); screen_changed_cb(capplet->window, gdk_screen_get_default(), capplet); /* Lists of default applications */ capplet->web_browsers = g_app_info_get_all_for_type("x-scheme-handler/http"); capplet->mail_readers = g_app_info_get_all_for_type("x-scheme-handler/mailto"); capplet->media_players = g_app_info_get_all_for_type("audio/x-vorbis+ogg"); capplet->video_players = g_app_info_get_all_for_type("video/x-ogm+ogg"); capplet->text_editors = g_app_info_get_all_for_type("text/plain"); capplet->image_viewers = g_app_info_get_all_for_type("image/png"); capplet->file_managers = g_app_info_get_all_for_type("inode/directory"); capplet->document_viewers = g_app_info_get_all_for_type("application/pdf"); capplet->word_editors = g_app_info_get_all_for_type("application/msword"); capplet->spreadsheet_editors = g_app_info_get_all_for_type("application/vnd.ms-excel"); capplet->visual_ats = NULL; capplet->visual_ats = fill_list_from_desktop_file (capplet->visual_ats, APPLICATIONSDIR "/orca.desktop"); capplet->visual_ats = g_list_reverse (capplet->visual_ats); capplet->mobility_ats = NULL; capplet->mobility_ats = fill_list_from_desktop_file (capplet->mobility_ats, APPLICATIONSDIR "/dasher.desktop"); capplet->mobility_ats = fill_list_from_desktop_file (capplet->mobility_ats, APPLICATIONSDIR "/gok.desktop"); capplet->mobility_ats = fill_list_from_desktop_file (capplet->mobility_ats, APPLICATIONSDIR "/onboard.desktop"); capplet->mobility_ats = g_list_reverse (capplet->mobility_ats); /* Terminal havent mime types, so check in .desktop files for Categories=TerminalEmulator */ GList *entry; GList *all_apps; capplet->terminals = NULL; all_apps = g_app_info_get_all(); for (entry = all_apps; entry != NULL; entry = g_list_next(entry)) { GDesktopAppInfo* item = (GDesktopAppInfo*) entry->data; if (g_desktop_app_info_get_categories (item) != NULL && g_strrstr (g_desktop_app_info_get_categories (item), "TerminalEmulator")) { capplet->terminals = g_list_prepend (capplet->terminals, item); } } capplet->terminals = g_list_reverse (capplet->terminals); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->web_combo_box), capplet->web_browsers, "x-scheme-handler/http"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->mail_combo_box), capplet->mail_readers, "x-scheme-handler/mailto"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->term_combo_box), capplet->terminals, "terminal"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->media_combo_box), capplet->media_players, "audio/x-vorbis+ogg"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->video_combo_box), capplet->video_players, "video/x-ogm+ogg"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->image_combo_box), capplet->image_viewers, "image/png"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->text_combo_box), capplet->text_editors, "text/plain"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->file_combo_box), capplet->file_managers, "inode/directory"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->visual_combo_box), capplet->visual_ats, "visual"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->mobility_combo_box), capplet->mobility_ats, "mobility"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->document_combo_box), capplet->document_viewers, "application/pdf"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->word_combo_box), capplet->word_editors, "application/vnd.oasis.opendocument.text"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->spreadsheet_combo_box), capplet->spreadsheet_editors, "application/vnd.oasis.opendocument.spreadsheet"); g_signal_connect(capplet->web_combo_box, "changed", G_CALLBACK(web_combo_changed_cb), capplet); g_signal_connect(capplet->mail_combo_box, "changed", G_CALLBACK(mail_combo_changed_cb), capplet); g_signal_connect(capplet->term_combo_box, "changed", G_CALLBACK(terminal_combo_changed_cb), capplet); g_signal_connect(capplet->media_combo_box, "changed", G_CALLBACK(media_combo_changed_cb), capplet); g_signal_connect(capplet->video_combo_box, "changed", G_CALLBACK(video_combo_changed_cb), capplet); g_signal_connect(capplet->visual_combo_box, "changed", G_CALLBACK(visual_combo_changed_cb), capplet); g_signal_connect(capplet->mobility_combo_box, "changed", G_CALLBACK(mobility_combo_changed_cb), capplet); g_signal_connect(capplet->image_combo_box, "changed", G_CALLBACK(image_combo_changed_cb), capplet); g_signal_connect(capplet->text_combo_box, "changed", G_CALLBACK(text_combo_changed_cb), capplet); g_signal_connect(capplet->file_combo_box, "changed", G_CALLBACK(file_combo_changed_cb), capplet); g_signal_connect(capplet->document_combo_box, "changed", G_CALLBACK(document_combo_changed_cb), capplet); g_signal_connect(capplet->word_combo_box, "changed", G_CALLBACK(word_combo_changed_cb), capplet); g_signal_connect(capplet->spreadsheet_combo_box, "changed", G_CALLBACK(spreadsheet_combo_changed_cb), capplet); g_settings_bind (capplet->mobility_settings, MOBILITY_STARTUP_KEY, capplet->mobility_startup_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (capplet->visual_settings, VISUAL_STARTUP_KEY, capplet->visual_startup_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); gtk_window_set_icon_name(GTK_WINDOW (capplet->window), "preferences-desktop-default-applications"); if (start_page != NULL) { gchar* page_name; GtkWidget* w; page_name = g_strconcat (start_page, "_vbox", NULL); w = get_widget(page_name); if (w != NULL) { GtkNotebook* nb; gint pindex; nb = GTK_NOTEBOOK(get_widget("preferred_apps_notebook")); pindex = gtk_notebook_page_num(nb, w); if (pindex != -1) { gtk_notebook_set_current_page(nb, pindex); } } g_free(page_name); } gtk_widget_show(capplet->window); #undef get_widget }
static void gtk_app_chooser_widget_real_add_items (GtkAppChooserWidget *self) { GList *all_applications = NULL; GList *recommended_apps = NULL; GList *fallback_apps = NULL; GList *exclude_apps = NULL; GAppInfo *default_app = NULL; gboolean show_headings; gboolean apps_added; show_headings = TRUE; apps_added = FALSE; if (self->priv->show_all) show_headings = FALSE; if (self->priv->show_default && self->priv->content_type) { default_app = g_app_info_get_default_for_type (self->priv->content_type, FALSE); if (default_app != NULL) { gtk_app_chooser_add_default (self, default_app); apps_added = TRUE; exclude_apps = g_list_prepend (exclude_apps, default_app); } } #ifndef G_OS_WIN32 if ((self->priv->content_type && self->priv->show_recommended) || self->priv->show_all) { if (self->priv->content_type) recommended_apps = g_app_info_get_recommended_for_type (self->priv->content_type); apps_added |= gtk_app_chooser_widget_add_section (self, _("Recommended Applications"), show_headings, !self->priv->show_all, /* mark as recommended */ FALSE, /* mark as fallback */ recommended_apps, exclude_apps); exclude_apps = g_list_concat (exclude_apps, g_list_copy (recommended_apps)); } if ((self->priv->content_type && self->priv->show_fallback) || self->priv->show_all) { if (self->priv->content_type) fallback_apps = g_app_info_get_fallback_for_type (self->priv->content_type); apps_added |= gtk_app_chooser_widget_add_section (self, _("Related Applications"), show_headings, FALSE, /* mark as recommended */ !self->priv->show_all, /* mark as fallback */ fallback_apps, exclude_apps); exclude_apps = g_list_concat (exclude_apps, g_list_copy (fallback_apps)); } #endif if (self->priv->show_other || self->priv->show_all) { all_applications = g_app_info_get_all (); apps_added |= gtk_app_chooser_widget_add_section (self, _("Other Applications"), show_headings, FALSE, FALSE, all_applications, exclude_apps); } if (!apps_added) update_no_applications_label (self); gtk_widget_set_visible (self->priv->no_apps, !apps_added); gtk_app_chooser_widget_select_first (self); if (default_app != NULL) g_object_unref (default_app); g_list_free_full (all_applications, g_object_unref); g_list_free_full (recommended_apps, g_object_unref); g_list_free_full (fallback_apps, g_object_unref); g_list_free (exclude_apps); }
int main (int argc, char **argv) { setlocale (LC_ALL, ""); if (argv[1] == NULL) ; else if (g_str_equal (argv[1], "list")) { GList *all, *i; all = g_app_info_get_all (); for (i = all; i; i = i->next) g_print ("%s%s", g_app_info_get_id (i->data), i->next ? " " : "\n"); g_list_free_full (all, g_object_unref); } else if (g_str_equal (argv[1], "search")) { gchar ***results; gint i, j; results = g_desktop_app_info_search (argv[2]); for (i = 0; results[i]; i++) { for (j = 0; results[i][j]; j++) g_print ("%s%s", j ? " " : "", results[i][j]); g_print ("\n"); g_strfreev (results[i]); } g_free (results); } else if (g_str_equal (argv[1], "implementations")) { GList *results; results = g_desktop_app_info_get_implementations (argv[2]); print_app_list (results); } else if (g_str_equal (argv[1], "show-info")) { GAppInfo *info; info = (GAppInfo *) g_desktop_app_info_new (argv[2]); if (info) { print (g_app_info_get_id (info)); print (g_app_info_get_name (info)); print (g_app_info_get_display_name (info)); print (g_app_info_get_description (info)); g_object_unref (info); } } else if (g_str_equal (argv[1], "default-for-type")) { GAppInfo *info; info = g_app_info_get_default_for_type (argv[2], FALSE); if (info) { print (g_app_info_get_id (info)); g_object_unref (info); } } else if (g_str_equal (argv[1], "recommended-for-type")) { GList *list; list = g_app_info_get_recommended_for_type (argv[2]); print_app_list (list); } else if (g_str_equal (argv[1], "all-for-type")) { GList *list; list = g_app_info_get_all_for_type (argv[2]); print_app_list (list); } else if (g_str_equal (argv[1], "fallback-for-type")) { GList *list; list = g_app_info_get_fallback_for_type (argv[2]); print_app_list (list); } else if (g_str_equal (argv[1], "should-show")) { GAppInfo *info; info = (GAppInfo *) g_desktop_app_info_new (argv[2]); if (info) { g_print ("%s\n", g_app_info_should_show (info) ? "true" : "false"); g_object_unref (info); } } else if (g_str_equal (argv[1], "monitor")) { GAppInfoMonitor *monitor; GAppInfo *info; monitor = g_app_info_monitor_get (); info = (GAppInfo *) g_desktop_app_info_new ("this-desktop-file-does-not-exist"); g_assert (!info); g_signal_connect (monitor, "changed", G_CALLBACK (quit), NULL); while (1) g_main_context_iteration (NULL, TRUE); } return 0; }
/** * Create or find already existing application info for specified command * and application name. * @param cmd command to execute * @param appName application name * @param appInfo location where created GAppInfo is stored * @return NS_OK when object is created, NS_ERROR_FAILURE otherwise. */ NS_IMETHODIMP nsGIOService::CreateAppFromCommand(nsACString const& cmd, nsACString const& appName, nsIGIOMimeApp** appInfo) { GError *error = NULL; *appInfo = nsnull; GAppInfo *app_info = NULL, *app_info_from_list = NULL; GList *apps = g_app_info_get_all(); GList *apps_p = apps; get_commandline_t g_app_info_get_commandline_ptr; void *libHandle = dlopen("libgio-2.0.so", RTLD_LAZY); if (!libHandle) { return NS_ERROR_FAILURE; } dlerror(); /* clear any existing error */ g_app_info_get_commandline_ptr = (get_commandline_t) dlsym(libHandle, "g_app_info_get_commandline"); if (dlerror() != NULL) { g_app_info_get_commandline_ptr = NULL; } // Try to find relevant and existing GAppInfo in all installed application while (apps_p) { app_info_from_list = (GAppInfo*) apps_p->data; /* This is a silly test. It just compares app names but not * commands. This is due to old version of Glib/Gio. The required * function which allows to do a regular check of existence of desktop file * is possible by using function g_app_info_get_commandline. This function * has been introduced in Glib 2.20. */ if (app_info_from_list && strcmp(g_app_info_get_name(app_info_from_list), PromiseFlatCString(appName).get()) == 0 ) { if (g_app_info_get_commandline_ptr) { /* Following test is only possible with Glib >= 2.20. * Compare path only by using strncmp */ if (strncmp(g_app_info_get_commandline_ptr(app_info_from_list), PromiseFlatCString(cmd).get(), strlen(PromiseFlatCString(cmd).get())) == 0) { app_info = app_info_from_list; break; } else { g_object_unref(app_info_from_list); } } else { app_info = app_info_from_list; break; } } else { g_object_unref(app_info_from_list); } apps_p = apps_p->next; } g_list_free(apps); if (!app_info) { app_info = g_app_info_create_from_commandline(PromiseFlatCString(cmd).get(), PromiseFlatCString(appName).get(), G_APP_INFO_CREATE_SUPPORTS_URIS, &error); } if (!app_info) { g_warning("Cannot create application info from command: %s", error->message); g_error_free(error); dlclose(libHandle); return NS_ERROR_FAILURE; } nsGIOMimeApp *mozApp = new nsGIOMimeApp(app_info); NS_ENSURE_TRUE(mozApp, NS_ERROR_OUT_OF_MEMORY); NS_ADDREF(*appInfo = mozApp); dlclose(libHandle); return NS_OK; }
int main (int argc, char **argv) { setlocale (LC_ALL, ""); if (argv[1] == NULL) ; else if (g_str_equal (argv[1], "list")) { GList *all, *i; all = g_app_info_get_all (); for (i = all; i; i = i->next) g_print ("%s%s", g_app_info_get_id (i->data), i->next ? " " : "\n"); g_list_free_full (all, g_object_unref); } else if (g_str_equal (argv[1], "search")) { gchar ***results; gint i, j; results = g_desktop_app_info_search (argv[2]); for (i = 0; results[i]; i++) { for (j = 0; results[i][j]; j++) g_print ("%s%s", j ? " " : "", results[i][j]); g_print ("\n"); g_strfreev (results[i]); } g_free (results); } else if (g_str_equal (argv[1], "implementations")) { GList *results; results = g_desktop_app_info_get_implementations (argv[2]); print_app_list (results); } else if (g_str_equal (argv[1], "show-info")) { GAppInfo *info; info = (GAppInfo *) g_desktop_app_info_new (argv[2]); if (info) { print (g_app_info_get_id (info)); print (g_app_info_get_name (info)); print (g_app_info_get_display_name (info)); print (g_app_info_get_description (info)); g_object_unref (info); } } else if (g_str_equal (argv[1], "default-for-type")) { GAppInfo *info; info = g_app_info_get_default_for_type (argv[2], FALSE); if (info) { print (g_app_info_get_id (info)); g_object_unref (info); } } else if (g_str_equal (argv[1], "recommended-for-type")) { GList *list; list = g_app_info_get_recommended_for_type (argv[2]); print_app_list (list); } else if (g_str_equal (argv[1], "all-for-type")) { GList *list; list = g_app_info_get_all_for_type (argv[2]); print_app_list (list); } else if (g_str_equal (argv[1], "fallback-for-type")) { GList *list; list = g_app_info_get_fallback_for_type (argv[2]); print_app_list (list); } else if (g_str_equal (argv[1], "should-show")) { GAppInfo *info; info = (GAppInfo *) g_desktop_app_info_new (argv[2]); if (info) { g_print ("%s\n", g_app_info_should_show (info) ? "true" : "false"); g_object_unref (info); } } return 0; }