[gthumb] show the number of files found during the search
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] show the number of files found during the search
- Date: Wed, 21 Jul 2010 18:34:41 +0000 (UTC)
commit b55fa1be1377b4477f9abfbdce9a048a64cd2220
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Jul 21 19:49:30 2010 +0200
show the number of files found during the search
extensions/search/gth-search-task.c | 69 +++++++++++++-------
gthumb/gedit-message-area.c | 119 ++++++++++++++++++-----------------
gthumb/gedit-message-area.h | 2 +-
gthumb/gth-browser.c | 21 ++++---
gthumb/gth-embedded-dialog.c | 21 +++----
gthumb/gth-embedded-dialog.h | 10 ++--
6 files changed, 133 insertions(+), 109 deletions(-)
---
diff --git a/extensions/search/gth-search-task.c b/extensions/search/gth-search-task.c
index 16f3544..6432c56 100644
--- a/extensions/search/gth-search-task.c
+++ b/extensions/search/gth-search-task.c
@@ -39,6 +39,7 @@ struct _GthSearchTaskPrivate
gulong location_ready_id;
GtkWidget *dialog;
GthFileSource *file_source;
+ gsize n_files;
};
@@ -78,21 +79,14 @@ gth_task_finalize (GObject *object)
typedef struct {
GthBrowser *browser;
GthSearchTask *task;
+ gulong response_id;
} EmbeddedDialogData;
static void
-embedded_dialog_destroy_cb (GeditMessageArea *message_area,
- gpointer user_data)
-{
- g_free ((EmbeddedDialogData *) user_data);
-}
-
-
-static void
-embedded_dialog_response_cb (GeditMessageArea *message_area,
- int response_id,
- gpointer user_data)
+embedded_dialog_response_cb (GthEmbeddedDialog *dialog,
+ int response_id,
+ gpointer user_data)
{
EmbeddedDialogData *data = user_data;
@@ -100,9 +94,13 @@ embedded_dialog_response_cb (GeditMessageArea *message_area,
case GTK_RESPONSE_CANCEL:
gth_task_cancel (GTH_TASK (data->task));
break;
+
default:
break;
}
+
+ g_signal_handler_disconnect (dialog, data->response_id);
+ g_free (data);
}
@@ -136,6 +134,8 @@ done_func (GObject *object,
gsize size;
GFile *search_result_real_file;
+ gth_embedded_dialog_set_secondary_text (GTH_EMBEDDED_DIALOG (task->priv->dialog), NULL);
+
task->priv->error = NULL;
if (error != NULL) {
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
@@ -172,6 +172,18 @@ done_func (GObject *object,
static void
+update_secondary_text (GthSearchTask *task)
+{
+ char *msg;
+
+ msg = g_strdup_printf (_("Files found untill now: %" G_GSIZE_FORMAT), task->priv->n_files);
+ gth_embedded_dialog_set_secondary_text (GTH_EMBEDDED_DIALOG (task->priv->dialog), msg);
+
+ g_free (msg);
+}
+
+
+static void
for_each_file_func (GFile *file,
GFileInfo *info,
gpointer user_data)
@@ -184,8 +196,11 @@ for_each_file_func (GFile *file,
file_data = gth_file_data_new (file, info);
- if (gth_test_match (GTH_TEST (task->priv->test), file_data))
+ if (gth_test_match (GTH_TEST (task->priv->test), file_data)) {
gth_catalog_insert_file (GTH_CATALOG (task->priv->search), file_data->file, -1);
+ task->priv->n_files++;
+ update_secondary_text (task);
+ }
g_object_unref (file_data);
}
@@ -218,6 +233,7 @@ browser_location_ready_cb (GthBrowser *browser,
gboolean error,
GthSearchTask *task)
{
+ GtkWidget *button;
EmbeddedDialogData *dialog_data;
GString *attributes;
const char *test_attributes;
@@ -229,26 +245,29 @@ browser_location_ready_cb (GthBrowser *browser,
return;
}
+ task->priv->n_files = 0;
+
task->priv->dialog = gth_browser_get_list_extra_widget (browser);
- gth_embedded_dialog_set_icon (GTH_EMBEDDED_DIALOG (task->priv->dialog), GTK_STOCK_FIND);
+ gth_embedded_dialog_set_icon (GTH_EMBEDDED_DIALOG (task->priv->dialog), GTK_STOCK_FIND, GTK_ICON_SIZE_DIALOG);
gth_embedded_dialog_set_primary_text (GTH_EMBEDDED_DIALOG (task->priv->dialog), _("Searching..."));
+ update_secondary_text (task);
gedit_message_area_clear_action_area (GEDIT_MESSAGE_AREA (task->priv->dialog));
- gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (task->priv->dialog),
- NULL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
+ button = gtk_button_new ();
+ gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_stock (GTK_STOCK_STOP, GTK_ICON_SIZE_BUTTON));
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text (button, _("Cancel the operation"));
+ gtk_widget_show_all (button);
+ gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (task->priv->dialog),
+ button,
+ GTK_RESPONSE_CANCEL);
dialog_data = g_new0 (EmbeddedDialogData, 1);
dialog_data->browser = task->priv->browser;
dialog_data->task = task;
- g_signal_connect (task->priv->dialog,
- "destroy",
- G_CALLBACK (embedded_dialog_destroy_cb),
- dialog_data);
- g_signal_connect (task->priv->dialog,
- "response",
- G_CALLBACK (embedded_dialog_response_cb),
- dialog_data);
+ dialog_data->response_id = g_signal_connect (task->priv->dialog,
+ "response",
+ G_CALLBACK (embedded_dialog_response_cb),
+ dialog_data);
/**/
diff --git a/gthumb/gedit-message-area.c b/gthumb/gedit-message-area.c
index 76ea5ce..f43e4d8 100644
--- a/gthumb/gedit-message-area.c
+++ b/gthumb/gedit-message-area.c
@@ -141,49 +141,75 @@ gedit_message_area_close (GeditMessageArea *message_area)
GTK_RESPONSE_CANCEL);
}
+
/*
+static void
+gedit_message_area_style_set (GtkWidget *widget,
+ GtkStyle *prev_style)
+{
+ GeditMessageArea *message_area = GEDIT_MESSAGE_AREA (widget);
+ GtkWidget *window;
+ GtkStyle *style;
+
+ if (message_area->priv->changing_style)
+ return;
+
+ // This is a hack needed to use the tooltip background color
+ window = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_widget_set_name (window, "gtk-tooltip");
+ gtk_widget_ensure_style (window);
+ style = gtk_widget_get_style (window);
+
+ message_area->priv->changing_style = TRUE;
+ gtk_widget_set_style (GTK_WIDGET (message_area), style);
+ message_area->priv->changing_style = FALSE;
+
+ gtk_widget_destroy (window);
+
+ gtk_widget_queue_draw (GTK_WIDGET (message_area));
+}
+*/
+
+
static gboolean
-paint_message_area (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer user_data)
+gedit_message_area_expose (GtkWidget *widget,
+ GdkEventExpose *event)
{
- guint border;
- GdkRectangle area;
- GdkRectangle paint_area;
-
- border = gtk_container_get_border_width (GTK_CONTAINER (widget));
-
- area.x = widget->allocation.x + border;
- area.y = widget->allocation.y + border;
- area.width = widget->allocation.width - (border * 2);
- area.height = widget->allocation.height - (border * 2);
-
- if (gdk_rectangle_intersect (&event->area, &area, &paint_area))
- gtk_paint_flat_box (widget->style,
- widget->window,
- GTK_STATE_NORMAL,
- GTK_SHADOW_NONE,
- &paint_area,
- widget,
- "tooltip",
- area.x,
- area.y,
- area.width,
- area.height);
+ /*
+ gtk_paint_box (widget->style,
+ widget->window,
+ GTK_STATE_NORMAL,
+ GTK_SHADOW_OUT,
+ NULL,
+ widget,
+ "infobar",
+ widget->allocation.x,
+ widget->allocation.y,
+ widget->allocation.width,
+ widget->allocation.height);
+ */
+
+ if (GTK_WIDGET_CLASS (gedit_message_area_parent_class)->expose_event)
+ GTK_WIDGET_CLASS (gedit_message_area_parent_class)->expose_event (widget, event);
return FALSE;
}
-*/
+
static void
gedit_message_area_class_init (GeditMessageAreaClass *klass)
{
- GObjectClass *object_class;
- GtkBindingSet *binding_set;
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkBindingSet *binding_set;
object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gedit_message_area_finalize;
+ widget_class = GTK_WIDGET_CLASS (klass);
+ /*widget_class->style_set = gedit_message_area_style_set;*/
+ widget_class->expose_event = gedit_message_area_expose;
+
klass->close = gedit_message_area_close;
g_type_class_add_private (object_class, sizeof(GeditMessageAreaPrivate));
@@ -210,39 +236,14 @@ gedit_message_area_class_init (GeditMessageAreaClass *klass)
gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "close", 0);
}
-/*
-static void
-style_set (GtkWidget *widget,
- GtkStyle *prev_style,
- GeditMessageArea *message_area)
-{
- GtkWidget *window;
- GtkStyle *style;
-
- if (message_area->priv->changing_style)
- return;
-
- // This is a hack needed to use the tooltip background color
- window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_widget_set_name (window, "gtk-tooltip");
- gtk_widget_ensure_style (window);
- style = gtk_widget_get_style (window);
-
- message_area->priv->changing_style = TRUE;
- gtk_widget_set_style (GTK_WIDGET (message_area), style);
- message_area->priv->changing_style = FALSE;
-
- gtk_widget_destroy (window);
-
- gtk_widget_queue_draw (GTK_WIDGET (message_area));
-}
-*/
static void
gedit_message_area_init (GeditMessageArea *message_area)
{
GtkWidget *vbox;
+ gtk_widget_push_composite_child ();
+
message_area->priv = GEDIT_MESSAGE_AREA_GET_PRIVATE (message_area);
message_area->priv->main_hbox = gtk_hbox_new (FALSE, 3); /* FIXME: use style properties */
@@ -271,8 +272,10 @@ gedit_message_area_init (GeditMessageArea *message_area)
TRUE,
0);
- /*
gtk_widget_set_app_paintable (GTK_WIDGET (message_area), TRUE);
+ gtk_widget_set_redraw_on_allocate (GTK_WIDGET (message_area), TRUE);
+
+ /*
g_signal_connect (message_area,
"expose-event",
@@ -289,6 +292,8 @@ gedit_message_area_init (GeditMessageArea *message_area)
"style-set",
G_CALLBACK (style_set),
message_area);*/
+
+ gtk_widget_pop_composite_child ();
}
static gint
diff --git a/gthumb/gedit-message-area.h b/gthumb/gedit-message-area.h
index ce912c1..71c38e5 100644
--- a/gthumb/gedit-message-area.h
+++ b/gthumb/gedit-message-area.h
@@ -57,7 +57,7 @@ struct _GeditMessageArea
{
GtkHBox parent;
- /*< private > */
+ /*< private >*/
GeditMessageAreaPrivate *priv;
};
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 8a719d9..916c932 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -564,7 +564,7 @@ gth_browser_update_extra_widget (GthBrowser *browser)
{
gedit_message_area_clear_action_area (GEDIT_MESSAGE_AREA (browser->priv->list_extra_widget));
if (g_file_info_get_icon (browser->priv->location->info) != NULL)
- gth_embedded_dialog_set_gicon (GTH_EMBEDDED_DIALOG (browser->priv->list_extra_widget), g_file_info_get_icon (browser->priv->location->info));
+ gth_embedded_dialog_set_gicon (GTH_EMBEDDED_DIALOG (browser->priv->list_extra_widget), g_file_info_get_icon (browser->priv->location->info), GTK_ICON_SIZE_BUTTON);
if (g_file_info_get_display_name (browser->priv->location->info) != NULL)
gth_embedded_dialog_set_primary_text (GTH_EMBEDDED_DIALOG (browser->priv->list_extra_widget), g_file_info_get_display_name (browser->priv->location->info));
gth_hook_invoke ("gth-browser-update-extra-widget", browser);
@@ -1072,18 +1072,14 @@ load_data_done (LoadData *load_data,
g_free (uri);
}
- browser->priv->activity_ref--;
- g_signal_emit (G_OBJECT (browser),
- gth_browser_signals[LOCATION_READY],
- 0,
- load_data->requested_folder->file,
- (error != NULL));
-
if (error == NULL) {
_g_object_unref (browser->priv->location_source);
browser->priv->location_source = g_object_ref (load_data->file_source);
}
+ /* moving the "gth-browser-load-location-after" after the
+ * LOCATION_READY signal emition can brake the extensions */
+
if ((load_data->action == GTH_ACTION_GO_TO)
|| (load_data->action == GTH_ACTION_GO_INTO)
|| (load_data->action == GTH_ACTION_GO_BACK)
@@ -1095,6 +1091,13 @@ load_data_done (LoadData *load_data,
gth_hook_invoke ("gth-browser-load-location-after", browser, browser->priv->location, error);
}
+ browser->priv->activity_ref--;
+ g_signal_emit (G_OBJECT (browser),
+ gth_browser_signals[LOCATION_READY],
+ 0,
+ load_data->requested_folder->file,
+ (error != NULL));
+
if (error == NULL)
return;
@@ -4051,7 +4054,7 @@ _gth_browser_construct (GthBrowser *browser)
gtk_widget_show (browser->priv->list_extra_widget_container);
gtk_box_pack_start (GTK_BOX (vbox), browser->priv->list_extra_widget_container, FALSE, FALSE, 0);
- browser->priv->list_extra_widget = gth_embedded_dialog_new (NULL, NULL, NULL);
+ browser->priv->list_extra_widget = gth_embedded_dialog_new ();
gtk_widget_show (browser->priv->list_extra_widget);
gtk_container_add (GTK_CONTAINER (browser->priv->list_extra_widget_container), browser->priv->list_extra_widget);
diff --git a/gthumb/gth-embedded-dialog.c b/gthumb/gth-embedded-dialog.c
index 4f32118..184e9bc 100644
--- a/gthumb/gth-embedded-dialog.c
+++ b/gthumb/gth-embedded-dialog.c
@@ -86,7 +86,7 @@ gth_embedded_dialog_get_type (void)
};
type = g_type_register_static (GEDIT_TYPE_MESSAGE_AREA,
- "GthEmbeddedEditorDialog",
+ "GthEmbeddedDialog",
&type_info,
0);
}
@@ -111,7 +111,7 @@ gth_embedded_dialog_construct (GthEmbeddedDialog *self)
gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.5);
- vbox = gtk_vbox_new (FALSE, 6);
+ vbox = gtk_vbox_new (FALSE, 0);
gtk_widget_show (vbox);
gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
@@ -139,17 +139,12 @@ gth_embedded_dialog_construct (GthEmbeddedDialog *self)
GtkWidget *
-gth_embedded_dialog_new (const char *icon_stock_id,
- const char *primary_text,
- const char *secondary_text)
+gth_embedded_dialog_new (void)
{
GthEmbeddedDialog *self;
self = g_object_new (GTH_TYPE_EMBEDDED_DIALOG, NULL);
gth_embedded_dialog_construct (self);
- gth_embedded_dialog_set_icon (self, icon_stock_id);
- gth_embedded_dialog_set_primary_text (self, primary_text);
- gth_embedded_dialog_set_secondary_text (self, secondary_text);
return (GtkWidget *) self;
}
@@ -157,28 +152,30 @@ gth_embedded_dialog_new (const char *icon_stock_id,
void
gth_embedded_dialog_set_icon (GthEmbeddedDialog *dialog,
- const char *icon_stock_id)
+ const char *icon_stock_id,
+ GtkIconSize size)
{
if (icon_stock_id == NULL) {
gtk_widget_hide (dialog->priv->icon_image);
return;
}
- gtk_image_set_from_stock (GTK_IMAGE (dialog->priv->icon_image), icon_stock_id, GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_stock (GTK_IMAGE (dialog->priv->icon_image), icon_stock_id, size);
gtk_widget_show (dialog->priv->icon_image);
}
void
gth_embedded_dialog_set_gicon (GthEmbeddedDialog *dialog,
- GIcon *icon)
+ GIcon *icon,
+ GtkIconSize size)
{
if (icon == NULL) {
gtk_widget_hide (dialog->priv->icon_image);
return;
}
- gtk_image_set_from_gicon (GTK_IMAGE (dialog->priv->icon_image), icon, GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_gicon (GTK_IMAGE (dialog->priv->icon_image), icon, size);
gtk_widget_show (dialog->priv->icon_image);
}
diff --git a/gthumb/gth-embedded-dialog.h b/gthumb/gth-embedded-dialog.h
index e9016fb..faf3d39 100644
--- a/gthumb/gth-embedded-dialog.h
+++ b/gthumb/gth-embedded-dialog.h
@@ -51,13 +51,13 @@ struct _GthEmbeddedDialogClass
};
GType gth_embedded_dialog_get_type (void) G_GNUC_CONST;
-GtkWidget * gth_embedded_dialog_new (const char *icon_stock_id,
- const char *primary_text,
- const char *secondary_text);
+GtkWidget * gth_embedded_dialog_new (void);
void gth_embedded_dialog_set_icon (GthEmbeddedDialog *dialog,
- const char *icon_stock_id);
+ const char *icon_stock_id,
+ GtkIconSize size);
void gth_embedded_dialog_set_gicon (GthEmbeddedDialog *dialog,
- GIcon *icon);
+ GIcon *icon,
+ GtkIconSize size);
void gth_embedded_dialog_set_primary_text (GthEmbeddedDialog *dialog,
const char *primary_text);
void gth_embedded_dialog_set_secondary_text (GthEmbeddedDialog *dialog,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]