forked from AuroraMiddleware/gtk
range: add a primary-button-warps-slider style property
Setting this to TRUE (it's FALSE by default) enables the behavior we have in GTK3 for scrollbars. https://bugzilla.gnome.org/show_bug.cgi?id=683279
This commit is contained in:
parent
88bfb0f59e
commit
cc7abf6a1c
@ -532,6 +532,12 @@ gtk_range_class_init (GtkRangeClass *class)
|
||||
G_MAXINT,
|
||||
0,
|
||||
GTK_PARAM_READABLE));
|
||||
gtk_widget_class_install_style_property (widget_class,
|
||||
g_param_spec_boolean ("primary-button-warps-slider",
|
||||
P_("Primary button warps slider"),
|
||||
P_("Whether a primary click on the trough should warp the slider into position"),
|
||||
FALSE,
|
||||
GTK_PARAM_READABLE));
|
||||
|
||||
/**
|
||||
* GtkRange:activate-slider:
|
||||
@ -2310,6 +2316,8 @@ gtk_range_button_press (GtkWidget *widget,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
GtkRange *range = GTK_RANGE (widget);
|
||||
gboolean primary_warps;
|
||||
gint page_increment_button, warp_button;
|
||||
|
||||
if (!gtk_widget_has_focus (widget))
|
||||
gtk_widget_grab_focus (widget);
|
||||
@ -2322,11 +2330,25 @@ gtk_range_button_press (GtkWidget *widget,
|
||||
range->layout->mouse_y = event->y;
|
||||
if (gtk_range_update_mouse_location (range))
|
||||
gtk_widget_queue_draw (widget);
|
||||
|
||||
if (range->layout->mouse_location == MOUSE_TROUGH &&
|
||||
event->button == 1)
|
||||
|
||||
gtk_widget_style_get (widget,
|
||||
"primary-button-warps-slider", &primary_warps,
|
||||
NULL);
|
||||
if (primary_warps)
|
||||
{
|
||||
/* button 1 steps by page increment, as with button 2 on a stepper
|
||||
warp_button = 1;
|
||||
page_increment_button = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
warp_button = 2;
|
||||
page_increment_button = 1;
|
||||
}
|
||||
|
||||
if (range->layout->mouse_location == MOUSE_TROUGH &&
|
||||
event->button == page_increment_button)
|
||||
{
|
||||
/* this button steps by page increment, as with button 2 on a stepper
|
||||
*/
|
||||
GtkScrollType scroll;
|
||||
gdouble click_value;
|
||||
@ -2369,18 +2391,17 @@ gtk_range_button_press (GtkWidget *widget,
|
||||
return TRUE;
|
||||
}
|
||||
else if ((range->layout->mouse_location == MOUSE_TROUGH &&
|
||||
event->button == 2) ||
|
||||
event->button == warp_button) ||
|
||||
range->layout->mouse_location == MOUSE_SLIDER)
|
||||
{
|
||||
gboolean need_value_update = FALSE;
|
||||
gboolean activate_slider;
|
||||
|
||||
/* Any button can be used to drag the slider, but you can start
|
||||
* dragging the slider with a trough click using button 2;
|
||||
* On button 2 press, we warp the slider to mouse position,
|
||||
* then begin the slider drag.
|
||||
* dragging the slider with a trough click using the warp button;
|
||||
* we warp the slider to mouse position, then begin the slider drag.
|
||||
*/
|
||||
if (event->button == 2)
|
||||
if (event->button == warp_button)
|
||||
{
|
||||
gdouble slider_low_value, slider_high_value, new_value;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user