Commit 92950538 authored by Paolo Bacchilega's avatar Paolo Bacchilega
Browse files

update the current location after changing the catalog date

parent 8168fb6c
......@@ -442,9 +442,16 @@ gth_browser_update_sensitivity (GthBrowser *browser)
void
gth_browser_update_extra_widget (GthBrowser *browser)
{
GtkWidget *location_chooser;
gtk_widget_show (browser->priv->location_bar);
_gtk_container_remove_children (GTK_CONTAINER (gth_location_bar_get_action_area (GTH_LOCATION_BAR (browser->priv->location_bar))), NULL, NULL);
gth_location_bar_set_from_file (GTH_LOCATION_BAR (browser->priv->location_bar), browser->priv->location->file);
location_chooser = gth_location_bar_get_chooser (GTH_LOCATION_BAR (browser->priv->location_bar));
g_signal_handlers_block_by_data (location_chooser, browser);
gth_location_chooser_set_current (GTH_LOCATION_CHOOSER (location_chooser), browser->priv->location->file);
g_signal_handlers_unblock_by_data (location_chooser, browser);
gth_hook_invoke ("gth-browser-update-extra-widget", browser);
}
......@@ -453,23 +460,20 @@ static void
_gth_browser_set_location (GthBrowser *browser,
GthFileData *location)
{
GtkWidget *location_chooser;
if (location == NULL)
return;
if (browser->priv->location != NULL)
g_object_unref (browser->priv->location);
browser->priv->location = gth_file_data_dup (location);
if (location != browser->priv->location) {
if (browser->priv->location != NULL)
g_object_unref (browser->priv->location);
browser->priv->location = gth_file_data_dup (location);
}
_gth_browser_update_current_file_position (browser);
gth_browser_update_title (browser);
gth_browser_update_sensitivity (browser);
location_chooser = gth_location_bar_get_chooser (GTH_LOCATION_BAR (browser->priv->location_bar));
g_signal_handlers_block_by_data (location_chooser, browser);
gth_browser_update_extra_widget (browser);
g_signal_handlers_unblock_by_data (location_chooser, browser);
}
......@@ -3375,6 +3379,7 @@ renamed_file_attributes_ready_cb (GthFileSource *file_source,
new_location = gth_file_data_new (rename_data->new_file, browser->priv->location->info);
new_info = gth_file_source_get_file_info (rename_data->file_source, new_location->file, GFILE_DISPLAY_ATTRIBUTES);
g_file_info_copy_into (new_info, new_location->info);
_gth_browser_set_location (browser, new_location);
g_object_unref (new_info);
......@@ -3471,10 +3476,15 @@ metadata_changed_cb (GthMonitor *monitor,
GthBrowser *browser)
{
if ((browser->priv->location != NULL) && g_file_equal (browser->priv->location->file, file_data->file)) {
GtkWidget *location_chooser;
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;
location_chooser = gth_location_bar_get_chooser (GTH_LOCATION_BAR (browser->priv->location_bar));
gth_location_chooser_reload (GTH_LOCATION_CHOOSER (location_chooser));
_gth_browser_set_location (browser, browser->priv->location);
}
if ((browser->priv->current_file != NULL) && g_file_equal (browser->priv->current_file->file, file_data->file)) {
......@@ -3487,6 +3497,8 @@ metadata_changed_cb (GthMonitor *monitor,
gth_browser_update_title (browser);
gth_browser_update_sensitivity (browser);
}
gth_folder_tree_update_child (GTH_FOLDER_TREE (browser->priv->folder_tree), file_data->file, file_data);
}
......
......@@ -1752,18 +1752,20 @@ gth_folder_tree_update_child (GthFolderTree *folder_tree,
return;
if (gth_folder_tree_get_iter (folder_tree, file_data->file, &new_file_iter, NULL)) {
GFile *parent;
GList *files;
if (! _g_file_equal (old_file, file_data->file)) {
GFile *parent;
GList *files;
/* the new file is already present, remove the old file */
/* the new file is already present, remove the old file */
parent = g_file_get_parent (old_file);
files = g_list_prepend (NULL, g_object_ref (old_file));
gth_folder_tree_delete_children (folder_tree, parent, files);
_g_object_list_unref (files);
g_object_unref (parent);
parent = g_file_get_parent (old_file);
files = g_list_prepend (NULL, g_object_ref (old_file));
gth_folder_tree_delete_children (folder_tree, parent, files);
_g_object_list_unref (files);
g_object_unref (parent);
}
/* update the data old of the new file */
/* update the data of the new file */
_gth_folder_tree_set_file_data (folder_tree, &new_file_iter, file_data);
}
......
......@@ -85,14 +85,6 @@ gth_location_bar_new (void)
}
void
gth_location_bar_set_from_file (GthLocationBar *self,
GFile *file)
{
gth_location_chooser_set_current (GTH_LOCATION_CHOOSER (self->priv->location_chooser), file);
}
GtkWidget *
gth_location_bar_get_chooser (GthLocationBar *self)
{
......
......@@ -50,8 +50,6 @@ struct _GthLocationBarClass
GType gth_location_bar_get_type (void) G_GNUC_CONST;
GtkWidget * gth_location_bar_new (void);
void gth_location_bar_set_from_file (GthLocationBar *dialog,
GFile *file);
GtkWidget * gth_location_bar_get_chooser (GthLocationBar *dialog);
GtkWidget * gth_location_bar_get_action_area (GthLocationBar *self);
......
......@@ -79,6 +79,7 @@ struct _GthLocationChooserPrivate
guint update_location_list_id;
gboolean show_entry_points;
GtkReliefStyle relief;
gboolean reload;
};
......@@ -436,7 +437,7 @@ update_location_list (gpointer user_data)
if (self->priv->location == NULL)
return;
if (get_iter_from_current_file_entries (self, self->priv->location, &iter)) {
if (! self->priv->reload && get_iter_from_current_file_entries (self, self->priv->location, &iter)) {
g_signal_handlers_block_by_func (self->priv->combo, combo_changed_cb, self);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->priv->combo), &iter);
g_signal_handlers_unblock_by_func (self->priv->combo, combo_changed_cb, self);
......@@ -469,6 +470,8 @@ update_location_list (gpointer user_data)
_g_object_list_unref (list);
}
self->priv->reload = FALSE;
}
......@@ -476,7 +479,7 @@ static void
current_location_changed (GthLocationChooser *self)
{
if (self->priv->update_location_list_id != 0)
return;
g_source_remove (self->priv->update_location_list_id);
self->priv->update_location_list_id = call_when_idle ((DataFunc) update_location_list, self);
}
......@@ -565,6 +568,7 @@ gth_location_chooser_init (GthLocationChooser *self)
self->priv->arrow = NULL;
self->priv->show_entry_points = TRUE;
self->priv->relief = GTK_RELIEF_NORMAL;
self->priv->reload = FALSE;
self->priv->model = gtk_tree_store_new (N_COLUMNS,
G_TYPE_ICON,
......@@ -739,21 +743,22 @@ void
gth_location_chooser_set_current (GthLocationChooser *self,
GFile *file)
{
if (file != self->priv->location) {
if (self->priv->file_source != NULL)
g_object_unref (self->priv->file_source);
self->priv->file_source = gth_main_get_file_source (file);
if (self->priv->file_source == NULL)
return;
if (self->priv->file_source != NULL)
g_object_unref (self->priv->file_source);
self->priv->file_source = gth_main_get_file_source (file);
if (self->priv->file_source == NULL)
return;
if ((self->priv->location != NULL) && g_file_equal (file, self->priv->location))
return;
if (self->priv->location != NULL) {
g_object_unref (self->priv->location);
self->priv->location = NULL;
}
if (self->priv->location != NULL)
g_object_unref (self->priv->location);
self->priv->location = g_file_dup (file);
if (file != NULL)
self->priv->location = g_file_dup (file);
}
if (gtk_widget_get_realized (GTK_WIDGET (self)))
current_location_changed (self);
......@@ -767,3 +772,15 @@ gth_location_chooser_get_current (GthLocationChooser *self)
{
return self->priv->location;
}
void
gth_location_chooser_reload (GthLocationChooser *self)
{
if (self->priv->location == NULL)
return;
self->priv->reload = TRUE;
if (gtk_widget_get_realized (GTK_WIDGET (self)))
current_location_changed (self);
}
......@@ -64,8 +64,7 @@ gboolean gth_location_chooser_get_show_entry_points (GthLocationChooser
void gth_location_chooser_set_current (GthLocationChooser *chooser,
GFile *location);
GFile * gth_location_chooser_get_current (GthLocationChooser *chooser);
GthFileSource * gth_location_chooser_get_file_source (GthLocationChooser *chooser);
void gth_location_chooser_open_other (GthLocationChooser *chooser);
void gth_location_chooser_reload (GthLocationChooser *chooser);
G_END_DECLS
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment