static gboolean panel_addto_filter_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer userdata) { PanelAddtoDialog *dialog; PanelAddtoItemInfo *data; dialog = (PanelAddtoDialog *) userdata; if (!dialog->search_text || !dialog->search_text[0]) return TRUE; gtk_tree_model_get (model, iter, COLUMN_DATA, &data, -1); if (data == NULL) return FALSE; /* This is more a workaround than anything else: show all the root * items in a tree store */ if (GTK_IS_TREE_STORE (model) && gtk_tree_store_iter_depth (GTK_TREE_STORE (model), iter) == 0) return TRUE; return (panel_g_utf8_strstrcase (data->name, dialog->search_text) != NULL || panel_g_utf8_strstrcase (data->description, dialog->search_text) != NULL); }
static gboolean panel_run_dialog_find_command_idle (PanelRunDialog *dialog) { GtkTreeIter iter; GtkTreeModel *model; GtkTreePath *path; char *text; GIcon *found_icon; char *found_name; gboolean fuzzy; model = GTK_TREE_MODEL (dialog->program_list_store); path = gtk_tree_path_new_first (); if (!path || !gtk_tree_model_get_iter (model, &iter, path)) { if (path) gtk_tree_path_free (path); panel_run_dialog_set_icon (dialog, NULL, FALSE); dialog->find_command_idle_id = 0; return FALSE; } text = g_strdup (panel_run_dialog_get_combo_text (dialog)); found_icon = NULL; found_name = NULL; fuzzy = FALSE; do { char *exec = NULL; GIcon *icon = NULL; char *name = NULL; char *comment = NULL; gtk_tree_model_get (model, &iter, COLUMN_EXEC, &exec, COLUMN_GICON, &icon, COLUMN_NAME, &name, COLUMN_COMMENT, &comment, -1); if (!fuzzy && exec && icon && fuzzy_command_match (text, exec, &fuzzy)) { g_clear_object (&found_icon); g_free (found_name); found_icon = g_object_ref (icon); found_name = g_strdup (name); gtk_list_store_set (dialog->program_list_store, &iter, COLUMN_VISIBLE, TRUE, -1); } else if (panel_g_utf8_strstrcase (exec, text) != NULL || panel_g_utf8_strstrcase (name, text) != NULL || panel_g_utf8_strstrcase (comment, text) != NULL) { gtk_list_store_set (dialog->program_list_store, &iter, COLUMN_VISIBLE, TRUE, -1); } else { gtk_list_store_set (dialog->program_list_store, &iter, COLUMN_VISIBLE, FALSE, -1); } g_free (exec); g_object_unref (icon); g_free (name); g_free (comment); } while (gtk_tree_model_iter_next (model, &iter)); if (gtk_tree_model_get_iter (gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->program_list)), &iter, path)) gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (dialog->program_list), path, NULL, FALSE, 0, 0); gtk_tree_path_free (path); panel_run_dialog_set_icon (dialog, found_icon, FALSE); //FIXME update dialog->program_label g_clear_object (&found_icon); g_free (text); g_free (dialog->item_name); dialog->item_name = found_name; dialog->find_command_idle_id = 0; return FALSE; }