summaryrefslogtreecommitdiff
path: root/src/Gdk/Internal.icl
blob: 9c50238e764d4af9d1d2be54ae6c90139f579621 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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 && arr.[0] <> 0
		= 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
	}