[gthumb] image viewer: hide the overview after a delay



commit de3b46bbc8e6cdc2ce3444dee215eb0b46a009ee
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Tue Nov 5 17:54:43 2013 +0100

    image viewer: hide the overview after a delay

 extensions/image_viewer/gth-image-viewer-page.c |   59 +++++++++++++++++++----
 1 files changed, 50 insertions(+), 9 deletions(-)
---
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index f743cdc..1399d74 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -29,6 +29,7 @@
 
 
 #define UPDATE_QUALITY_DELAY 500
+#define UPDATE_VISIBILITY_DELAY 100
 #define N_HEADER_BAR_BUTTONS 2
 
 
@@ -86,6 +87,7 @@ struct _GthImageViewerPagePrivate {
        GFile             *last_loaded;
        gboolean           can_paste;
        guint              update_quality_id;
+       guint              update_visibility_id;
        GtkWidget         *buttons[N_HEADER_BAR_BUTTONS];
        gboolean           pointer_on_viewer;
        gboolean           pointer_on_overview;
@@ -327,22 +329,42 @@ update_image_quality_if_required (GthImageViewerPage *self)
        if ((image != NULL) && (gth_image_get_is_zoomable (image) || gth_image_get_is_animation (image)))
                return;
 
-       if (self->priv->update_quality_event != 0) {
-               g_source_remove (self->priv->update_quality_event);
-               self->priv->update_quality_event = 0;
+       if (self->priv->update_quality_id != 0) {
+               g_source_remove (self->priv->update_quality_id);
+               self->priv->update_quality_id = 0;
        }
 
-       self->priv->update_quality_event = g_timeout_add (UPDATE_QUALITY_DELAY,
-                                                         update_quality_cb,
-                                                         self);
+       self->priv->update_quality_id = g_timeout_add (UPDATE_QUALITY_DELAY,
+                                                      update_quality_cb,
+                                                      self);
+}
+
+
+static gboolean
+update_visibility_cb (gpointer user_data)
+{
+       GthImageViewerPage *self = user_data;
+       gboolean            visible;
+
+       if (self->priv->update_visibility_id != 0) {
+               g_source_remove (self->priv->update_visibility_id);
+               self->priv->update_visibility_id = 0;
+       }
+
+       visible = self->priv->pointer_on_overview || (self->priv->pointer_on_viewer && 
gth_image_viewer_has_scrollbars (GTH_IMAGE_VIEWER (self->priv->viewer)));
+       gtk_widget_set_visible (self->priv->overview, TRUE);
+       gtk_revealer_set_reveal_child (GTK_REVEALER (self->priv->overview_revealer), visible);
+
+       return FALSE;
 }
 
 
 static void
 update_overview_visibility (GthImageViewerPage *self)
 {
-       gtk_revealer_set_reveal_child (GTK_REVEALER (self->priv->overview_revealer),
-                                      self->priv->pointer_on_overview || (self->priv->pointer_on_viewer && 
gth_image_viewer_has_scrollbars (GTH_IMAGE_VIEWER (self->priv->viewer))));
+       if (self->priv->update_visibility_id != 0)
+               g_source_remove (self->priv->update_visibility_id);
+       self->priv->update_visibility_id = g_timeout_add (UPDATE_VISIBILITY_DELAY, update_visibility_cb, 
self);
 }
 
 
@@ -736,6 +758,20 @@ image_navigator_get_child_position_cb      (GtkOverlay   *overlay,
 
 
 static void
+overview_revealer_notify_child_revealed_cb (GObject    *gobject,
+                                           GParamSpec *pspec,
+                                           gpointer    user_data)
+{
+       GthImageViewerPage *self = user_data;
+       gboolean            visible;
+
+       visible = gtk_revealer_get_child_revealed (GTK_REVEALER (self->priv->overview_revealer));
+       if (! visible)
+               gtk_widget_hide (self->priv->overview);
+}
+
+
+static void
 gth_image_viewer_page_real_activate (GthViewerPage *base,
                                     GthBrowser    *browser)
 {
@@ -830,9 +866,13 @@ gth_image_viewer_page_real_activate (GthViewerPage *base,
        gtk_widget_show (self->priv->overview_revealer);
        gtk_overlay_add_overlay (GTK_OVERLAY (self->priv->image_navigator), self->priv->overview_revealer);
 
+       g_signal_connect (G_OBJECT (self->priv->overview_revealer),
+                         "notify::child-revealed",
+                         G_CALLBACK (overview_revealer_notify_child_revealed_cb),
+                         self);
+
        self->priv->overview = gth_image_overview_new (GTH_IMAGE_VIEWER (self->priv->viewer));
        gtk_widget_add_events (self->priv->overview, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
-       gtk_widget_show (self->priv->overview);
        gtk_container_add (GTK_CONTAINER (self->priv->overview_revealer), self->priv->overview);
 
        g_signal_connect_after (G_OBJECT (self->priv->overview),
@@ -1563,6 +1603,7 @@ gth_image_viewer_page_init (GthImageViewerPage *self)
        self->priv->loading_image = FALSE;
        self->priv->can_paste = FALSE;
        self->priv->update_quality_id = 0;
+       self->priv->update_visibility_id = 0;
 }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]