[Xfce4-commits] <ristretto:master> Add 'iter_has_next' and 'iter_has_previous' functions,
Stephan Arts
noreply at xfce.org
Sun Nov 13 23:18:10 CET 2011
Updating branch refs/heads/master
to 654fefa69e04d64279f738fc4e3cff45f004242b (commit)
from 06f6a1867ddb20de0af2dea3a993c7f793999250 (commit)
commit 654fefa69e04d64279f738fc4e3cff45f004242b
Author: Stephan Arts <stephan at xfce.org>
Date: Sun Nov 13 22:52:13 2011 +0100
Add 'iter_has_next' and 'iter_has_previous' functions,
- iter_has_next and iter_has_previous can be used to disable the
sensitivity of the 'back' button on the first image.
- idem for the 'forward' button on the last image.
src/image_list.c | 126 +++++++++++++++++++++++++++++++++++++++++++++++-----
src/image_list.h | 5 ++
src/main_window.c | 44 +++++++++++++++++--
3 files changed, 158 insertions(+), 17 deletions(-)
diff --git a/src/image_list.c b/src/image_list.c
index 2a5eb89..db0b521 100644
--- a/src/image_list.c
+++ b/src/image_list.c
@@ -56,6 +56,12 @@ static void
rstto_image_list_iter_dispose(GObject *object);
static void
+cb_rstto_wrap_images_changed (
+ GObject *settings,
+ GParamSpec *pspec,
+ gpointer user_data);
+
+static void
rstto_image_list_monitor_dir (
RsttoImageList *image_list,
GFile *dir );
@@ -117,12 +123,15 @@ struct _RsttoImageListIterPriv
struct _RsttoImageListPriv
{
GFileMonitor *monitor;
+ RsttoSettings *settings;
GList *images;
gint n_images;
GSList *iterators;
GCompareFunc cb_rstto_image_list_compare_func;
+
+ gboolean wrap_images;
};
static gint rstto_image_list_signals[RSTTO_IMAGE_LIST_SIGNAL_COUNT];
@@ -159,7 +168,20 @@ rstto_image_list_init(RsttoImageList *image_list)
{
image_list->priv = g_new0 (RsttoImageListPriv, 1);
+ image_list->priv->settings = rstto_settings_new ();
+
image_list->priv->cb_rstto_image_list_compare_func = (GCompareFunc)cb_rstto_image_list_image_name_compare_func;
+
+ image_list->priv->wrap_images = rstto_settings_get_boolean_property (
+ image_list->priv->settings,
+ "wrap-images");
+
+ g_signal_connect (
+ G_OBJECT(image_list->priv->settings),
+ "notify::wrap-images",
+ G_CALLBACK (cb_rstto_wrap_images_changed),
+ image_list);
+
}
static void
@@ -210,7 +232,18 @@ rstto_image_list_class_init(RsttoImageListClass *nav_class)
static void
rstto_image_list_dispose(GObject *object)
{
- /*RsttoImageList *image_list = RSTTO_IMAGE_LIST(object);*/
+ RsttoImageList *image_list = RSTTO_IMAGE_LIST(object);
+ if (NULL != image_list->priv)
+ {
+ if (image_list->priv->settings)
+ {
+ g_object_unref (image_list->priv->settings);
+ image_list->priv->settings = NULL;
+ }
+
+ g_free (image_list->priv);
+ image_list->priv = NULL;
+ }
}
RsttoImageList *
@@ -640,7 +673,7 @@ iter_next (
gboolean sticky)
{
GList *position = NULL;
- RsttoSettings *settings = NULL;
+ RsttoImageList *image_list = iter->priv->image_list;
RsttoFile *file = iter->priv->file;
gboolean ret_val = FALSE;
@@ -664,9 +697,8 @@ iter_next (
}
else
{
- settings = rstto_settings_new();
- if (rstto_settings_get_boolean_property (settings, "wrap-images"))
+ if (TRUE == image_list->priv->wrap_images)
{
position = g_list_first (iter->priv->image_list->priv->images);
@@ -682,8 +714,6 @@ iter_next (
iter->priv->file = position->data;
else
iter->priv->file = NULL;
-
- g_object_unref (settings);
}
if (file != iter->priv->file)
@@ -700,13 +730,36 @@ rstto_image_list_iter_next (RsttoImageListIter *iter)
return iter_next (iter, TRUE);
}
+gboolean
+rstto_image_list_iter_has_next (RsttoImageListIter *iter)
+{
+ RsttoImageList *image_list = iter->priv->image_list;
+
+ if (image_list->priv->wrap_images)
+ {
+ return TRUE;
+ }
+ else
+ {
+ if (rstto_image_list_iter_get_position (iter) ==
+ (rstto_image_list_get_n_images (image_list) -1))
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+}
+
static gboolean
iter_previous (
RsttoImageListIter *iter,
gboolean sticky)
{
GList *position = NULL;
- RsttoSettings *settings = NULL;
+ RsttoImageList *image_list = iter->priv->image_list;
RsttoFile *file = iter->priv->file;
gboolean ret_val = FALSE;
@@ -727,19 +780,23 @@ iter_previous (
}
else
{
- settings = rstto_settings_new();
-
- if (rstto_settings_get_boolean_property (settings, "wrap-images"))
+ if (TRUE == image_list->priv->wrap_images)
+ {
position = g_list_last (iter->priv->image_list->priv->images);
+ }
else
+ {
position = g_list_first (iter->priv->image_list->priv->images);
+ }
if (position)
+ {
iter->priv->file = position->data;
+ }
else
+ {
iter->priv->file = NULL;
-
- g_object_unref (settings);
+ }
}
if (file != iter->priv->file)
@@ -750,13 +807,36 @@ iter_previous (
return ret_val;
}
-
gboolean
rstto_image_list_iter_previous (RsttoImageListIter *iter)
{
return iter_previous (iter, TRUE);
}
+
+gboolean
+rstto_image_list_iter_has_previous (RsttoImageListIter *iter)
+{
+ RsttoImageList *image_list = iter->priv->image_list;
+
+ if (image_list->priv->wrap_images)
+ {
+ return TRUE;
+ }
+ else
+ {
+ if (rstto_image_list_iter_get_position (iter) == 0)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+}
+
+
RsttoImageListIter *
rstto_image_list_iter_clone (RsttoImageListIter *iter)
{
@@ -926,3 +1006,23 @@ rstto_image_list_iter_get_sticky (
{
return iter->priv->sticky;
}
+
+static void
+cb_rstto_wrap_images_changed (
+ GObject *settings,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GValue val_wrap_images = { 0, };
+
+ RsttoImageList *image_list = RSTTO_IMAGE_LIST (user_data);
+
+ g_value_init (&val_wrap_images, G_TYPE_BOOLEAN);
+
+ g_object_get_property (
+ settings,
+ "wrap-images",
+ &val_wrap_images);
+
+ image_list->priv->wrap_images = g_value_get_boolean (&val_wrap_images);
+}
diff --git a/src/image_list.h b/src/image_list.h
index e168629..4abb367 100644
--- a/src/image_list.h
+++ b/src/image_list.h
@@ -129,6 +129,11 @@ rstto_image_list_iter_previous (RsttoImageListIter *iter);
gboolean
rstto_image_list_iter_next (RsttoImageListIter *iter);
+gboolean
+rstto_image_list_iter_has_previous (RsttoImageListIter *iter);
+gboolean
+rstto_image_list_iter_has_next (RsttoImageListIter *iter);
+
gint
rstto_image_list_iter_get_position (RsttoImageListIter *iter);
void
diff --git a/src/main_window.c b/src/main_window.c
index ad19462..e95f37d 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -248,6 +248,11 @@ cb_rstto_merge_toolbars_changed (
GObject *settings,
GParamSpec *pspec,
gpointer user_data);
+static void
+cb_rstto_wrap_images_changed (
+ GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data);
@@ -723,6 +728,11 @@ rstto_main_window_init (RsttoMainWindow *window)
"notify::merge-toolbars",
G_CALLBACK (cb_rstto_merge_toolbars_changed),
window);
+ g_signal_connect (
+ G_OBJECT(window->priv->settings_manager),
+ "notify::wrap-images",
+ G_CALLBACK (cb_rstto_wrap_images_changed),
+ window);
}
@@ -1259,8 +1269,26 @@ rstto_main_window_update_buttons (RsttoMainWindow *window)
gtk_widget_set_sensitive ( gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/edit-menu/delete"), TRUE);
/* Go Menu */
- gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/forward"), TRUE);
- gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/back"), TRUE);
+ if (rstto_image_list_iter_has_next (window->priv->iter))
+ {
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/forward"), TRUE);
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/forward"), TRUE);
+ }
+ else
+ {
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/forward"), FALSE);
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/forward"), FALSE);
+ }
+ if (rstto_image_list_iter_has_previous (window->priv->iter))
+ {
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/back"), TRUE);
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/back"), TRUE);
+ }
+ else
+ {
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/back"), FALSE);
+ gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/back"), FALSE);
+ }
gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/first"), TRUE);
gtk_widget_set_sensitive (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/main-menu/go-menu/last"), TRUE);
@@ -1280,8 +1308,6 @@ rstto_main_window_update_buttons (RsttoMainWindow *window)
gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/save-copy"), TRUE);
gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/close"), TRUE);
gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/delete"), TRUE);
- gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/forward"), TRUE);
- gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/back"), TRUE);
gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/zoom-in"), TRUE);
gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/zoom-out"), TRUE);
gtk_widget_set_sensitive (gtk_ui_manager_get_widget (window->priv->ui_manager, "/file-toolbar/zoom-fit"), TRUE);
@@ -2980,3 +3006,13 @@ cb_rstto_merge_toolbars_changed (
RsttoMainWindow *window = RSTTO_MAIN_WINDOW (user_data);
rstto_main_window_update_buttons (window);
}
+
+static void
+cb_rstto_wrap_images_changed (
+ GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ RsttoMainWindow *window = RSTTO_MAIN_WINDOW (user_data);
+ rstto_main_window_update_buttons (window);
+}
More information about the Xfce4-commits
mailing list