rem: e->y = ((10 + (80 - v * 0.8)) / SCALE_SIZE) * button->scale->allocation.height;
add: m = button->scale->allocation.height - GTK_RANGE (button->scale)->min_slider_size; e->y = ((1.0 - v) * m) + GTK_RANGE (button->scale)->min_slider_size / 2;
context: totem_volume_button_press (GtkWidget      * widget,			   GdkEventButton * event){  TotemVolumeButton *button = TOTEM_VOLUME_BUTTON (widget);  GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (button->scale));  gint x, y, m, dx, dy, sx, sy, ystartoff;  float v;  GdkEventButton *e;  /* position roughly */  gdk_window_get_origin (widget->window, &x, &y);  gtk_window_move (GTK_WINDOW (button->dock), x, y - 50);  gtk_widget_show_all (button->dock);  gdk_window_get_origin (button->dock->window, &dx, &dy);  dy += button->dock->allocation.y;  gdk_window_get_origin (button->scale->window, &sx, &sy);  sy += button->scale->allocation.y;  ystartoff = sy - dy;  button->timeout = TRUE;  /* position (needs widget to be shown already) */  v = lrintf (totem_volume_button_get_value (button));  x += widget->allocation.x;  x += (widget->allocation.width - button->dock->allocation.width) / 2;  y += widget->allocation.y;  y -= ystartoff;  m = button->scale->allocation.height - widget->allocation.height;  y -= m;  y += m * v / adj->upper;  gtk_window_move (GTK_WINDOW (button->dock), x, y);  gdk_window_get_origin (button->scale->window, &sx, &sy);  GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event);  /* grab focus */  gtk_widget_grab_focus (button->dock);  gtk_grab_add (button->dock);  gdk_pointer_grab (button->dock->window, TRUE,      GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |      GDK_POINTER_MOTION_MASK, NULL, NULL, GDK_CURRENT_TIME);  gdk_keyboard_grab (button->dock->window, TRUE, GDK_CURRENT_TIME);  /* forward event to the slider */  e = (GdkEventButton *) gdk_event_copy ((GdkEvent *) event);  e->window = button->scale->window;  e->x = button->scale->allocation.width / 2;  /* FIXME: those magic numbers are numbers in the GtkScaleClass */  e->y = ((10 + (80 - v * 0.8)) / SCALE_SIZE) *      button->scale->allocation.height;  gtk_widget_event (button->scale, (GdkEvent *) e);  e->window = event->window;  gdk_event_free ((GdkEvent *) e);  button->pop_time = event->time;  return TRUE;}