[Xfce4-commits] <ristretto:master> Implement preloading Fix bug with iter-clone operation - make sure it also gets the same position as the cloned iter
Stephan Arts
noreply at xfce.org
Mon Jul 12 22:58:02 CEST 2010
Updating branch refs/heads/master
to b9192a847107dfce64889adfd0a2dc5f97f31039 (commit)
from d9be1e3096ae3b487f08d7a09e8d88fee8b9948f (commit)
commit b9192a847107dfce64889adfd0a2dc5f97f31039
Author: Stephan Arts <stephan at xfce.org>
Date: Mon Jul 12 22:56:28 2010 +0200
Implement preloading
Fix bug with iter-clone operation - make sure it also gets the same position as the cloned iter
src/image_list.c | 30 +++++++++++++++++++++++++++++-
src/main_window.c | 16 ++++++++++++++++
src/preferences_dialog.c | 41 +++++++++++++++++++----------------------
src/settings.c | 20 +++++++++-----------
4 files changed, 73 insertions(+), 34 deletions(-)
diff --git a/src/image_list.c b/src/image_list.c
index 911d1cc..1a53d68 100644
--- a/src/image_list.c
+++ b/src/image_list.c
@@ -390,6 +390,10 @@ rstto_image_list_iter_new (RsttoImageList *nav, RsttoImage *image)
iter = g_object_new(RSTTO_TYPE_IMAGE_LIST_ITER, NULL);
iter->priv->image = image;
+ if (image)
+ {
+ g_object_ref (image);
+ }
iter->priv->image_list = nav;
return iter;
@@ -405,8 +409,13 @@ rstto_image_list_iter_find_image (RsttoImageListIter *iter, RsttoImage *image)
if (iter->priv->image)
{
+ g_object_unref (iter->priv->image);
iter->priv->image = NULL;
}
+ if (image)
+ {
+ g_object_ref (image);
+ }
iter->priv->image = image;
g_signal_emit (G_OBJECT (iter), rstto_image_list_iter_signals[RSTTO_IMAGE_LIST_ITER_SIGNAL_CHANGED], 0, NULL);
@@ -429,7 +438,7 @@ rstto_image_list_iter_get_position (RsttoImageListIter *iter)
RsttoImage *
rstto_image_list_iter_get_image (RsttoImageListIter *iter)
{
- return RSTTO_IMAGE (iter->priv->image);
+ return iter->priv->image;
}
@@ -440,10 +449,15 @@ rstto_image_list_iter_set_position (RsttoImageListIter *iter, gint pos)
if (iter->priv->image)
{
+ g_object_unref (iter->priv->image);
iter->priv->image = NULL;
}
iter->priv->image = g_list_nth_data (iter->priv->image_list->priv->images, pos);
+ if (iter->priv->image)
+ {
+ g_object_ref (iter->priv->image);
+ }
g_signal_emit (G_OBJECT (iter), rstto_image_list_iter_signals[RSTTO_IMAGE_LIST_ITER_SIGNAL_CHANGED], 0, NULL);
}
@@ -459,6 +473,7 @@ rstto_image_list_iter_next (RsttoImageListIter *iter)
if (iter->priv->image)
{
position = g_list_find (iter->priv->image_list->priv->images, iter->priv->image);
+ g_object_unref (iter->priv->image);
iter->priv->image = NULL;
}
@@ -482,6 +497,11 @@ rstto_image_list_iter_next (RsttoImageListIter *iter)
g_object_unref (settings);
}
+ if (iter->priv->image)
+ {
+ g_object_ref (iter->priv->image);
+ }
+
g_signal_emit (G_OBJECT (iter), rstto_image_list_iter_signals[RSTTO_IMAGE_LIST_ITER_SIGNAL_CHANGED], 0, NULL);
}
@@ -497,6 +517,7 @@ rstto_image_list_iter_previous (RsttoImageListIter *iter)
{
position = g_list_find (iter->priv->image_list->priv->images, iter->priv->image);
iter->priv->image = NULL;
+ g_object_unref (iter->priv->image);
}
position = g_list_previous (position);
@@ -519,6 +540,12 @@ rstto_image_list_iter_previous (RsttoImageListIter *iter)
g_object_unref (settings);
}
+ if (iter->priv->image)
+ {
+ g_object_ref (iter->priv->image);
+ }
+
+
g_signal_emit (G_OBJECT (iter), rstto_image_list_iter_signals[RSTTO_IMAGE_LIST_ITER_SIGNAL_CHANGED], 0, NULL);
}
@@ -526,6 +553,7 @@ RsttoImageListIter *
rstto_image_list_iter_clone (RsttoImageListIter *iter)
{
RsttoImageListIter *new_iter = rstto_image_list_iter_new (iter->priv->image_list, iter->priv->image);
+ rstto_image_list_iter_set_position (new_iter, rstto_image_list_iter_get_position(iter));
return new_iter;
}
diff --git a/src/main_window.c b/src/main_window.c
index 2bace1e..d98dc56 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -1501,9 +1501,25 @@ cb_rstto_main_window_pause (GtkWidget *widget, RsttoMainWindow *window)
static gboolean
cb_rstto_main_window_play_slideshow (RsttoMainWindow *window)
{
+ RsttoImageListIter *preload_iter = NULL;
+ GValue max_size = {0,};
+
if (window->priv->playing)
{
rstto_image_list_iter_next (window->priv->iter);
+ if (rstto_settings_get_boolean_property(window->priv->settings_manager, "preload-images"))
+ {
+ g_value_init (&max_size, G_TYPE_UINT);
+ g_object_get_property (G_OBJECT(window->priv->settings_manager), "image-quality", &max_size);
+
+ preload_iter = rstto_image_list_iter_clone (window->priv->iter);
+
+ rstto_image_list_iter_next (preload_iter);
+ rstto_image_load (rstto_image_list_iter_get_image (preload_iter), TRUE, g_value_get_uint (&max_size), TRUE, NULL);
+
+ g_value_reset(&max_size);
+ g_object_unref (preload_iter);
+ }
rstto_main_window_image_list_iter_changed (window);
}
else
diff --git a/src/preferences_dialog.c b/src/preferences_dialog.c
index 222399e..32f4345 100644
--- a/src/preferences_dialog.c
+++ b/src/preferences_dialog.c
@@ -45,7 +45,7 @@ cb_rstto_preferences_dialog_bgcolor_color_set (GtkColorButton *, gpointer);
static void
cb_rstto_preferences_dialog_cache_check_button_toggled (GtkToggleButton *, gpointer);
static void
-cb_rstto_preferences_dialog_cache_preload_hscale_value_changed (GtkRange *range,
+cb_rstto_preferences_dialog_cache_preload_check_button_toggled (GtkToggleButton *button,
gpointer user_data);
static void
cb_rstto_preferences_dialog_cache_spin_button_value_changed (GtkSpinButton *, gpointer);
@@ -143,8 +143,7 @@ struct _RsttoPreferencesDialogPriv
GtkWidget *cache_check_button;
GtkWidget *cache_alignment;
GtkWidget *cache_spin_button;
- GtkWidget *cache_preload_label;
- GtkWidget *cache_preload_hscale;
+ GtkWidget *cache_preload_check_button;
} cache_tab;
};
@@ -179,7 +178,7 @@ rstto_preferences_dialog_init(RsttoPreferencesDialog *dialog)
{
guint uint_image_quality;
guint uint_cache_size;
- guint uint_preload_images;
+ gboolean bool_preload_images;
gboolean bool_enable_cache;
gboolean bool_bgcolor_override;
gchar *scrollwheel_primary_action;
@@ -212,7 +211,7 @@ rstto_preferences_dialog_init(RsttoPreferencesDialog *dialog)
"image-quality", &uint_image_quality,
"cache-size", &uint_cache_size,
"show-preview", &bool_show_preview,
- "preload-images", &uint_preload_images,
+ "preload-images", &bool_preload_images,
"enable-cache", &bool_enable_cache,
"bgcolor-override", &bool_bgcolor_override,
"bgcolor", &bgcolor,
@@ -471,11 +470,7 @@ rstto_preferences_dialog_init(RsttoPreferencesDialog *dialog)
gtk_alignment_set_padding (GTK_ALIGNMENT (dialog->priv->cache_tab.cache_alignment), 0, 0, 20, 0);
dialog->priv->cache_tab.cache_spin_button = gtk_spin_button_new(GTK_ADJUSTMENT(cache_adjustment), 1.0, 0);
- dialog->priv->cache_tab.cache_preload_label = gtk_label_new (_("Preload images"));
- gtk_misc_set_alignment(GTK_MISC(dialog->priv->cache_tab.cache_preload_label), 0, 0.5);
- gtk_misc_set_padding(GTK_MISC(dialog->priv->cache_tab.cache_preload_label), 2, 2);
- dialog->priv->cache_tab.cache_preload_hscale = gtk_hscale_new_with_range(0, 50, 1);
- gtk_scale_set_value_pos (GTK_SCALE (dialog->priv->cache_tab.cache_preload_hscale), GTK_POS_LEFT);
+ dialog->priv->cache_tab.cache_preload_check_button = gtk_check_button_new_with_label (_("Enable preloading"));
gtk_box_pack_start (GTK_BOX (dialog->priv->cache_tab.cache_hbox),
dialog->priv->cache_tab.cache_size_label, FALSE, FALSE, 0);
@@ -494,9 +489,7 @@ rstto_preferences_dialog_init(RsttoPreferencesDialog *dialog)
gtk_box_pack_start (GTK_BOX (dialog->priv->cache_tab.cache_sub_vbox),
dialog->priv->cache_tab.cache_hbox, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (dialog->priv->cache_tab.cache_sub_vbox),
- dialog->priv->cache_tab.cache_preload_label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (dialog->priv->cache_tab.cache_sub_vbox),
- dialog->priv->cache_tab.cache_preload_hscale, FALSE, FALSE, 0);
+ dialog->priv->cache_tab.cache_preload_check_button, FALSE, FALSE, 0);
/* set current value */
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->cache_tab.cache_check_button),
@@ -504,9 +497,6 @@ rstto_preferences_dialog_init(RsttoPreferencesDialog *dialog)
gtk_widget_set_sensitive (GTK_WIDGET (dialog->priv->cache_tab.cache_sub_vbox),
bool_enable_cache);
- gtk_range_set_value ( GTK_RANGE(dialog->priv->cache_tab.cache_preload_hscale),
- uint_preload_images);
-
if (uint_cache_size < RSTTO_MIN_CACHE_SIZE)
{
gtk_adjustment_set_value (GTK_ADJUSTMENT (cache_adjustment), RSTTO_DEFAULT_CACHE_SIZE);
@@ -519,8 +509,8 @@ rstto_preferences_dialog_init(RsttoPreferencesDialog *dialog)
/* connect signals */
g_signal_connect (G_OBJECT (dialog->priv->cache_tab.cache_check_button),
"toggled", (GCallback)cb_rstto_preferences_dialog_cache_check_button_toggled, dialog);
- g_signal_connect (G_OBJECT (dialog->priv->cache_tab.cache_preload_hscale),
- "value-changed", (GCallback)cb_rstto_preferences_dialog_cache_preload_hscale_value_changed, dialog);
+ g_signal_connect (G_OBJECT (dialog->priv->cache_tab.cache_check_button),
+ "toggled", (GCallback)cb_rstto_preferences_dialog_cache_preload_check_button_toggled, dialog);
g_signal_connect (G_OBJECT (dialog->priv->cache_tab.cache_spin_button),
"value-changed", (GCallback)cb_rstto_preferences_dialog_cache_spin_button_value_changed, dialog);
@@ -613,17 +603,24 @@ cb_rstto_preferences_dialog_cache_check_button_toggled (GtkToggleButton *button,
}
static void
-cb_rstto_preferences_dialog_cache_preload_hscale_value_changed (GtkRange *range,
+cb_rstto_preferences_dialog_cache_preload_check_button_toggled (GtkToggleButton *button,
gpointer user_data)
{
RsttoPreferencesDialog *dialog = RSTTO_PREFERENCES_DIALOG (user_data);
GValue value = {0, };
- g_value_init (&value, G_TYPE_UINT);
-
- g_value_set_uint (&value, gtk_range_get_value (range));
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ if (gtk_toggle_button_get_active (button))
+ {
+ g_value_set_boolean (&value, TRUE);
+ }
+ else
+ {
+ g_value_set_boolean (&value, FALSE);
+ }
g_object_set_property (G_OBJECT (dialog->priv->settings), "preload-images", &value);
+
g_value_unset (&value);
}
diff --git a/src/settings.c b/src/settings.c
index 3a3d359..a602b97 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -115,7 +115,7 @@ struct _RsttoSettingsPriv
gboolean hide_thumbnailbar_fullscreen;
gboolean open_entire_folder;
gchar *navigationbar_position;
- guint preload_images;
+ gboolean preload_images;
gboolean enable_cache;
guint cache_size;
guint image_quality;
@@ -183,7 +183,7 @@ rstto_settings_init (GObject *object)
xfconf_g_property_bind (settings->priv->channel, "/window/bgcolor-override", G_TYPE_BOOLEAN, settings, "bgcolor-override");
xfconf_g_property_bind_gdkcolor (settings->priv->channel, "/window/bgcolor-fullscreen", settings, "bgcolor-fullscreen");
- xfconf_g_property_bind (settings->priv->channel, "/image/preload", G_TYPE_UINT, settings, "preload-images");
+ xfconf_g_property_bind (settings->priv->channel, "/image/preload", G_TYPE_BOOLEAN, settings, "preload-images");
xfconf_g_property_bind (settings->priv->channel, "/image/cache", G_TYPE_BOOLEAN, settings, "enable-cache");
xfconf_g_property_bind (settings->priv->channel, "/image/cache-size", G_TYPE_UINT, settings, "cache-size");
xfconf_g_property_bind (settings->priv->channel, "/image/quality", G_TYPE_UINT, settings, "image-quality");
@@ -292,13 +292,11 @@ rstto_settings_class_init (GObjectClass *object_class)
PROP_SHOW_PREVIEW,
pspec);
- pspec = g_param_spec_uint ("preload-images",
- "",
- "",
- 0,
- 50,
- 0,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boolean ("preload-images",
+ "",
+ "",
+ TRUE,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class,
PROP_PRELOAD_IMAGES,
pspec);
@@ -526,7 +524,7 @@ rstto_settings_set_property (GObject *object,
settings->priv->show_preview = g_value_get_boolean (value);
break;
case PROP_PRELOAD_IMAGES:
- settings->priv->preload_images = g_value_get_uint (value);
+ settings->priv->preload_images = g_value_get_boolean (value);
break;
case PROP_ENABLE_CACHE:
settings->priv->enable_cache = g_value_get_boolean (value);
@@ -620,7 +618,7 @@ rstto_settings_get_property (GObject *object,
g_value_set_boolean (value, settings->priv->show_preview);
break;
case PROP_PRELOAD_IMAGES:
- g_value_set_uint (value, settings->priv->preload_images);
+ g_value_set_boolean (value, settings->priv->preload_images);
break;
case PROP_ENABLE_CACHE:
g_value_set_boolean (value, settings->priv->enable_cache);
More information about the Xfce4-commits
mailing list