summaryrefslogtreecommitdiff
path: root/src/Gtk/Internal.icl
blob: 827cae64bf4bbd938115272b1d0e9f77441bb6e5 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
implementation module Gtk.Internal

import StdEnv
import StdMaybe

import System._Pointer

import code from "clean_gtk_support."

g_object_unref :: !Pointer !.a -> .a
g_object_unref p env = code {
	ccall g_object_unref "p:V:A"
}

g_signal_connect_void :: !Pointer !String !Int !.a -> .a
g_signal_connect_void widget signal id env = connect widget (packString signal) id env
where
	connect :: !Pointer !String !Int !.a -> .a
	connect _ _ _ _ = code {
		ccall clean_g_signal_connect_void "psI:V:A"
	}

g_signal_pop :: !.a -> (!Maybe GSignalArgs, !.a)
g_signal_pop env
	# (sig,env) = pop env
	| sig == 0
		= (Nothing, env)
	# (id,sig) = readIntP sig (IF_INT_64_OR_32 8 4)
	| sig == 0 // force evaluation
		= abort "Internal error in g_signal_pop\n"
		= (Just {sig_id=id}, env)
where
	pop :: !.a -> (!Pointer, !.a)
	pop env = code {
		ccall clean_g_signal_pop ":p:A"
	}

gtk_init :: !.a -> .a
gtk_init env = init 0 0 env
where
	init :: !Pointer !Pointer !.a -> .a
	init argc argv env = code {
		ccall gtk_init "pp:V:A"
	}

gtk_main_iteration :: !.a -> (!Bool, !.a)
gtk_main_iteration env = code {
	ccall gtk_main_iteration ":I:A"
}

gtk_main_quit :: !.a -> .a
gtk_main_quit env = code {
	ccall gtk_main_quit ":V:A"
}

gtk_widget_set_size_request :: !Pointer !Int !Int !.a -> .a
gtk_widget_set_size_request widget hsize vsize env = code {
	ccall gtk_widget_set_size_request "pII:V:A"
}

gtk_widget_show_all :: !Pointer !.a -> .a
gtk_widget_show_all widget env = code {
	ccall gtk_widget_show_all "p:V:A"
}

gtk_window_new :: !Bool !.a -> (!Pointer, !.a)
gtk_window_new is_popup env = code {
	ccall gtk_window_new "I:p:A"
}

gtk_window_set_title :: !Pointer !String !.a -> .a
gtk_window_set_title window title env = set window (packString title) env
where
	set :: !Pointer !String !.a -> .a
	set _ _ _ = code {
		ccall gtk_window_set_title "ps:V:A"
	}