summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/gtk2/src/glib/ghook.inc
blob: 6b8dcff65d4301c335a9b1720d9688c4e6c4a57c (plain)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// included by glib2.pas

{$IFDEF read_forward_definitions}
{$ENDIF read_forward_definitions}

//------------------------------------------------------------------------------

{$IFDEF read_interface_types}
  PGHook = ^TGHook;
  TGHook = record
    data : gpointer;
    next : PGHook;
    prev : PGHook;
    ref_count : guint;
    hook_id   : gulong;
    flags   : guint;
    func    : gpointer;
    destroy : TGDestroyNotify;
  end;

  PGHookList = ^TGHookList;

  TGHookCompareFunc     = function  (new_hook:PGHook; sibling:PGHook):gint;cdecl;
  TGHookFindFunc        = function  (hook:PGHook;     data:gpointer):gboolean;cdecl;
  TGHookMarshaller      = procedure (hook:PGHook; marshal_data:gpointer);cdecl;
  TGHookCheckMarshaller = function (hook:PGHook; marshal_data:gpointer):gboolean;cdecl;
  TGHookFunc            = procedure (data:gpointer);cdecl;
  TGHookCheckFunc       = function (data:gpointer):gboolean;cdecl;
  TGHookFinalizeFunc    = procedure (hook_list:PGHookList; hook:PGHook);cdecl;

  TGHookList = record
    seq_id : gulong;
    flag0  : longint;
    hooks  : PGHook;
    hook_memchunk : PGMemChunk;
    finalize_hook : TGHookFinalizeFunc;
    dummy : array[0..1] of gpointer;
  end;

  PGHookFlagMask = ^TGHookFlagMask;
  TGHookFlagMask = integer;
{$ENDIF read_interface_types}

//------------------------------------------------------------------------------

{$IFDEF read_interface_rest}

const
  G_HOOK_FLAG_ACTIVE = 1 shl 0;
  G_HOOK_FLAG_IN_CALL = 1 shl 1;
  G_HOOK_FLAG_MASK = $0f;

const
  G_HOOK_FLAG_USER_SHIFT = 4;

   { added for manipulating the TGHookList structure }

  bm_TGHookList_hook_size = $FFFF;
  bp_TGHookList_hook_size = 0;
  bm_TGHookList_is_setup  = $10000;
  bp_TGHookList_is_setup  = 16;

function  TGHookList_hook_size     (var a : TGHookList) : guint;
procedure TGHookList_set_hook_size (var a : TGHookList; __hook_size : guint);
function  TGHookList_is_setup      (var a : TGHookList) : guint;
procedure TGHookList_set_is_setup  (var a : TGHookList; __is_setup : guint);

{ --- macros ---  }

function G_HOOK(hook : pointer) : PGHook;
function G_HOOK_FLAGS(hook : PGHook) : guint;
function G_HOOK_ACTIVE (hook: PGHook): boolean;
function G_HOOK_IN_CALL (hook: PGHook): boolean;
function G_HOOK_IS_VALID (hook: PGHook): boolean;
function G_HOOK_IS_UNLINKED (hook: PGHook): boolean;

{ --- prototypes ---  }

procedure g_hook_list_init  (hook_list : PGHookList; hook_size : guint);cdecl; external gliblib name 'g_hook_list_init';
procedure g_hook_list_clear(hook_list:PGHookList);cdecl;external gliblib name 'g_hook_list_clear';
function g_hook_alloc(hook_list:PGHookList):PGHook;cdecl;external gliblib name 'g_hook_alloc';
procedure g_hook_free(hook_list:PGHookList; hook:PGHook);cdecl;external gliblib name 'g_hook_free';
procedure g_hook_ref(hook_list:PGHookList; hook:PGHook);cdecl;external gliblib name 'g_hook_ref';
procedure g_hook_unref(hook_list:PGHookList; hook:PGHook);cdecl;external gliblib name 'g_hook_unref';
function g_hook_destroy(hook_list:PGHookList; hook_id:gulong):gboolean;cdecl;external gliblib name 'g_hook_destroy';
procedure g_hook_destroy_link(hook_list:PGHookList; hook:PGHook);cdecl;external gliblib name 'g_hook_destroy_link';
procedure g_hook_prepend(hook_list:PGHookList; hook:PGHook);cdecl;external gliblib name 'g_hook_prepend';
procedure g_hook_insert_before(hook_list:PGHookList; sibling:PGHook; hook:PGHook);cdecl;external gliblib name 'g_hook_insert_before';
procedure g_hook_insert_sorted(hook_list:PGHookList; hook:PGHook; func:TGHookCompareFunc);cdecl;external gliblib name 'g_hook_insert_sorted';
function g_hook_get(hook_list:PGHookList; hook_id:gulong):PGHook;cdecl;external gliblib name 'g_hook_get';
function g_hook_find(hook_list:PGHookList; need_valids:gboolean; func:TGHookFindFunc; data:gpointer):PGHook;cdecl;external gliblib name 'g_hook_find';
function g_hook_find_data(hook_list:PGHookList; need_valids:gboolean; data:gpointer):PGHook;cdecl;external gliblib name 'g_hook_find_data';
function g_hook_find_func(hook_list:PGHookList; need_valids:gboolean; func:gpointer):PGHook;cdecl;external gliblib name 'g_hook_find_func';
function g_hook_find_func_data(hook_list:PGHookList; need_valids:gboolean; func:gpointer; data:gpointer):PGHook;cdecl;external gliblib name 'g_hook_find_func_data';
function g_hook_first_valid(hook_list:PGHookList; may_be_in_call:gboolean):PGHook;cdecl;external gliblib name 'g_hook_first_valid';
function g_hook_next_valid(hook_list:PGHookList; hook:PGHook; may_be_in_call:gboolean):PGHook;cdecl;external gliblib name 'g_hook_next_valid';
function g_hook_compare_ids(new_hook:PGHook; sibling:PGHook):gint;cdecl;external gliblib name 'g_hook_compare_ids';

{ convenience macros  }

procedure g_hook_append (hook_list: PGHookList; hook:PGHook);

procedure g_hook_list_invoke_check(hook_list:PGHookList; may_recurse:gboolean);cdecl;external gliblib name 'g_hook_list_invoke_check';
procedure g_hook_list_marshal(hook_list:PGHookList; may_recurse:gboolean; marshaller:TGHookMarshaller; marshal_data:gpointer);cdecl;external gliblib name 'g_hook_list_marshal';
procedure g_hook_list_marshal_check(hook_list:PGHookList; may_recurse:gboolean; marshaller:TGHookCheckMarshaller; marshal_data:gpointer);cdecl;external gliblib name 'g_hook_list_marshal_check';

{$ENDIF read_interface_rest}
// included by glib2.pas