summaryrefslogtreecommitdiff
path: root/src/Gdk/Internal.icl
diff options
context:
space:
mode:
Diffstat (limited to 'src/Gdk/Internal.icl')
-rw-r--r--src/Gdk/Internal.icl44
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
+ }