[gthumb] image viewer: hide the overview after a delay
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] image viewer: hide the overview after a delay
- Date: Sat, 9 Nov 2013 20:11:02 +0000 (UTC)
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]