diff options
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 19 | ||||
-rw-r--r-- | gtk/gtkcalendar.c | 23 | ||||
-rw-r--r-- | gtk/gtknotebook.c | 32 | ||||
-rw-r--r-- | gtk/gtkpathbar.c | 19 | ||||
-rw-r--r-- | gtk/gtkrange.c | 34 | ||||
-rw-r--r-- | gtk/gtksettings.c | 26 | ||||
-rw-r--r-- | gtk/gtkspinbutton.c | 28 |
8 files changed, 152 insertions, 48 deletions
@@ -1,3 +1,22 @@ +2005-11-22 Michael Natterer <mitch@imendio.com> + + Made button-press timeouts which work like key repeat timeouts + configurable. Addresses bug #142582: + + * gtk/gtksettings.c: added properties "gtk-timeout-initial" and + "gtk-timeout-repeat" which defalt to 200/20 (ms). + + Use the values from GtkSettings instead of hardcoding them + (the repeat value is either taken as-is for fast repeat or + multiplied by 5 for slow repeat). Changed all places to use these + two standard initial/repeat timings: + + * gtk/gtkcalendar.c (unchanged 200/20) + * gtk/gtknotebook.c (unchanged 200/100) + * gtk/gtkpathbar.c (changed from 300/150 to 200/100) + * gtk/gtkrange.c (changed from 250/100 to 200/100) + * gtk/gtkspinbutton.c (unchanged 200/20) + 2005-11-21 Anders Carlsson <andersca@imendio.com> * configure.in: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 9510701372..e212842205 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,22 @@ +2005-11-22 Michael Natterer <mitch@imendio.com> + + Made button-press timeouts which work like key repeat timeouts + configurable. Addresses bug #142582: + + * gtk/gtksettings.c: added properties "gtk-timeout-initial" and + "gtk-timeout-repeat" which defalt to 200/20 (ms). + + Use the values from GtkSettings instead of hardcoding them + (the repeat value is either taken as-is for fast repeat or + multiplied by 5 for slow repeat). Changed all places to use these + two standard initial/repeat timings: + + * gtk/gtkcalendar.c (unchanged 200/20) + * gtk/gtknotebook.c (unchanged 200/100) + * gtk/gtkpathbar.c (changed from 300/150 to 200/100) + * gtk/gtkrange.c (changed from 250/100 to 200/100) + * gtk/gtkspinbutton.c (unchanged 200/20) + 2005-11-21 Anders Carlsson <andersca@imendio.com> * configure.in: diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index d8daeaa574..34d76269e1 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -2286,9 +2286,6 @@ gtk_calendar_expose (GtkWidget *widget, * Mouse handling * ****************************************/ -#define CALENDAR_INITIAL_TIMER_DELAY 200 -#define CALENDAR_TIMER_DELAY 20 - static void calendar_arrow_action (GtkCalendar *calendar, guint arrow) @@ -2327,10 +2324,16 @@ calendar_timer (gpointer data) if (priv->need_timer) { + GtkSettings *settings; + guint timeout; + + settings = gtk_widget_get_settings (GTK_WIDGET (calendar)); + g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); + priv->need_timer = FALSE; - priv->timer = g_timeout_add (CALENDAR_TIMER_DELAY, - (GSourceFunc) calendar_timer, - (gpointer) calendar); + priv->timer = g_timeout_add (timeout, + (GSourceFunc) calendar_timer, + (gpointer) calendar); } else retval = TRUE; @@ -2351,8 +2354,14 @@ calendar_start_spinning (GtkCalendar *calendar, if (!priv->timer) { + GtkSettings *settings; + guint timeout; + + settings = gtk_widget_get_settings (GTK_WIDGET (calendar)); + g_object_get (settings, "gtk-timeout-initial", &timeout, NULL); + priv->need_timer = TRUE; - priv->timer = g_timeout_add (CALENDAR_INITIAL_TIMER_DELAY, + priv->timer = g_timeout_add (timeout, calendar_timer, calendar); } diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index ea7b12f549..af31a0fb92 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -39,12 +39,11 @@ #include "gtkalias.h" -#define TAB_OVERLAP 2 -#define TAB_CURVATURE 1 -#define ARROW_SIZE 12 -#define ARROW_SPACING 0 -#define NOTEBOOK_INIT_SCROLL_DELAY (200) -#define NOTEBOOK_SCROLL_DELAY (100) +#define TAB_OVERLAP 2 +#define TAB_CURVATURE 1 +#define ARROW_SIZE 12 +#define ARROW_SPACING 0 +#define SCROLL_DELAY_FACTOR 5 enum { @@ -1715,8 +1714,13 @@ gtk_notebook_arrow_button_press (GtkNotebook *notebook, if (!notebook->timer) { - notebook->timer = g_timeout_add (NOTEBOOK_INIT_SCROLL_DELAY, - (GSourceFunc) gtk_notebook_timer, + GtkSettings *settings = gtk_widget_get_settings (widget); + guint timeout; + + g_object_get (settings, "gtk-timeout-initial", &timeout, NULL); + + notebook->timer = g_timeout_add (timeout, + (GSourceFunc) gtk_notebook_timer, (gpointer) notebook); notebook->need_timer = TRUE; } @@ -2584,11 +2588,17 @@ gtk_notebook_timer (GtkNotebook *notebook) { gtk_notebook_do_arrow (notebook, notebook->click_child); - if (notebook->need_timer) + if (notebook->need_timer) { + GtkSettings *settings; + guint timeout; + + settings = gtk_widget_get_settings (GTK_WIDGET (notebook)); + g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); + notebook->need_timer = FALSE; - notebook->timer = g_timeout_add (NOTEBOOK_SCROLL_DELAY, - (GSourceFunc) gtk_notebook_timer, + notebook->timer = g_timeout_add (timeout * SCROLL_DELAY_FACTOR, + (GSourceFunc) gtk_notebook_timer, (gpointer) notebook); } else diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index ce13d70169..ec62d32d35 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -48,8 +48,7 @@ typedef enum { #define BUTTON_DATA(x) ((ButtonData *)(x)) -#define SCROLL_TIMEOUT 150 -#define INITIAL_SCROLL_TIMEOUT 300 +#define SCROLL_DELAY_FACTOR 5 static guint path_bar_signals [LAST_SIGNAL] = { 0 }; @@ -745,16 +744,19 @@ gtk_path_bar_scroll_timeout (GtkPathBar *path_bar) if (path_bar->need_timer) { + GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (path_bar)); + guint timeout; + + g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); + path_bar->need_timer = FALSE; - path_bar->timer = g_timeout_add (SCROLL_TIMEOUT, + path_bar->timer = g_timeout_add (timeout * SCROLL_DELAY_FACTOR, (GSourceFunc)gtk_path_bar_scroll_timeout, path_bar); - } else retval = TRUE; - } GDK_THREADS_LEAVE (); @@ -798,8 +800,13 @@ gtk_path_bar_slider_button_press (GtkWidget *widget, if (!path_bar->timer) { + GtkSettings *settings = gtk_widget_get_settings (widget); + guint timeout; + + g_object_get (settings, "gtk-timeout-initial", &timeout, NULL); + path_bar->need_timer = TRUE; - path_bar->timer = g_timeout_add (INITIAL_SCROLL_TIMEOUT, + path_bar->timer = g_timeout_add (timeout, (GSourceFunc)gtk_path_bar_scroll_timeout, path_bar); } diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index f9c62932a5..f8e409899b 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -37,9 +37,8 @@ #include "gtkprivate.h" #include "gtkalias.h" -#define SCROLL_INITIAL_DELAY 250 /* must hold button this long before ... */ -#define SCROLL_LATER_DELAY 100 /* ... it starts repeating at this rate */ -#define UPDATE_DELAY 300 /* Delay for queued update */ +#define SCROLL_DELAY_FACTOR 5 /* Scroll repeat multiplier */ +#define UPDATE_DELAY 300 /* Delay for queued update */ enum { PROP_0, @@ -2693,14 +2692,18 @@ second_timeout (gpointer data) static gboolean initial_timeout (gpointer data) { - GtkRange *range; + GtkRange *range; + GtkSettings *settings; + guint timeout; GDK_THREADS_ENTER (); + settings = gtk_widget_get_settings (GTK_WIDGET (data)); + g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); + range = GTK_RANGE (data); - range->timer->timeout_id = - g_timeout_add (SCROLL_LATER_DELAY, - second_timeout, - range); + range->timer->timeout_id = g_timeout_add (timeout * SCROLL_DELAY_FACTOR, + second_timeout, + range); GDK_THREADS_LEAVE (); /* remove self */ @@ -2711,15 +2714,20 @@ static void gtk_range_add_step_timer (GtkRange *range, GtkScrollType step) { + GtkSettings *settings; + guint timeout; + g_return_if_fail (range->timer == NULL); g_return_if_fail (step != GTK_SCROLL_NONE); - + + settings = gtk_widget_get_settings (GTK_WIDGET (range)); + g_object_get (settings, "gtk-timeout-initial", &timeout, NULL); + range->timer = g_new (GtkRangeStepTimer, 1); - range->timer->timeout_id = - g_timeout_add (SCROLL_INITIAL_DELAY, - initial_timeout, - range); + range->timer->timeout_id = g_timeout_add (timeout, + initial_timeout, + range); range->timer->step = step; gtk_range_scroll (range, range->timer->step); diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 9daa41f4e4..4193eadca0 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -32,6 +32,9 @@ #include "x11/gdkx.h" #endif +#define DEFAULT_TIMEOUT_INITIAL 200 +#define DEFAULT_TIMEOUT_REPEAT 20 + typedef struct _GtkSettingsValuePrivate GtkSettingsValuePrivate; typedef enum @@ -79,7 +82,9 @@ enum { #endif PROP_ALTERNATIVE_BUTTON_ORDER, PROP_SHOW_INPUT_METHOD_MENU, - PROP_SHOW_UNICODE_MENU + PROP_SHOW_UNICODE_MENU, + PROP_TIMEOUT_INITIAL, + PROP_TIMEOUT_REPEAT }; @@ -406,6 +411,25 @@ gtk_settings_class_init (GtkSettingsClass *class) NULL); g_assert (result == PROP_SHOW_UNICODE_MENU); + result = settings_install_property_parser (class, + g_param_spec_int ("gtk-timeout-initial", + P_("Start timeout"), + P_("Starting value for timeouts, when button is pressed"), + 0, G_MAXINT, DEFAULT_TIMEOUT_INITIAL, + G_PARAM_READWRITE), + NULL); + + g_assert (result == PROP_TIMEOUT_INITIAL); + + result = settings_install_property_parser (class, + g_param_spec_int ("gtk-timeout-repeat", + P_("Repeat timeout"), + P_("Repeat value for timeouts, when button is pressed"), + 0, G_MAXINT, DEFAULT_TIMEOUT_REPEAT, + G_PARAM_READWRITE), + NULL); + + g_assert (result == PROP_TIMEOUT_REPEAT); } static void diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index 2c62c04aa2..18b1d29e2f 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -43,13 +43,11 @@ #include "gtkintl.h" #include "gtkalias.h" -#define MIN_SPIN_BUTTON_WIDTH 30 -#define SPIN_BUTTON_INITIAL_TIMER_DELAY 200 -#define SPIN_BUTTON_TIMER_DELAY 20 -#define MAX_TIMER_CALLS 5 -#define EPSILON 1e-10 -#define MAX_DIGITS 20 -#define MIN_ARROW_WIDTH 6 +#define MIN_SPIN_BUTTON_WIDTH 30 +#define MAX_TIMER_CALLS 5 +#define EPSILON 1e-10 +#define MAX_DIGITS 20 +#define MIN_ARROW_WIDTH 6 enum { PROP_0, @@ -1050,10 +1048,15 @@ start_spinning (GtkSpinButton *spin, if (!spin->timer) { + GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (spin)); + guint timeout; + + g_object_get (settings, "gtk-timeout-initial", &timeout, NULL); + spin->timer_step = step; spin->need_timer = TRUE; - spin->timer = g_timeout_add (SPIN_BUTTON_INITIAL_TIMER_DELAY, - (GSourceFunc) gtk_spin_button_timer, + spin->timer = g_timeout_add (timeout, + (GSourceFunc) gtk_spin_button_timer, (gpointer) spin); } gtk_spin_button_real_spin (spin, click_child == GTK_ARROW_UP ? step : -step); @@ -1203,8 +1206,13 @@ gtk_spin_button_timer (GtkSpinButton *spin_button) if (spin_button->need_timer) { + GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (spin_button)); + guint timeout; + + g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); + spin_button->need_timer = FALSE; - spin_button->timer = g_timeout_add (SPIN_BUTTON_TIMER_DELAY, + spin_button->timer = g_timeout_add (timeout, (GSourceFunc) gtk_spin_button_timer, (gpointer) spin_button); } |