[gthumb] recalc the free space only when required
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] recalc the free space only when required
- Date: Fri, 12 Aug 2011 15:28:13 +0000 (UTC)
commit 886f5e1b8c0d27059f8976067967ac4809d194a3
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Aug 12 17:27:34 2011 +0200
recalc the free space only when required
gthumb/gth-browser.c | 103 +++++++++++++++++++++++++++++++-------------------
1 files changed, 64 insertions(+), 39 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index c9e17fd..0bdb248 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -162,6 +162,8 @@ struct _GthBrowserPrivateData {
guint selection_changed_event;
GthFileData *folder_popup_file_data;
gboolean properties_on_screen;
+ char *location_free_space;
+ gboolean recalc_location_free_space;
/* fulscreen */
@@ -936,40 +938,21 @@ _gth_browser_get_fast_file_type (GthBrowser *browser,
}
-
static void
-get_free_space_ready_cb (GthFileSource *file_source,
- guint64 total_size,
- guint64 free_space,
- GError *error,
- gpointer data)
-{
- GthBrowser *browser = data;
- GList *file_list;
- int n_total;
- goffset size_total;
- GList *scan;
- int n_selected;
- goffset size_selected;
- GList *selected;
- char *size_total_formatted;
- char *size_selected_formatted;
- char *text_free;
- char *text_total;
- char *text_selected;
- GString *text;
-
- if (error == NULL) {
- char *free_space_formatted;
-
- free_space_formatted = g_format_size_for_display (free_space);
- text_free = g_strdup_printf (_("%s of free space"), free_space_formatted);
-
- g_free (free_space_formatted);
- }
- else
- text_free = NULL;
-
+_update_statusbar_list_info (GthBrowser *browser)
+{
+ GList *file_list;
+ int n_total;
+ goffset size_total;
+ GList *scan;
+ int n_selected;
+ goffset size_selected;
+ GList *selected;
+ char *size_total_formatted;
+ char *size_selected_formatted;
+ char *text_total;
+ char *text_selected;
+ GString *text;
/* total */
@@ -1012,14 +995,13 @@ get_free_space_ready_cb (GthFileSource *file_source,
g_string_append (text, STATUSBAR_SEPARATOR);
g_string_append (text, text_selected);
}
- if (text_free != NULL) {
+ if (browser->priv->location_free_space != NULL) {
g_string_append (text, STATUSBAR_SEPARATOR);
- g_string_append (text, text_free);
+ g_string_append (text, browser->priv->location_free_space);
}
gth_statusbar_set_list_info (GTH_STATUSBAR (browser->priv->statusbar), text->str);
g_string_free (text, TRUE);
- g_free (text_free);
g_free (text_selected);
g_free (text_total);
g_free (size_selected_formatted);
@@ -1028,12 +1010,48 @@ get_free_space_ready_cb (GthFileSource *file_source,
static void
+get_free_space_ready_cb (GthFileSource *file_source,
+ guint64 total_size,
+ guint64 free_space,
+ GError *error,
+ gpointer data)
+{
+ GthBrowser *browser = data;
+ char *free_space_text;
+
+ if (error == NULL) {
+ char *free_space_formatted;
+
+ free_space_formatted = g_format_size_for_display (free_space);
+ free_space_text = g_strdup_printf (_("%s of free space"), free_space_formatted);
+
+ g_free (free_space_formatted);
+ }
+ else
+ free_space_text = NULL;
+
+ g_free (browser->priv->location_free_space);
+ browser->priv->location_free_space = NULL;
+ if (free_space_text != NULL)
+ browser->priv->location_free_space = g_strdup (free_space_text);
+ g_free (free_space_text);
+
+ browser->priv->recalc_location_free_space = FALSE;
+
+ _update_statusbar_list_info (browser);
+}
+
+
+static void
_gth_browser_update_statusbar_list_info (GthBrowser *browser)
{
- gth_file_source_get_free_space (browser->priv->location_source,
- browser->priv->location->file,
- get_free_space_ready_cb,
- browser);
+ if (browser->priv->recalc_location_free_space)
+ gth_file_source_get_free_space (browser->priv->location_source,
+ browser->priv->location->file,
+ get_free_space_ready_cb,
+ browser);
+ else
+ _update_statusbar_list_info (browser);
}
@@ -1538,6 +1556,7 @@ load_data_continue (LoadData *load_data,
return;
}
+ browser->priv->recalc_location_free_space = TRUE;
load_data_done (load_data, NULL);
switch (load_data->action) {
@@ -2462,6 +2481,9 @@ gth_browser_init (GthBrowser *browser)
for (i = 0; i < GCONF_NOTIFICATIONS; i++)
browser->priv->cnxn_id[i] = 0;
+
+ browser->priv->location_free_space = NULL;
+ browser->priv->recalc_location_free_space = TRUE;
}
@@ -2471,6 +2493,7 @@ gth_browser_finalize (GObject *object)
GthBrowser *browser = GTH_BROWSER (object);
if (browser->priv != NULL) {
+ g_free (browser->priv->location_free_space);
_g_object_unref (browser->priv->location_source);
_g_object_unref (browser->priv->monitor_location);
_g_object_unref (browser->priv->location);
@@ -3069,6 +3092,8 @@ folder_changed_cb (GthMonitor *monitor,
gboolean current_file_deleted = FALSE;
GthFileData *new_file = NULL;
+ browser->priv->recalc_location_free_space = TRUE;
+
switch (event) {
case GTH_MONITOR_EVENT_CREATED:
case GTH_MONITOR_EVENT_CHANGED:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]