diff options
Diffstat (limited to 'src/Gdk/Internal.icl')
-rw-r--r-- | src/Gdk/Internal.icl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Gdk/Internal.icl b/src/Gdk/Internal.icl new file mode 100644 index 0000000..a922d84 --- /dev/null +++ b/src/Gdk/Internal.icl @@ -0,0 +1,44 @@ +implementation module Gdk.Internal + +import StdEnv +import StdMaybe + +import System._Pointer + +gdk_event_get_keyval :: !Pointer -> Maybe Int +gdk_event_get_keyval event + # arr = {#0} + # ok = get event (get_array_pointer arr) + | ok + = Just (arr.[0]) + = Nothing +where + get :: !Pointer !Pointer -> Bool + get _ _ = code { + ccall gdk_event_get_keyval "pp:I" + } + +gdk_keyval_from_name :: !String -> Int +gdk_keyval_from_name name = get (packString name) +where + get :: !String -> Int + get _ = code { + ccall gdk_keyval_from_name "s:I" + } + +gdk_keyval_name :: !Int -> String +gdk_keyval_name keyval = derefString (get keyval) +where + get :: !Pointer -> Pointer + get _ = code { + ccall gdk_keyval_name "p:p" + } + +get_array_pointer :: !{#Int} -> Pointer +get_array_pointer arr = get arr + IF_INT_64_OR_32 24 12 +where + get :: !{#Int} -> Pointer + get _ = code { + push_a_b 0 + pop_a 1 + } |