summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2004-11-28 04:38:18 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-11-28 04:38:18 +0000
commit2925aee8bebe3e3b8aadf5f407dfc61a0614467e (patch)
treed79a794a440b646e89a17d9563456867a4b42108
parentf2cc776cc02db0b6a9f7358bb9e743f6d13f9feb (diff)
downloadgtk+-2925aee8bebe3e3b8aadf5f407dfc61a0614467e.tar.gz
Implement keynav for the color picker (only on X11 currently, since GDK
2004-11-27 Matthias Clasen <mclasen@redhat.com> * gtk/gtkcolorsel.c (key_press): Implement keynav for the color picker (only on X11 currently, since GDK doesn't support pointer warping). Space and Return pick a color, Esc cancels the picking, arrow keys move the pointer by single pixels, Alt-arrow combinations move the pointer by 20 pixels. (#135385, Frances Keenan)
-rw-r--r--ChangeLog8
-rw-r--r--ChangeLog.pre-2-108
-rw-r--r--ChangeLog.pre-2-68
-rw-r--r--ChangeLog.pre-2-88
-rw-r--r--gtk/gtkcolorsel.c63
5 files changed, 92 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index bc1b7ede6a..6dd0a434c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2004-11-27 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkcolorsel.c (key_press): Implement keynav for the color
+ picker (only on X11 currently, since GDK doesn't support pointer
+ warping). Space and Return pick a color, Esc cancels the picking,
+ arrow keys move the pointer by single pixels, Alt-arrow combinations
+ move the pointer by 20 pixels. (#135385, Frances Keenan)
+
Sat Nov 27 15:18:14 2004 Manish Singh <yosh@gimp.org>
* contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index bc1b7ede6a..6dd0a434c4 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,11 @@
+2004-11-27 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkcolorsel.c (key_press): Implement keynav for the color
+ picker (only on X11 currently, since GDK doesn't support pointer
+ warping). Space and Return pick a color, Esc cancels the picking,
+ arrow keys move the pointer by single pixels, Alt-arrow combinations
+ move the pointer by 20 pixels. (#135385, Frances Keenan)
+
Sat Nov 27 15:18:14 2004 Manish Singh <yosh@gimp.org>
* contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index bc1b7ede6a..6dd0a434c4 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,11 @@
+2004-11-27 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkcolorsel.c (key_press): Implement keynav for the color
+ picker (only on X11 currently, since GDK doesn't support pointer
+ warping). Space and Return pick a color, Esc cancels the picking,
+ arrow keys move the pointer by single pixels, Alt-arrow combinations
+ move the pointer by 20 pixels. (#135385, Frances Keenan)
+
Sat Nov 27 15:18:14 2004 Manish Singh <yosh@gimp.org>
* contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index bc1b7ede6a..6dd0a434c4 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,11 @@
+2004-11-27 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkcolorsel.c (key_press): Implement keynav for the color
+ picker (only on X11 currently, since GDK doesn't support pointer
+ warping). Space and Return pick a color, Esc cancels the picking,
+ arrow keys move the pointer by single pixels, Alt-arrow combinations
+ move the pointer by 20 pixels. (#135385, Frances Keenan)
+
Sat Nov 27 15:18:14 2004 Manish Singh <yosh@gimp.org>
* contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
diff --git a/gtk/gtkcolorsel.c b/gtk/gtkcolorsel.c
index d1619a5364..ac171a9eeb 100644
--- a/gtk/gtkcolorsel.c
+++ b/gtk/gtkcolorsel.c
@@ -63,6 +63,11 @@
#include <string.h>
+#ifdef GDK_WINDOWING_X11
+#include <X11/Xlib.h>
+#include "x11/gdkx.h"
+#endif
+
/* Number of elements in the custom palatte */
#define GTK_CUSTOM_PALETTE_WIDTH 10
#define GTK_CUSTOM_PALETTE_HEIGHT 2
@@ -1267,15 +1272,36 @@ static gboolean mouse_press (GtkWidget *invisible,
GdkEventButton *event,
gpointer data);
+#define BIG_STEP 20
+
static gboolean
key_press (GtkWidget *invisible,
GdkEventKey *event,
gpointer data)
{
- if (event->keyval == GDK_Escape)
+ GdkDisplay *display = gtk_widget_get_display (invisible);
+ guint state = event->state & gtk_accelerator_get_default_mod_mask ();
+ gint x, y;
+ gint dx, dy;
+
+ dx = 0;
+ dy = 0;
+
+ switch (event->keyval)
{
+ case GDK_space:
+ case GDK_Return:
+ case GDK_KP_Enter:
+ case GDK_KP_Space:
+ gdk_display_get_pointer (display,
+ NULL, &x, &y, NULL);
+ grab_color_at_mouse (gdk_event_get_screen ((GdkEvent *)event),
+ x, y, data);
+ /* fall through */
+
+ case GDK_Escape:
shutdown_eyedropper (data);
-
+
g_signal_handlers_disconnect_by_func (invisible,
mouse_press,
data);
@@ -1284,9 +1310,40 @@ key_press (GtkWidget *invisible,
data);
return TRUE;
+
+#ifdef GDK_WINDOWING_X11
+ case GDK_Up:
+ case GDK_KP_Up:
+ dy = state == GDK_MOD1_MASK ? -BIG_STEP : -1;
+ break;
+
+ case GDK_Down:
+ case GDK_KP_Down:
+ dy = state == GDK_MOD1_MASK ? BIG_STEP : 1;
+ break;
+
+ case GDK_Left:
+ case GDK_KP_Left:
+ dx = state == GDK_MOD1_MASK ? -BIG_STEP : -1;
+ break;
+
+ case GDK_Right:
+ case GDK_KP_Right:
+ dx = state == GDK_MOD1_MASK ? BIG_STEP : 1;
+ break;
+#endif
+
+ default:
+ return FALSE;
}
- return FALSE;
+#ifdef GDK_WINDOWING_X11
+ XWarpPointer (gdk_x11_display_get_xdisplay (display),
+ None, None, 0, 0, 0, 0, dx, dy);
+#endif
+
+ return TRUE;
+
}
static gboolean