static gchar * photos_search_match_manager_get_filter (PhotosBaseManager *mngr, gint flags) { PhotosSearchMatchManager *self = PHOTOS_SEARCH_MATCH_MANAGER (mngr); GHashTable *objects; PhotosSearchMatch *search_match; const gchar *blank = "(true)"; gchar *filter = NULL; gchar *ret_val = NULL; gchar **filters = NULL; gchar **terms = NULL; guint i; guint n_terms; if (!(flags & PHOTOS_QUERY_FLAGS_SEARCH)) goto out; terms = photos_search_controller_get_terms (self->priv->srch_cntrlr); n_terms = g_strv_length (terms); if (n_terms == 0) goto out; objects = photos_base_manager_get_objects (PHOTOS_BASE_MANAGER (self)); filters = (gchar **) g_malloc0_n (n_terms + 1, sizeof (gchar *)); for (i = 0; terms[i] != NULL; i++) { GHashTableIter iter; const gchar *id; g_hash_table_iter_init (&iter, objects); while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &search_match)) photos_search_match_set_filter_term (search_match, terms[i]); search_match = PHOTOS_SEARCH_MATCH (photos_base_manager_get_active_object (PHOTOS_BASE_MANAGER (self))); id = photos_filterable_get_id (PHOTOS_FILTERABLE (search_match)); if (g_strcmp0 (id, PHOTOS_SEARCH_MATCH_STOCK_ALL) == 0) filter = photos_base_manager_get_all_filter (PHOTOS_BASE_MANAGER (self)); else filter = photos_filterable_get_filter (PHOTOS_FILTERABLE (search_match)); filters[i] = filter; filter = NULL; } filter = g_strjoinv (" && ", filters); ret_val = g_strconcat ("(", filter, ")", NULL); out: g_free (filter); g_strfreev (filters); g_strfreev (terms); return (ret_val == NULL) ? g_strdup (blank) : ret_val; }
static void photos_base_model_refresh (PhotosBaseModel *self) { PhotosBaseModelPrivate *priv = self->priv; GHashTable *objects; GHashTableIter hash_iter; GMenu *section; GObject *object; const gchar *action_id; const gchar *id; const gchar *title; g_menu_remove_all (priv->model); title = photos_base_manager_get_title (priv->mngr); action_id = photos_base_manager_get_action_id (priv->mngr); section = g_menu_new (); g_menu_append_section (priv->model, title, G_MENU_MODEL (section)); objects = photos_base_manager_get_objects (priv->mngr); g_hash_table_iter_init (&hash_iter, objects); while (g_hash_table_iter_next (&hash_iter, (gpointer *) &id, (gpointer *) &object)) { GMenuItem *menu_item; GVariant *target_value; gchar *name; g_object_get (object, "name", &name, NULL); menu_item = g_menu_item_new (name, NULL); target_value = g_variant_new ("s", id); g_menu_item_set_action_and_target_value (menu_item, action_id, target_value); g_menu_append_item (section, menu_item); g_free (name); } g_object_unref (section); }