]> gitweb.factorcode.org Git - factor.git/commitdiff
ui.backend.gtk: on-key-press and on-key-release can be merged into one
authorBjörn Lindqvist <bjourne@gmail.com>
Tue, 20 Oct 2015 15:13:40 +0000 (17:13 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Thu, 22 Oct 2015 16:02:35 +0000 (18:02 +0200)
on-key-press/release handler

basis/ui/backend/gtk/gtk-tests.factor [new file with mode: 0644]
basis/ui/backend/gtk/gtk.factor

diff --git a/basis/ui/backend/gtk/gtk-tests.factor b/basis/ui/backend/gtk/gtk-tests.factor
new file mode 100644 (file)
index 0000000..ca7f20a
--- /dev/null
@@ -0,0 +1,41 @@
+USING: alien.syntax classes.struct gdk.ffi tools.test ui.backend.gtk
+ui.gestures ;
+IN: ui.backend.gtk.tests
+
+: gdk-key-release-event ( -- event )
+    S{ GdkEventKey
+       { type 9 }
+       { window ALIEN: 1672900 }
+       { send_event 0 }
+       { time 1332590199 }
+       { state 17 }
+       { keyval 72 }
+       { length 1 }
+       { string ALIEN: 1b25c80 }
+       { hardware_keycode 43 }
+       { group 0 }
+       { is_modifier 0 }
+    } ;
+
+: gdk-key-press-event ( -- event )
+    S{ GdkEventKey
+       { type 8 }
+       { window ALIEN: 16727e0 }
+       { send_event 0 }
+       { time 1332864912 }
+       { state 16 }
+       { keyval 65471 }
+       { length 0 }
+       { string ALIEN: 19c9700 }
+       { hardware_keycode 68 }
+       { group 0 }
+       { is_modifier 0 }
+    } ;
+
+{
+    T{ key-down f f "F2" }
+    T{ key-up f f "H" }
+} [
+    gdk-key-press-event key-event>gesture
+    gdk-key-release-event key-event>gesture
+] unit-test
index 8b82e18e9b5faf1fa85fe4af0338645f1eaaeb65..b26eebb475ef7c2c599970c94e5921f37ab17231 100644 (file)
@@ -202,16 +202,13 @@ CONSTANT: action-key-codes
     keyval>> dup action-key-codes at [ t ]
     [ gdk_keyval_to_unicode [ f ] [ 1string ] if-zero f ] ?if ;
 
-: key-event>gesture ( event -- mods sym/f action? )
-    [ event-modifiers ] [ key-sym ] bi ;
+: key-event>gesture ( event -- key-gesture )
+    [ event-modifiers ] [ key-sym ] [
+        type>> GDK_KEY_PRESS = [ <key-down> ] [ <key-up> ] if
+    ] tri ;
 
-: on-key-press ( win event user-data -- ? )
-    drop swap [ key-event>gesture <key-down> ] [ window ] bi*
-    propagate-key-gesture t ;
-
-: on-key-release ( win event user-data -- ? )
-    drop swap [ key-event>gesture <key-up> ] [ window ] bi*
-    propagate-key-gesture t ;
+: on-key-press/release ( win event user-data -- ? )
+    drop swap [ key-event>gesture ] [ window ] bi* propagate-key-gesture t ;
 
 : on-focus-in ( win event user-data -- ? )
     2drop window focus-world t ;
@@ -235,7 +232,6 @@ CONSTANT: action-key-codes
     ] when* ;
 
 :: connect-user-input-signals ( win -- )
-    win events-mask gtk_widget_add_events
     win "motion-notify-event" [ on-motion yield ]
     GtkWidget:motion-notify-event connect-signal
     win "leave-notify-event" [ on-leave yield ]
@@ -246,9 +242,9 @@ CONSTANT: action-key-codes
     GtkWidget:button-release-event connect-signal
     win "scroll-event" [ on-scroll yield ]
     GtkWidget:scroll-event connect-signal
-    win "key-press-event" [ on-key-press yield ]
+    win "key-press-event" [ on-key-press/release yield ]
     GtkWidget:key-press-event connect-signal
-    win "key-release-event" [ on-key-release yield ]
+    win "key-release-event" [ on-key-press/release yield ]
     GtkWidget:key-release-event connect-signal
     win "focus-in-event" [ on-focus-in yield ]
     GtkWidget:focus-in-event connect-signal