summaryrefslogtreecommitdiff
path: root/gtk/gtkrange.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2006-03-11 05:47:09 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-03-11 05:47:09 +0000
commita1bf73c3f1e291e7825a7020fdbb899c7656fc91 (patch)
tree3ab94f55b9cba9a0018666777d2aea6ecab02021 /gtk/gtkrange.c
parent63985b018fd1d78672e76b7de57a1cd50dca3fa4 (diff)
downloadgtk+-a1bf73c3f1e291e7825a7020fdbb899c7656fc91.tar.gz
Allow to cancel a drag with ESC. (#58389, Søren Sandmann)
2006-03-11 Matthias Clasen <mclasen@redhat.com> * gtk/gtkrange.c (gtk_range_key_press): Allow to cancel a drag with ESC. (#58389, Søren Sandmann)
Diffstat (limited to 'gtk/gtkrange.c')
-rw-r--r--gtk/gtkrange.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index a5f5ca2fb6..b1dcc14491 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -28,6 +28,7 @@
#include <config.h>
#include <stdio.h>
#include <math.h>
+#include <gdk/gdkkeysyms.h>
#include "gtkintl.h"
#include "gtkmain.h"
#include "gtkmarshalers.h"
@@ -186,6 +187,8 @@ static gboolean gtk_range_real_change_value (GtkRange *range,
GtkScrollType scroll,
gdouble value);
static void gtk_range_update_value (GtkRange *range);
+static gboolean gtk_range_key_press (GtkWidget *range,
+ GdkEventKey *event);
static GtkWidgetClass *parent_class = NULL;
@@ -255,6 +258,7 @@ gtk_range_class_init (GtkRangeClass *class)
widget_class->grab_notify = gtk_range_grab_notify;
widget_class->state_changed = gtk_range_state_changed;
widget_class->style_set = gtk_range_style_set;
+ widget_class->key_press_event = gtk_range_key_press;
class->move_slider = gtk_range_move_slider;
class->change_value = gtk_range_real_change_value;
@@ -1410,6 +1414,26 @@ coord_to_value (GtkRange *range,
return value;
}
+static gboolean
+gtk_range_key_press (GtkWidget *widget,
+ GdkEventKey *event)
+{
+ GtkRange *range = (GtkRange *)widget;
+
+ if (event->keyval == GDK_Escape)
+ {
+ stop_scrolling (range);
+
+ update_slider_position (range,
+ range->slide_initial_coordinate,
+ range->slide_initial_coordinate);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static gint
gtk_range_button_press (GtkWidget *widget,
GdkEventButton *event)