From 0795d21e467d28f2c9d7c678c455f3a36d3b564c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Tue, 20 Oct 2015 17:13:40 +0200 Subject: [PATCH] ui.backend.gtk: on-key-press and on-key-release can be merged into one on-key-press/release handler --- basis/ui/backend/gtk/gtk-tests.factor | 41 +++++++++++++++++++++++++++ basis/ui/backend/gtk/gtk.factor | 20 ++++++------- 2 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 basis/ui/backend/gtk/gtk-tests.factor diff --git a/basis/ui/backend/gtk/gtk-tests.factor b/basis/ui/backend/gtk/gtk-tests.factor new file mode 100644 index 0000000000..ca7f20acae --- /dev/null +++ b/basis/ui/backend/gtk/gtk-tests.factor @@ -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 diff --git a/basis/ui/backend/gtk/gtk.factor b/basis/ui/backend/gtk/gtk.factor index 8b82e18e9b..b26eebb475 100644 --- a/basis/ui/backend/gtk/gtk.factor +++ b/basis/ui/backend/gtk/gtk.factor @@ -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 = [ ] [ ] if + ] tri ; -: on-key-press ( win event user-data -- ? ) - drop swap [ key-event>gesture ] [ window ] bi* - propagate-key-gesture t ; - -: on-key-release ( win event user-data -- ? ) - drop swap [ key-event>gesture ] [ 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