diff -urp overlay-scrollbar_default-r379.orig/os/os-bar.c overlay-scrollbar_default-r379/os/os-bar.c --- overlay-scrollbar_default-r379.orig/os/os-bar.c 2013-10-03 00:04:49.000000000 +0200 +++ overlay-scrollbar_default-r379/os/os-bar.c 2013-10-03 00:34:14.187729456 +0200 @@ -480,8 +480,10 @@ os_bar_connect (OsBar *bar, * @bar: a #OsBar * * Hides the #OsBar. + * + * Returns: FALSE. **/ -void +gboolean os_bar_hide (OsBar *bar) { OsBarPrivate *priv; @@ -493,7 +495,7 @@ os_bar_hide (OsBar *bar) priv->visible = FALSE; if (priv->parent == NULL) - return; + return FALSE; /* Immediately hide, then stop animations. */ gdk_window_hide (priv->tail_window); @@ -501,6 +503,7 @@ os_bar_hide (OsBar *bar) os_animation_stop (priv->tail_animation, retract_tail_stop_cb); os_animation_stop (priv->state_animation, change_state_stop_cb); + return FALSE; } /* Move a mask on the bar_window, fake movement. */ @@ -814,8 +817,10 @@ os_bar_set_parent (OsBar *bar, * @bar: a #OsBar * * Shows @bar. + * + * Returns: FALSE. **/ -void +gboolean os_bar_show (OsBar *bar) { OsBarPrivate *priv; @@ -827,9 +832,10 @@ os_bar_show (OsBar *bar) priv->visible = TRUE; if (priv->parent == NULL) - return; + return FALSE; gdk_window_show (priv->bar_window); + return FALSE; } /** diff -urp overlay-scrollbar_default-r379.orig/os/os-private.h overlay-scrollbar_default-r379/os/os-private.h --- overlay-scrollbar_default-r379.orig/os/os-private.h 2013-10-03 00:04:49.000000000 +0200 +++ overlay-scrollbar_default-r379/os/os-private.h 2013-10-03 00:15:55.379683902 +0200 @@ -188,7 +188,7 @@ GType os_bar_get_type (void) G_GNU OsBar* os_bar_new (void); -void os_bar_hide (OsBar *bar); +gboolean os_bar_hide (OsBar *bar); void os_bar_connect (OsBar *bar, GdkRectangle mask); @@ -207,7 +207,7 @@ void os_bar_set_detached (OsBar *ba void os_bar_set_parent (OsBar *bar, GtkWidget *parent); -void os_bar_show (OsBar *bar); +gboolean os_bar_show (OsBar *bar); void os_bar_size_allocate (OsBar *bar, GdkRectangle rectangle); diff -urp overlay-scrollbar_default-r379.orig/os/os-scrollbar.c overlay-scrollbar_default-r379/os/os-scrollbar.c --- overlay-scrollbar_default-r379.orig/os/os-scrollbar.c 2013-10-03 00:04:49.000000000 +0200 +++ overlay-scrollbar_default-r379/os/os-scrollbar.c 2013-10-03 00:41:10.567746718 +0200 @@ -2528,7 +2528,6 @@ thumb_unmap_cb (GtkWidget *widget, priv->event = OS_EVENT_NONE; priv->hidable_thumb = TRUE; - priv->state &= OS_STATE_FULLSIZE; /* Remove running hide timeout, if there is one. */ if (priv->source_hide_thumb_id != 0) @@ -3467,8 +3466,17 @@ hijacked_scrollbar_map (GtkWidget *widge } #endif - if (!(priv->state & OS_STATE_FULLSIZE)) - os_bar_show (priv->bar); + if (gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_lower (priv->adjustment) > + gtk_adjustment_get_page_size (priv->adjustment)) + { + priv->state &= ~(OS_STATE_FULLSIZE); + g_idle_add((GSourceFunc) &os_bar_show, (gpointer) priv->bar); + } + else + { + priv->state |= OS_STATE_FULLSIZE; + g_idle_add((GSourceFunc) &os_bar_hide, (gpointer) priv->bar); + } if (!is_insensitive (scrollbar)) {