aboutsummaryrefslogtreecommitdiff
path: root/gtk.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-04-27 17:44:30 +0000
committerSimon Tatham <anakin@pobox.com>2004-04-27 17:44:30 +0000
commitd99e217cfb12f40dd7dbc26146ef287f9f9020fc (patch)
tree531dd9d2e94f62ba974f8a9ddab2222c2eba2d8b /gtk.c
parent9867234e70002b8252a48c2bc023875ff87b8ca1 (diff)
downloadpuzzles-d99e217cfb12f40dd7dbc26146ef287f9f9020fc.zip
puzzles-d99e217cfb12f40dd7dbc26146ef287f9f9020fc.tar.gz
puzzles-d99e217cfb12f40dd7dbc26146ef287f9f9020fc.tar.bz2
puzzles-d99e217cfb12f40dd7dbc26146ef287f9f9020fc.tar.xz
Implemented Cube, in a sufficiently general way that it also handles
the tetrahedron, octahedron and icosahedron. [originally from svn r4151]
Diffstat (limited to 'gtk.c')
-rw-r--r--gtk.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/gtk.c b/gtk.c
index ec086fc..0d63e58 100644
--- a/gtk.c
+++ b/gtk.c
@@ -12,6 +12,7 @@
#include <stdarg.h>
#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
#include "puzzles.h"
@@ -135,12 +136,26 @@ static void destroy(GtkWidget *widget, gpointer data)
static gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
frontend *fe = (frontend *)data;
+ int keyval;
if (!fe->pixmap)
return TRUE;
- if (event->string[0] && !event->string[1] &&
- !midend_process_key(fe->me, 0, 0, event->string[0]))
+ if (event->string[0] && !event->string[1])
+ keyval = (unsigned char)event->string[0];
+ else if (event->keyval == GDK_Up || event->keyval == GDK_KP_Up)
+ keyval = CURSOR_UP;
+ else if (event->keyval == GDK_Down || event->keyval == GDK_KP_Down)
+ keyval = CURSOR_DOWN;
+ else if (event->keyval == GDK_Left || event->keyval == GDK_KP_Left)
+ keyval = CURSOR_LEFT;
+ else if (event->keyval == GDK_Right || event->keyval == GDK_KP_Right)
+ keyval = CURSOR_RIGHT;
+ else
+ keyval = -1;
+
+ if (keyval >= 0 &&
+ !midend_process_key(fe->me, 0, 0, keyval))
gtk_widget_destroy(fe->window);
return TRUE;