Index: gtkscalebutton.c
===================================================================
--- gtkscalebutton.c	(revision 19708)
+++ gtkscalebutton.c	(working copy)
@@ -726,7 +726,9 @@
   gdouble v;
   GdkDisplay *display;
   GdkScreen *screen;
+  gboolean is_moved;
 
+  is_moved = FALSE;
   button = GTK_SCALE_BUTTON (widget);
   priv = button->priv;
   adj = gtk_range_get_adjustment (GTK_RANGE (priv->scale));
@@ -772,16 +774,25 @@
 						 button_event->y_root);
       gdk_screen_get_monitor_geometry (screen, monitor, &rect);
 
+      /* Move the dock, but set is_moved so we
+       * don't forward the first click later on,
+       * as it could make the scale go to the bottom */
       y += button_event->y;
-      if (y < rect.y)
+      if (y < rect.y) {
 	y = rect.y;
-      else if (y + d->allocation.height > rect.height + rect.y)
+	is_moved = TRUE;
+      } else if (y + d->allocation.height > rect.height + rect.y) {
 	y = rect.y + rect.height - d->allocation.height;
+	is_moved = TRUE;
+      }
 
-      if (x < rect.x)
+      if (x < rect.x) {
 	x = rect.x;
-      else if (x + d->allocation.width > rect.width + rect.x)
+	is_moved = TRUE;
+      } else if (x + d->allocation.width > rect.width + rect.x) {
 	x = rect.x + rect.width - d->allocation.width;
+	is_moved = TRUE;
+      }
     }
 
   gtk_window_move (GTK_WINDOW (priv->dock), x, y);
@@ -812,7 +823,7 @@
 
   gtk_widget_grab_focus (priv->dock);
 
-  if (event->type == GDK_BUTTON_PRESS)
+  if (event->type == GDK_BUTTON_PRESS && !is_moved)
     {
       GdkEventButton *e;
       GdkEventButton *button_event = (GdkEventButton *) event;
