[gthumb/ext: 3/15] update the extra widget after changing the catalog metadata
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext: 3/15] update the extra widget after changing the catalog metadata
- Date: Tue, 15 Dec 2009 19:39:44 +0000 (UTC)
commit 948e09ed21d2d603a54ad55841121cfcef2fa8c4
Author: Paolo Bacchilega <paobac src gnome org>
Date: Tue Dec 8 00:03:03 2009 +0100
update the extra widget after changing the catalog metadata
extensions/catalogs/actions.c | 9 +++-
extensions/catalogs/callbacks.c | 65 ++++++++++++++++++----
extensions/catalogs/callbacks.h | 25 +++++----
extensions/catalogs/dlg-catalog-properties.c | 7 ++-
extensions/catalogs/gth-catalog.c | 37 +++++++++++++
extensions/catalogs/gth-catalog.h | 68 ++++++++++++-----------
extensions/catalogs/gth-file-source-catalogs.c | 14 +----
extensions/catalogs/main.c | 1 +
extensions/search/callbacks.c | 68 +++++++++++++++---------
extensions/search/callbacks.h | 19 ++++---
extensions/search/gth-search-task.c | 2 +-
extensions/search/main.c | 1 +
gthumb/gth-browser.c | 42 ++++++++-------
gthumb/gth-browser.h | 3 +-
gthumb/gth-main-default-hooks.c | 7 +++
15 files changed, 239 insertions(+), 129 deletions(-)
---
diff --git a/extensions/catalogs/actions.c b/extensions/catalogs/actions.c
index 0360db0..402d289 100644
--- a/extensions/catalogs/actions.c
+++ b/extensions/catalogs/actions.c
@@ -359,7 +359,14 @@ void
gth_browser_activate_action_catalog_properties (GtkAction *action,
GthBrowser *browser)
{
- dlg_catalog_properties (browser, gth_browser_get_location_data (browser)); /* FIXME */
+ GthFolderTree *folder_tree;
+ GthFileData *file_data;
+
+ folder_tree = GTH_FOLDER_TREE (gth_browser_get_folder_tree (browser));
+ file_data = gth_folder_tree_get_selected (folder_tree);
+ dlg_catalog_properties (browser, file_data);
+
+ g_object_unref (file_data);
}
diff --git a/extensions/catalogs/callbacks.c b/extensions/catalogs/callbacks.c
index 26e27b5..68204b7 100644
--- a/extensions/catalogs/callbacks.c
+++ b/extensions/catalogs/callbacks.c
@@ -26,6 +26,7 @@
#include <glib-object.h>
#include <gthumb.h>
#include <gth-catalog.h>
+#include "dlg-catalog-properties.h"
#include "gth-file-source-catalogs.h"
#include "actions.h"
@@ -86,6 +87,8 @@ static const gchar *folder_popup_ui_info =
" <separator/>"
" <menuitem action='Catalog_Remove'/>"
" <menuitem action='Catalog_Rename'/>"
+" <separator/>"
+" <menuitem action='Catalog_Properties'/>"
" </placeholder>"
" </popup>"
"</ui>";
@@ -132,7 +135,12 @@ static GtkActionEntry catalog_action_entries[] = {
{ "Catalog_Rename", NULL,
N_("Rena_me"), NULL,
NULL,
- G_CALLBACK (gth_browser_activate_action_catalog_rename) }
+ G_CALLBACK (gth_browser_activate_action_catalog_rename) },
+
+ { "Catalog_Properties", GTK_STOCK_PROPERTIES,
+ NULL, NULL,
+ NULL,
+ G_CALLBACK (gth_browser_activate_action_catalog_properties) }
};
static guint catalog_action_entries_size = G_N_ELEMENTS (catalog_action_entries);
@@ -566,7 +574,7 @@ static void
properties_button_clicked_cb (GtkButton *button,
GthBrowser *browser)
{
- gth_browser_activate_action_catalog_properties (NULL, browser);
+ dlg_catalog_properties (browser, gth_browser_get_location_data (browser));
}
@@ -592,16 +600,53 @@ catalogs__gth_browser_load_location_after_cb (GthBrowser *browser,
g_error_free (error);
}
}
+ }
+ else {
+ if (data->vfs_merge_id != 0) {
+ gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser), data->vfs_merge_id);
+ data->vfs_merge_id = 0;
+ }
+ }
+}
+
+
+void
+catalogs__gth_browser_update_extra_widget_cb (GthBrowser *browser)
+{
+ BrowserData *data;
+ GthFileData *location_data;
+
+ data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+
+ location_data = gth_browser_get_location_data (browser);
+ if (GTH_IS_FILE_SOURCE_CATALOGS (gth_browser_get_location_source (browser))) {
+ GtkWidget *extra_widget;
+ GString *name;
+ GObject *metadata;
+
+ extra_widget = gth_browser_get_list_extra_widget (browser);
+
+ name = g_string_new ("");
+ if (g_file_info_get_display_name (location_data->info) != NULL)
+ g_string_append (name, g_file_info_get_display_name (location_data->info));
+ metadata = g_file_info_get_attribute_object (location_data->info, "general::event-date");
+ if (metadata != NULL) {
+ if (g_strcmp0 (name->str, "") != 0)
+ g_string_append (name, " - ");
+ g_string_append (name, gth_metadata_get_formatted (GTH_METADATA (metadata)));
+ }
+ gth_embedded_dialog_set_primary_text (GTH_EMBEDDED_DIALOG (extra_widget), name->str);
+
+ g_string_free (name, TRUE);
if (data->properties_button == NULL) {
- data->properties_button = gtk_button_new_from_stock (GTK_STOCK_PROPERTIES);
+ data->properties_button = gtk_button_new ();
+ gtk_container_add (GTK_CONTAINER (data->properties_button), gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_BUTTON));
g_object_add_weak_pointer (G_OBJECT (data->properties_button), (gpointer *)&data->properties_button);
gtk_button_set_relief (GTK_BUTTON (data->properties_button), GTK_RELIEF_NONE);
- GTK_WIDGET_SET_FLAGS (data->properties_button, GTK_CAN_DEFAULT);
- gtk_widget_show (data->properties_button);
- gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (gth_browser_get_list_extra_widget (browser)),
- data->properties_button,
- _RESPONSE_PROPERTIES);
+ gtk_widget_set_tooltip_text (data->properties_button, _("Properties"));
+ gtk_widget_show_all (data->properties_button);
+ gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (extra_widget), data->properties_button, _RESPONSE_PROPERTIES);
g_signal_connect (data->properties_button,
"clicked",
G_CALLBACK (properties_button_clicked_cb),
@@ -611,9 +656,5 @@ catalogs__gth_browser_load_location_after_cb (GthBrowser *browser,
else {
if (GTH_IS_FILE_SOURCE_VFS (gth_browser_get_location_source (browser)))
gedit_message_area_add_button (GEDIT_MESSAGE_AREA (gth_browser_get_list_extra_widget (browser)), _("Organize..."), _RESPONSE_ORGANIZE);
- if (data->vfs_merge_id != 0) {
- gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser), data->vfs_merge_id);
- data->vfs_merge_id = 0;
- }
}
}
diff --git a/extensions/catalogs/callbacks.h b/extensions/catalogs/callbacks.h
index 5ed9dfb..8a0b794 100644
--- a/extensions/catalogs/callbacks.h
+++ b/extensions/catalogs/callbacks.h
@@ -26,17 +26,18 @@
#include <gthumb.h>
#include "gth-catalog.h"
-void catalogs__initialize_cb (void);
-void catalogs__gth_browser_construct_cb (GthBrowser *browser);
-void catalogs__gth_browser_update_sensitivity_cb (GthBrowser *browser);
-void catalogs__gth_browser_file_list_popup_before_cb (GthBrowser *browser);
-void catalogs__gth_browser_file_popup_before_cb (GthBrowser *browser);
-void catalogs__gth_browser_folder_tree_popup_before_cb (GthBrowser *browser,
- GthFileSource *file_source,
- GFile *folder);
-GthCatalog * catalogs__gth_catalog_load_from_data_cb (const void *buffer);
-void catalogs__gth_browser_load_location_after_cb (GthBrowser *browser,
- GFile *location,
- const GError *error);
+void catalogs__initialize_cb (void);
+void catalogs__gth_browser_construct_cb (GthBrowser *browser);
+void catalogs__gth_browser_update_sensitivity_cb (GthBrowser *browser);
+void catalogs__gth_browser_file_list_popup_before_cb (GthBrowser *browser);
+void catalogs__gth_browser_file_popup_before_cb (GthBrowser *browser);
+void catalogs__gth_browser_folder_tree_popup_before_cb (GthBrowser *browser,
+ GthFileSource *file_source,
+ GFile *folder);
+GthCatalog * catalogs__gth_catalog_load_from_data_cb (const void *buffer);
+void catalogs__gth_browser_load_location_after_cb (GthBrowser *browser,
+ GFile *location,
+ const GError *error);
+void catalogs__gth_browser_update_extra_widget_cb (GthBrowser *browser);
#endif /* CALLBACKS_H */
diff --git a/extensions/catalogs/dlg-catalog-properties.c b/extensions/catalogs/dlg-catalog-properties.c
index f611c23..f19398d 100644
--- a/extensions/catalogs/dlg-catalog-properties.c
+++ b/extensions/catalogs/dlg-catalog-properties.c
@@ -70,7 +70,10 @@ catalog_saved_cb (void *buffer,
gth_monitor_file_renamed (gth_main_get_default_monitor (),
data->original_file,
data->file_data->file);
+
}
+ gth_catalog_update_metadata (data->catalog, data->file_data);
+ gth_monitor_metadata_changed (gth_main_get_default_monitor (), data->file_data);
}
else
_gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Could not save the catalog"), &error);
@@ -157,10 +160,10 @@ catalog_ready_cb (GObject *object,
data->catalog = g_object_ref (object);
gtk_entry_set_text (GTK_ENTRY (GET_WIDGET ("name_entry")), gth_catalog_get_display_name (data->file_data->file));
gth_time_selector_set_value (GTH_TIME_SELECTOR (data->time_selector), gth_catalog_get_date (data->catalog));
-
gth_hook_invoke ("dlg-catalog-properties", data->builder, data->file_data, data->catalog);
-
gtk_widget_show (data->dialog);
+
+ g_object_unref (object);
}
diff --git a/extensions/catalogs/gth-catalog.c b/extensions/catalogs/gth-catalog.c
index e1fa0fc..2b51be1 100644
--- a/extensions/catalogs/gth-catalog.c
+++ b/extensions/catalogs/gth-catalog.c
@@ -807,3 +807,40 @@ gth_catalog_load_from_file (GFile *file,
g_object_unref (gio_file);
}
+
+
+void
+gth_catalog_update_metadata (GthCatalog *catalog,
+ GthFileData *file_data)
+{
+ const char *sort_type;
+ gboolean sort_inverse;
+
+ sort_type = gth_catalog_get_order (catalog, &sort_inverse);
+ if (sort_type != NULL) {
+ g_file_info_set_attribute_string (file_data->info, "sort::type", sort_type);
+ g_file_info_set_attribute_boolean (file_data->info, "sort::inverse", sort_inverse);
+ }
+
+ if (gth_datetime_valid (gth_catalog_get_date (catalog))) {
+ GObject *metadata;
+ char *raw;
+ char *formatted;
+
+ metadata = (GObject *) gth_metadata_new ();
+ raw = gth_datetime_to_exif_date (gth_catalog_get_date (catalog));
+ formatted = gth_datetime_strftime (gth_catalog_get_date (catalog), "%x");
+ g_object_set (metadata,
+ "id", "general::event-date",
+ "raw", raw,
+ "formatted", formatted,
+ NULL);
+ g_file_info_set_attribute_object (file_data->info, "general::event-date", metadata);
+
+ g_free (formatted);
+ g_free (raw);
+ g_object_unref (metadata);
+ }
+ else
+ g_file_info_remove_attribute (file_data->info, "general::event-date");
+}
diff --git a/extensions/catalogs/gth-catalog.h b/extensions/catalogs/gth-catalog.h
index 2f263aa..ff42b5a 100644
--- a/extensions/catalogs/gth-catalog.h
+++ b/extensions/catalogs/gth-catalog.h
@@ -70,39 +70,41 @@ typedef void (*CatalogReadyCallback) (GthCatalog *catalog,
GError *error,
gpointer user_data);
-GType gth_catalog_get_type (void) G_GNUC_CONST;
-GthCatalog * gth_catalog_new (void);
-void gth_catalog_set_file (GthCatalog *catalog,
- GFile *file);
-GFile * gth_catalog_get_file (GthCatalog *catalog);
-void gth_catalog_set_order (GthCatalog *catalog,
- const char *order,
- gboolean inverse);
-const char * gth_catalog_get_order (GthCatalog *catalog,
- gboolean *inverse);
-void gth_catalog_load_from_data (GthCatalog *catalog,
- const void *buffer,
- gsize count,
- GError **error);
-char * gth_catalog_to_data (GthCatalog *catalog,
- gsize *length);
-void gth_catalog_set_file_list (GthCatalog *catalog,
- GList *file_list);
-GList * gth_catalog_get_file_list (GthCatalog *catalog);
-gboolean gth_catalog_insert_file (GthCatalog *catalog,
- int pos,
- GFile *file);
-int gth_catalog_remove_file (GthCatalog *catalog,
- GFile *file);
-void gth_catalog_set_date (GthCatalog *catalog,
- GthDateTime *date_time);
-GthDateTime * gth_catalog_get_date (GthCatalog *catalog);
-void gth_catalog_list_async (GthCatalog *catalog,
- const char *attributes,
- GCancellable *cancellable,
- CatalogReadyCallback ready_func,
- gpointer user_data);
-void gth_catalog_cancel (GthCatalog *catalog);
+GType gth_catalog_get_type (void) G_GNUC_CONST;
+GthCatalog * gth_catalog_new (void);
+void gth_catalog_set_file (GthCatalog *catalog,
+ GFile *file);
+GFile * gth_catalog_get_file (GthCatalog *catalog);
+void gth_catalog_set_order (GthCatalog *catalog,
+ const char *order,
+ gboolean inverse);
+const char * gth_catalog_get_order (GthCatalog *catalog,
+ gboolean *inverse);
+void gth_catalog_load_from_data (GthCatalog *catalog,
+ const void *buffer,
+ gsize count,
+ GError **error);
+char * gth_catalog_to_data (GthCatalog *catalog,
+ gsize *length);
+void gth_catalog_set_file_list (GthCatalog *catalog,
+ GList *file_list);
+GList * gth_catalog_get_file_list (GthCatalog *catalog);
+gboolean gth_catalog_insert_file (GthCatalog *catalog,
+ int pos,
+ GFile *file);
+int gth_catalog_remove_file (GthCatalog *catalog,
+ GFile *file);
+void gth_catalog_set_date (GthCatalog *catalog,
+ GthDateTime *date_time);
+GthDateTime * gth_catalog_get_date (GthCatalog *catalog);
+void gth_catalog_list_async (GthCatalog *catalog,
+ const char *attributes,
+ GCancellable *cancellable,
+ CatalogReadyCallback ready_func,
+ gpointer user_data);
+void gth_catalog_cancel (GthCatalog *catalog);
+void gth_catalog_update_metadata (GthCatalog *catalog,
+ GthFileData *file_data);
/* utils */
diff --git a/extensions/catalogs/gth-file-source-catalogs.c b/extensions/catalogs/gth-file-source-catalogs.c
index 7c8ed22..7599425 100644
--- a/extensions/catalogs/gth-file-source-catalogs.c
+++ b/extensions/catalogs/gth-file-source-catalogs.c
@@ -349,18 +349,8 @@ read_metadata_catalog_ready_cb (GObject *object,
g_clear_error (&error);
if (object != NULL) {
- GthCatalog *catalog;
- const char *sort_type;
- gboolean sort_inverse;
-
- catalog = GTH_CATALOG (object);
- sort_type = gth_catalog_get_order (catalog, &sort_inverse);
- if (sort_type != NULL) {
- g_file_info_set_attribute_string (read_metadata->file_data->info, "sort::type", sort_type);
- g_file_info_set_attribute_boolean (read_metadata->file_data->info, "sort::inverse", sort_inverse);
- }
-
- g_object_unref (catalog);
+ gth_catalog_update_metadata (GTH_CATALOG (object), read_metadata->file_data);
+ g_object_unref (object);
}
read_metadata->callback (G_OBJECT (read_metadata->file_source), error, read_metadata->data);
diff --git a/extensions/catalogs/main.c b/extensions/catalogs/main.c
index 870b060..401e5df 100644
--- a/extensions/catalogs/main.c
+++ b/extensions/catalogs/main.c
@@ -69,6 +69,7 @@ gthumb_extension_activate (void)
gth_hook_add_callback ("gth-browser-file-popup-before", 10, G_CALLBACK (catalogs__gth_browser_file_popup_before_cb), NULL);
gth_hook_add_callback ("gth-browser-folder-tree-popup-before", 10, G_CALLBACK (catalogs__gth_browser_folder_tree_popup_before_cb), NULL);
gth_hook_add_callback ("gth-browser-load-location-after", 10, G_CALLBACK (catalogs__gth_browser_load_location_after_cb), NULL);
+ gth_hook_add_callback ("gth-browser-update-extra-widget", 10, G_CALLBACK (catalogs__gth_browser_update_extra_widget_cb), NULL);
}
diff --git a/extensions/search/callbacks.c b/extensions/search/callbacks.c
index 9a0da02..9b0f7c4 100644
--- a/extensions/search/callbacks.c
+++ b/extensions/search/callbacks.c
@@ -163,32 +163,6 @@ search__gth_browser_load_location_after_cb (GthBrowser *browser,
gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser), data->find_merge_id);
data->find_merge_id = 0;
}
- if (data->search_merge_id == 0) {
- GError *local_error = NULL;
-
- data->search_merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), search_ui_info, -1, &local_error);
- if (data->search_merge_id == 0) {
- g_warning ("building menus failed: %s", local_error->message);
- g_error_free (local_error);
- }
- /*gtk_tool_item_set_is_important (GTK_TOOL_ITEM (gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), "/ToolBar/SourceCommands/Edit_Search_Update")), TRUE);*/
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), "/ToolBar/SourceCommands/Edit_Search_Edit")), TRUE);
- }
-
- if (data->refresh_button == NULL) {
- data->refresh_button = gtk_button_new_from_stock (GTK_STOCK_REFRESH);
- g_object_add_weak_pointer (G_OBJECT (data->refresh_button), (gpointer *)&data->refresh_button);
- gtk_button_set_relief (GTK_BUTTON (data->refresh_button), GTK_RELIEF_NONE);
- GTK_WIDGET_SET_FLAGS (data->refresh_button, GTK_CAN_DEFAULT);
- gtk_widget_show (data->refresh_button);
- gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (gth_browser_get_list_extra_widget (browser)),
- data->refresh_button,
- _RESPONSE_REFRESH);
- g_signal_connect (data->refresh_button,
- "clicked",
- G_CALLBACK (refresh_button_clicked_cb),
- browser);
- }
}
else {
if (data->search_merge_id != 0) {
@@ -209,6 +183,48 @@ search__gth_browser_load_location_after_cb (GthBrowser *browser,
}
+void
+search__gth_browser_update_extra_widget_cb (GthBrowser *browser)
+{
+ GthFileData *location_data;
+ BrowserData *data;
+
+ location_data = gth_browser_get_location_data (browser);
+ if (! _g_content_type_is_a (g_file_info_get_content_type (location_data->info), "gthumb/search"))
+ return;
+
+ data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+
+ if (data->search_merge_id == 0) {
+ GError *local_error = NULL;
+
+ data->search_merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), search_ui_info, -1, &local_error);
+ if (data->search_merge_id == 0) {
+ g_warning ("building menus failed: %s", local_error->message);
+ g_error_free (local_error);
+ }
+ /*gtk_tool_item_set_is_important (GTK_TOOL_ITEM (gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), "/ToolBar/SourceCommands/Edit_Search_Update")), TRUE);*/
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), "/ToolBar/SourceCommands/Edit_Search_Edit")), TRUE);
+ }
+
+ if (data->refresh_button == NULL) {
+ data->refresh_button = gtk_button_new ();
+ gtk_container_add (GTK_CONTAINER (data->refresh_button), gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_BUTTON));
+ g_object_add_weak_pointer (G_OBJECT (data->refresh_button), (gpointer *)&data->refresh_button);
+ gtk_button_set_relief (GTK_BUTTON (data->refresh_button), GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text (data->refresh_button, _("Search again"));
+ gtk_widget_show_all (data->refresh_button);
+ gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (gth_browser_get_list_extra_widget (browser)),
+ data->refresh_button,
+ _RESPONSE_REFRESH);
+ g_signal_connect (data->refresh_button,
+ "clicked",
+ G_CALLBACK (refresh_button_clicked_cb),
+ browser);
+ }
+}
+
+
GthCatalog *
search__gth_catalog_load_from_data_cb (const void *buffer)
{
diff --git a/extensions/search/callbacks.h b/extensions/search/callbacks.h
index 7de3d8e..cda1eb7 100644
--- a/extensions/search/callbacks.h
+++ b/extensions/search/callbacks.h
@@ -26,14 +26,15 @@
#include <gthumb.h>
#include <extensions/catalogs/gth-catalog.h>
-void search__gth_browser_construct_cb (GthBrowser *browser);
-void search__gth_browser_update_sensitivity_cb (GthBrowser *browser);
-void search__gth_browser_load_location_after_cb (GthBrowser *browser,
- GFile *location,
- GError *error);
-GthCatalog * search__gth_catalog_load_from_data_cb (const void *buffer);
-void search__dlg_catalog_properties (GthBrowser *browser,
- GtkBuilder *builder,
- GthFileData *file_data);
+void search__gth_browser_construct_cb (GthBrowser *browser);
+void search__gth_browser_update_sensitivity_cb (GthBrowser *browser);
+void search__gth_browser_load_location_after_cb (GthBrowser *browser,
+ GFile *location,
+ GError *error);
+void search__gth_browser_update_extra_widget_cb (GthBrowser *browser);
+GthCatalog * search__gth_catalog_load_from_data_cb (const void *buffer);
+void search__dlg_catalog_properties (GthBrowser *browser,
+ GtkBuilder *builder,
+ GthFileData *file_data);
#endif /* CALLBACKS_H */
diff --git a/extensions/search/gth-search-task.c b/extensions/search/gth-search-task.c
index db508a9..4e91e57 100644
--- a/extensions/search/gth-search-task.c
+++ b/extensions/search/gth-search-task.c
@@ -131,7 +131,7 @@ save_search_result_copy_done_cb (void *buffer,
g_free (text);*/
- gth_browser_load_location_after (task->priv->browser, NULL);
+ gth_browser_update_extra_widget (task->priv->browser);
/* FIXME
gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (task->priv->dialog),
diff --git a/extensions/search/main.c b/extensions/search/main.c
index eaf684d..22f9a15 100644
--- a/extensions/search/main.c
+++ b/extensions/search/main.c
@@ -33,6 +33,7 @@ gthumb_extension_activate (void)
gth_hook_add_callback ("gth-catalog-load-from-data", 10, G_CALLBACK (search__gth_catalog_load_from_data_cb), NULL);
gth_hook_add_callback ("gth-browser-construct", 10, G_CALLBACK (search__gth_browser_construct_cb), NULL);
gth_hook_add_callback ("gth-browser-load-location-after", 20, G_CALLBACK (search__gth_browser_load_location_after_cb), NULL);
+ gth_hook_add_callback ("gth-browser-update-extra-widget", 20, G_CALLBACK (search__gth_browser_update_extra_widget_cb), NULL);
gth_hook_add_callback ("dlg-catalog-properties", 10, G_CALLBACK (search__dlg_catalog_properties), NULL);
}
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 7a29977..17f181c 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -528,14 +528,14 @@ gth_browser_update_sensitivity (GthBrowser *browser)
void
-gth_browser_load_location_after (GthBrowser *browser,
- GError *error)
+gth_browser_update_extra_widget (GthBrowser *browser)
{
gedit_message_area_clear_action_area (GEDIT_MESSAGE_AREA (browser->priv->list_extra_widget));
- 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_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-load-location-after", browser, browser->priv->location, error);
+ 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));
+ 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);
}
@@ -553,6 +553,7 @@ _gth_browser_set_location (GthBrowser *browser,
gth_browser_update_title (browser);
_gth_browser_update_parent_list (browser);
gth_browser_update_sensitivity (browser);
+ gth_browser_update_extra_widget (browser);
g_signal_handlers_block_by_data (browser->priv->location_chooser, browser);
gth_location_chooser_set_current (GTH_LOCATION_CHOOSER (browser->priv->location_chooser), browser->priv->location->file);
@@ -991,7 +992,8 @@ load_data_done (LoadData *load_data,
|| (load_data->action == GTH_ACTION_GO_UP)
|| (load_data->action == GTH_ACTION_VIEW))
{
- gth_browser_load_location_after (browser, error);
+ gth_browser_update_extra_widget (browser);
+ gth_hook_invoke ("gth-browser-load-location-after", browser, browser->priv->location, error);
}
if (error == NULL)
@@ -2618,22 +2620,24 @@ metadata_changed_cb (GthMonitor *monitor,
GthFileData *file_data,
GthBrowser *browser)
{
- if (browser->priv->current_file == NULL)
- return;
-
- if (! g_file_equal (browser->priv->current_file->file, file_data->file))
+ if ((browser->priv->location != NULL) && g_file_equal (browser->priv->location->file, file_data->file)) {
+ if (file_data->info != browser->priv->location->info)
+ g_file_info_copy_into (file_data->info, browser->priv->location->info);
+ gth_browser_update_extra_widget (browser);
return;
+ }
- if (file_data->info != browser->priv->current_file->info)
- g_file_info_copy_into (file_data->info, browser->priv->current_file->info);
+ if ((browser->priv->current_file != NULL) && g_file_equal (browser->priv->current_file->file, file_data->file)) {
+ if (file_data->info != browser->priv->current_file->info)
+ g_file_info_copy_into (file_data->info, browser->priv->current_file->info);
- gth_sidebar_set_file (GTH_SIDEBAR (browser->priv->file_properties), browser->priv->current_file);
- gth_sidebar_set_file (GTH_SIDEBAR (browser->priv->viewer_sidebar), browser->priv->current_file);
-
- _gth_browser_update_statusbar_file_info (browser);
- gth_browser_update_title (browser);
- gth_browser_update_sensitivity (browser);
+ gth_sidebar_set_file (GTH_SIDEBAR (browser->priv->file_properties), browser->priv->current_file);
+ gth_sidebar_set_file (GTH_SIDEBAR (browser->priv->viewer_sidebar), browser->priv->current_file);
+ _gth_browser_update_statusbar_file_info (browser);
+ gth_browser_update_title (browser);
+ gth_browser_update_sensitivity (browser);
+ }
}
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index 7a139b8..80ac5a2 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -152,8 +152,7 @@ void gth_browser_load_file (GthBrowser *browser,
gboolean view);
void gth_browser_update_title (GthBrowser *browser);
void gth_browser_update_sensitivity (GthBrowser *browser);
-void gth_browser_load_location_after (GthBrowser *browser,
- GError *error);
+void gth_browser_update_extra_widget (GthBrowser *browser);
void gth_browser_show_viewer_properties (GthBrowser *browser,
gboolean show);
void gth_browser_show_viewer_tools (GthBrowser *browser,
diff --git a/gthumb/gth-main-default-hooks.c b/gthumb/gth-main-default-hooks.c
index ea068c6..6fe29e3 100644
--- a/gthumb/gth-main-default-hooks.c
+++ b/gthumb/gth-main-default-hooks.c
@@ -163,6 +163,13 @@ gth_main_register_default_hooks (void)
gth_hook_register ("gth-browser-file-list-key-press", 2);
/**
+ * Called when the list extra widget needs to be updated.
+ *
+ * @browser (GthBrowser*): the relative window.
+ */
+ gth_hook_register ("gth-browser-update-extra-widget", 1);
+
+ /**
* Called in _gdk_pixbuf_save_async
*
* @data (SavePixbufData*):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]