static void photos_share_point_manager_init (PhotosSharePointManager *self) { GApplication *app; PhotosSearchContextState *state; app = g_application_get_default (); state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app)); self->app_info_monitor = g_app_info_monitor_get (); g_signal_connect_object (self->app_info_monitor, "changed", G_CALLBACK (photos_share_point_manager_refresh_share_points), self, G_CONNECT_SWAPPED); self->extension_point = g_io_extension_point_lookup (PHOTOS_SHARE_POINT_EXTENSION_POINT_NAME); self->extension_point_online = g_io_extension_point_lookup (PHOTOS_SHARE_POINT_ONLINE_EXTENSION_POINT_NAME); self->src_mngr = g_object_ref (state->src_mngr); g_signal_connect_object (self->src_mngr, "object-added", G_CALLBACK (photos_share_point_manager_refresh_share_points), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->src_mngr, "object-removed", G_CALLBACK (photos_share_point_manager_refresh_share_points), self, G_CONNECT_SWAPPED); photos_share_point_manager_refresh_share_points (self); }
static void gtk_app_chooser_widget_init (GtkAppChooserWidget *self) { GtkTreeSelection *selection; GtkTreeModel *sort; GtkGesture *gesture; self->priv = gtk_app_chooser_widget_get_instance_private (self); gtk_widget_set_has_surface (GTK_WIDGET (self), FALSE); gtk_widget_init_template (GTK_WIDGET (self)); /* Various parts of the GtkTreeView code need custom code to setup, mostly * because we lack signals to connect to, or properties to set. */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->program_list)); gtk_tree_selection_set_select_function (selection, gtk_app_chooser_selection_func, self, NULL); sort = gtk_tree_view_get_model (GTK_TREE_VIEW (self->priv->program_list)); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort), COLUMN_NAME, GTK_SORT_ASCENDING); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sort), COLUMN_NAME, gtk_app_chooser_sort_func, self, NULL); gtk_tree_view_set_search_column (GTK_TREE_VIEW (self->priv->program_list), COLUMN_NAME); gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (self->priv->program_list), gtk_app_chooser_search_equal_func, NULL, NULL); gtk_tree_view_column_set_cell_data_func (self->priv->column, self->priv->secondary_padding, padding_cell_renderer_func, NULL, NULL); self->priv->monitor = g_app_info_monitor_get (); g_signal_connect (self->priv->monitor, "changed", G_CALLBACK (app_info_changed), self); gesture = gtk_gesture_multi_press_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect (gesture, "pressed", G_CALLBACK (gtk_app_chooser_row_pressed_cb), self); gtk_widget_add_controller (self->priv->program_list, GTK_EVENT_CONTROLLER (gesture)); }
GListModel * egg_app_info_model_new () { EggKeyedListStore *store; GAppInfoMonitor *monitor; store = egg_keyed_list_store_new (G_TYPE_APP_INFO); egg_keyed_list_store_set_sort_func (store, egg_compare_app_infos, NULL); monitor = g_app_info_monitor_get (); g_signal_connect (monitor, "changed", G_CALLBACK (egg_app_info_model_changed), store); egg_app_info_model_changed (monitor, store); g_object_set_data_full (G_OBJECT (store), "egg-app-info-model-monitor", monitor, g_object_unref); return G_LIST_MODEL (store); }
static void shell_app_system_init (ShellAppSystem *self) { ShellAppSystemPrivate *priv; GAppInfoMonitor *monitor; self->priv = priv = shell_app_system_get_instance_private (self); priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL); priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_object_unref); priv->startup_wm_class_to_id = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); monitor = g_app_info_monitor_get (); g_signal_connect (monitor, "changed", G_CALLBACK (installed_changed), self); installed_changed (monitor, self); }
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); }
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; }