[gthumb/ext] [search] allow to search in the catalogs and libraries as well
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] [search] allow to search in the catalogs and libraries as well
- Date: Fri, 18 Dec 2009 20:38:51 +0000 (UTC)
commit fb3471c6d51e95106640e07db6b50c479e485c20
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Dec 18 18:20:39 2009 +0100
[search] allow to search in the catalogs and libraries as well
extensions/catalogs/gth-catalog.c | 16 +++++++--
extensions/search/actions.c | 15 ++-------
extensions/search/data/ui/search-editor.ui | 9 ++---
extensions/search/gth-search-editor-dialog.c | 6 +---
extensions/search/gth-search-editor.c | 35 ++++++++++------------
extensions/search/gth-search-task.c | 41 ++++++++++++++-----------
gthumb/gth-file-source.c | 11 +++++++
gthumb/gth-file-source.h | 4 ++-
gthumb/gth-main.c | 3 ++
9 files changed, 76 insertions(+), 64 deletions(-)
---
diff --git a/extensions/catalogs/gth-catalog.c b/extensions/catalogs/gth-catalog.c
index de4ee4b..b475249 100644
--- a/extensions/catalogs/gth-catalog.c
+++ b/extensions/catalogs/gth-catalog.c
@@ -773,16 +773,24 @@ get_tag_value (const char *buffer,
const char *tag_start,
const char *tag_end)
{
- char *begin_tag;
- char *end_tag;
char *value;
+ char *begin_tag;
value = NULL;
begin_tag = strstr (buffer, tag_start);
if (begin_tag != NULL) {
- begin_tag += strlen (tag_start);
+ char *end_tag;
+ char *xml;
+ DomDocument *doc;
+
end_tag = strstr (begin_tag, tag_end);
- value = g_strndup (begin_tag, end_tag - begin_tag);
+ xml = g_strndup (begin_tag, (end_tag - begin_tag) + strlen (tag_end));
+ doc = dom_document_new ();
+ if (dom_document_load (doc, xml, strlen (xml), NULL))
+ value = g_strdup (dom_element_get_inner_text (DOM_ELEMENT (doc)->first_child));
+
+ g_object_unref (doc);
+ g_free (xml);
}
return value;
diff --git a/extensions/search/actions.c b/extensions/search/actions.c
index 95decc9..90ffb24 100644
--- a/extensions/search/actions.c
+++ b/extensions/search/actions.c
@@ -66,19 +66,11 @@ void
gth_browser_activate_action_edit_find (GtkAction *action,
GthBrowser *browser)
{
- GthSearch *search;
- GthFileSource *file_source;
- GtkWidget *dialog;
+ GthSearch *search;
+ GtkWidget *dialog;
search = gth_search_new ();
- file_source = gth_main_get_file_source (gth_browser_get_location (browser));
- if (GTH_IS_FILE_SOURCE_VFS (file_source)) {
- GFile *folder;
-
- folder = gth_file_source_to_gio_file (file_source, gth_browser_get_location (browser));
- gth_search_set_folder (search, folder);
- g_object_unref (folder);
- }
+ gth_search_set_folder (search, gth_browser_get_location (browser));
gth_search_set_recursive (search, TRUE);
dialog = gth_search_editor_dialog_new (_("Find"), search, GTK_WINDOW (browser));
@@ -92,7 +84,6 @@ gth_browser_activate_action_edit_find (GtkAction *action,
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_window_present (GTK_WINDOW (dialog));
- g_object_unref (file_source);
g_object_unref (search);
}
diff --git a/extensions/search/data/ui/search-editor.ui b/extensions/search/data/ui/search-editor.ui
index fec1c7b..f048936 100644
--- a/extensions/search/data/ui/search-editor.ui
+++ b/extensions/search/data/ui/search-editor.ui
@@ -24,12 +24,11 @@
</packing>
</child>
<child>
- <object class="GtkFileChooserButton" id="start_at_filechooserbutton">
- <property name="width_request">200</property>
+ <object class="GtkHBox" id="location_box">
<property name="visible">True</property>
- <property name="action">select-folder</property>
- <property name="create_folders">False</property>
- <property name="title" translatable="yes"></property>
+ <child>
+ <placeholder/>
+ </child>
</object>
<packing>
<property name="position">1</property>
diff --git a/extensions/search/gth-search-editor-dialog.c b/extensions/search/gth-search-editor-dialog.c
index 0d75c29..b1652e3 100644
--- a/extensions/search/gth-search-editor-dialog.c
+++ b/extensions/search/gth-search-editor-dialog.c
@@ -28,14 +28,10 @@
#include "gth-search-editor-dialog.h"
-#define GET_WIDGET(name) _gtk_builder_get_widget (self->priv->builder, (name))
-
-
static gpointer parent_class = NULL;
struct _GthSearchEditorDialogPrivate {
- GtkBuilder *builder;
GtkWidget *search_editor;
};
@@ -117,7 +113,7 @@ gth_search_editor_dialog_construct (GthSearchEditorDialog *self,
gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), 5);
gtk_container_set_border_width (GTK_CONTAINER (self), 5);
- self->priv->search_editor = gth_search_editor_new (search);
+ self->priv->search_editor = gth_search_editor_new (search);
gtk_container_set_border_width (GTK_CONTAINER (self->priv->search_editor), 5);
gtk_widget_show (self->priv->search_editor);
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), self->priv->search_editor, TRUE, TRUE, 0);
diff --git a/extensions/search/gth-search-editor.c b/extensions/search/gth-search-editor.c
index 4af217e..1987924 100644
--- a/extensions/search/gth-search-editor.c
+++ b/extensions/search/gth-search-editor.c
@@ -35,6 +35,7 @@ static gpointer parent_class = NULL;
struct _GthSearchEditorPrivate {
GtkBuilder *builder;
+ GtkWidget *location_chooser;
GtkWidget *match_type_combobox;
};
@@ -129,6 +130,10 @@ gth_search_editor_construct (GthSearchEditor *self,
gtk_container_set_border_width (GTK_CONTAINER (content), 0);
gtk_box_pack_start (GTK_BOX (self), content, TRUE, TRUE, 0);
+ self->priv->location_chooser = gth_location_chooser_new ();
+ gtk_widget_show (self->priv->location_chooser);
+ gtk_box_pack_start (GTK_BOX (GET_WIDGET ("location_box")), self->priv->location_chooser, TRUE, TRUE, 0);
+
self->priv->match_type_combobox = gtk_combo_box_new_text ();
_gtk_combo_box_append_texts (GTK_COMBO_BOX (self->priv->match_type_combobox),
_("all the following rules"),
@@ -147,7 +152,7 @@ gth_search_editor_construct (GthSearchEditor *self,
GtkWidget *
-gth_search_editor_new (GthSearch *search)
+gth_search_editor_new (GthSearch *search)
{
GthSearchEditor *self;
@@ -216,7 +221,12 @@ _gth_search_editor_add_test (GthSearchEditor *self,
static void
_gth_search_editor_set_new_search (GthSearchEditor *self)
{
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (GET_WIDGET ("start_at_filechooserbutton")), get_home_uri ());
+ GFile *home_location;
+
+ home_location = g_file_new_for_uri (get_home_uri ());
+ gth_location_chooser_set_current (GTH_LOCATION_CHOOSER (self->priv->location_chooser), home_location);
+ g_object_unref (home_location);
+
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("include_subfolders_checkbutton")), TRUE);
_gtk_container_remove_children (GTK_CONTAINER (GET_WIDGET ("tests_box")), NULL, NULL);
}
@@ -237,15 +247,7 @@ gth_search_editor_set_search (GthSearchEditor *self,
return;
}
- if (gth_search_get_folder (search) != NULL) {
- char *uri;
-
- uri = g_file_get_uri (gth_search_get_folder (search));
- if (uri != NULL) {
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (GET_WIDGET ("start_at_filechooserbutton")), uri);
- g_free (uri);
- }
- }
+ gth_location_chooser_set_current (GTH_LOCATION_CHOOSER (self->priv->location_chooser), gth_search_get_folder (search));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("include_subfolders_checkbutton")), gth_search_is_recursive (search));
test = gth_search_get_test (search);
@@ -277,21 +279,16 @@ gth_search_editor_get_search (GthSearchEditor *self,
GError **error)
{
GthSearch *search;
- char *uri;
+ GFile *folder;
GthTest *test;
GList *test_selectors;
GList *scan;
search = gth_search_new ();
- uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (GET_WIDGET ("start_at_filechooserbutton")));
- if (uri != NULL) {
- GFile *folder;
-
- folder = g_file_new_for_uri (uri);
+ folder = gth_location_chooser_get_current (GTH_LOCATION_CHOOSER (self->priv->location_chooser));
+ if (folder != NULL)
gth_search_set_folder (search, folder);
- g_object_unref (folder);
- }
gth_search_set_recursive (search, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("include_subfolders_checkbutton"))));
diff --git a/extensions/search/gth-search-task.c b/extensions/search/gth-search-task.c
index 4e91e57..26cd18a 100644
--- a/extensions/search/gth-search-task.c
+++ b/extensions/search/gth-search-task.c
@@ -30,14 +30,15 @@
struct _GthSearchTaskPrivate
{
- GthBrowser *browser;
- GthSearch *search;
- GthTestChain *test;
- GFile *search_catalog;
- gboolean io_operation;
- GError *error;
- gulong location_ready_id;
- GtkWidget *dialog;
+ GthBrowser *browser;
+ GthSearch *search;
+ GthTestChain *test;
+ GFile *search_catalog;
+ gboolean io_operation;
+ GError *error;
+ gulong location_ready_id;
+ GtkWidget *dialog;
+ GthFileSource *file_source;
};
@@ -60,6 +61,7 @@ gth_task_finalize (GObject *object)
task = GTH_SEARCH_TASK (object);
if (task->priv != NULL) {
+ g_object_unref (task->priv->file_source);
g_object_unref (task->priv->search);
g_object_unref (task->priv->test);
g_object_unref (task->priv->search_catalog);
@@ -146,7 +148,8 @@ save_search_result_copy_done_cb (void *buffer,
static void
-done_func (GError *error,
+done_func (GObject *object,
+ GError *error,
gpointer user_data)
{
GthSearchTask *task = user_data;
@@ -290,15 +293,17 @@ browser_location_ready_cb (GthBrowser *browser,
}
task->priv->io_operation = TRUE;
- g_directory_foreach_child (gth_search_get_folder (task->priv->search),
- gth_search_is_recursive (task->priv->search),
- TRUE,
- eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE) ? GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE : GFILE_STANDARD_ATTRIBUTES_WITH_CONTENT_TYPE,
- gth_task_get_cancellable (GTH_TASK (task)),
- start_dir_func,
- for_each_file_func,
- done_func,
- task);
+
+ task->priv->file_source = gth_main_get_file_source (gth_search_get_folder (task->priv->search));
+ gth_file_source_set_cancellable (task->priv->file_source, gth_task_get_cancellable (GTH_TASK (task)));
+ gth_file_source_for_each_child (task->priv->file_source,
+ gth_search_get_folder (task->priv->search),
+ gth_search_is_recursive (task->priv->search),
+ eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE) ? GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE : GFILE_STANDARD_ATTRIBUTES_WITH_CONTENT_TYPE,
+ start_dir_func,
+ for_each_file_func,
+ done_func,
+ task);
}
diff --git a/gthumb/gth-file-source.c b/gthumb/gth-file-source.c
index 5de7046..12f26e9 100644
--- a/gthumb/gth-file-source.c
+++ b/gthumb/gth-file-source.c
@@ -787,6 +787,17 @@ gth_file_source_set_active (GthFileSource *file_source,
}
+void
+gth_file_source_set_cancellable (GthFileSource *file_source,
+ GCancellable *cancellable)
+{
+ _g_object_unref (file_source->priv->cancellable);
+ file_source->priv->cancellable = NULL;
+ if (cancellable != NULL)
+ file_source->priv->cancellable = g_object_ref (cancellable);
+}
+
+
GList *
gth_file_source_get_entry_points (GthFileSource *file_source)
{
diff --git a/gthumb/gth-file-source.h b/gthumb/gth-file-source.h
index 2f9c39d..06c55a4 100644
--- a/gthumb/gth-file-source.h
+++ b/gthumb/gth-file-source.h
@@ -126,7 +126,9 @@ GType gth_file_source_get_type (void) G_GNUC_CONST;
/*< public >*/
-GList * gth_file_source_get_entry_points (GthFileSource *file_source); /* GthFileData list */
+void gth_file_source_set_cancellable (GthFileSource *file_source,
+ GCancellable *cancellable);
+GList * gth_file_source_get_entry_points (GthFileSource *file_source); /* returns GthFileData list */
GList * gth_file_source_get_current_list (GthFileSource *file_source, /* GFile list */
GFile *file);
GFile * gth_file_source_to_gio_file (GthFileSource *file_source,
diff --git a/gthumb/gth-main.c b/gthumb/gth-main.c
index 269f7b5..53f535e 100644
--- a/gthumb/gth-main.c
+++ b/gthumb/gth-main.c
@@ -319,6 +319,9 @@ gth_main_get_file_source (GFile *file)
char *uri;
GthFileSource *file_source;
+ if (file == NULL)
+ return NULL;
+
uri = g_file_get_uri (file);
file_source = gth_main_get_file_source_for_uri (uri);
g_free (uri);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]