In folder select dialog, allow type-search to match any part of folder names, not...
[claws.git] / src / foldersel.c
index 025912db803ca1db62627c2a8e6bbc148fd8e9ad..ab512dcb2f86c2c6dddf0281ad9b1412d81a6665 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2009 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2013 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -178,7 +178,7 @@ FolderItem *foldersel_folder_sel(Folder *cur_folder, FolderSelectionType type,
        gtk_widget_grab_focus(ok_button);
        gtk_widget_grab_focus(treeview);
 
-       gtk_widget_show(window);
+       gtk_window_present(GTK_WINDOW(window));
        gtk_window_set_modal(GTK_WINDOW(window), TRUE);
        manage_window_set_transient(GTK_WINDOW(window));
 
@@ -187,10 +187,8 @@ FolderItem *foldersel_folder_sel(Folder *cur_folder, FolderSelectionType type,
        while (finished == FALSE)
                gtk_main_iteration();
 
-       gtk_widget_hide(window);
-       gtk_window_set_modal(GTK_WINDOW(window), FALSE);
-       gtk_entry_set_text(GTK_ENTRY(entry), "");
-       gtk_tree_store_clear(tree_store);
+       gtk_widget_destroy(window);
+       window = NULL;
 
        if (!cancelled &&
            selected_item && (selected_item->path || root_selectable)) {
@@ -200,6 +198,24 @@ FolderItem *foldersel_folder_sel(Folder *cur_folder, FolderSelectionType type,
                return NULL;
 }
 
+static gboolean foldersel_search_name_func(GtkTreeModel *model, gint column,
+               const gchar *key, GtkTreeIter *iter, gpointer search_data)
+{
+       gchar *store_string;
+       gboolean retval;
+
+       gtk_tree_model_get(model, iter, column, &store_string, -1);
+
+       if (!store_string || !key)
+               return FALSE;
+
+       retval = (strcasestr(store_string, key) == NULL);
+
+       g_free(store_string);
+
+       return retval;
+}
+
 static void foldersel_size_allocate_cb(GtkWidget *widget,
                                         GtkAllocation *allocation)
 {
@@ -261,12 +277,11 @@ static void foldersel_create(void)
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
        gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview),
                                     prefs_common.use_stripes_everywhere);
-#if GTK_CHECK_VERSION(2,10,0)
-       gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(treeview),
-                                                       prefs_common.enable_dotted_lines);
-#endif
+       gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(treeview), FALSE);
        gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview),
                                        FOLDERSEL_FOLDERNAME);
+       gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(treeview),
+                       foldersel_search_name_func, NULL, NULL);
 
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
        gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
@@ -621,7 +636,7 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
 
 static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
-       if (event && event->keyval == GDK_Escape)
+       if (event && event->keyval == GDK_KEY_Escape)
                foldersel_cancel(NULL, NULL);
        return FALSE;
 }