Mercurial > hg > xemacs-beta
comparison src/ui-gtk.c @ 5133:444a448b2f53
Merge branch ben-lisp-object into default branch
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sun, 07 Mar 2010 06:47:37 -0600 |
parents | a9c41067dd88 |
children | f965e31a35f0 |
comparison
equal
deleted
inserted
replaced
5113:b2dcf6a6d8ab | 5133:444a448b2f53 |
---|---|
2 ** | 2 ** |
3 ** Description: Creating 'real' UIs from lisp. | 3 ** Description: Creating 'real' UIs from lisp. |
4 ** | 4 ** |
5 ** Created by: William M. Perry <wmperry@gnu.org> | 5 ** Created by: William M. Perry <wmperry@gnu.org> |
6 ** Copyright (c) 2000 William M. Perry <wmperry@gnu.org> | 6 ** Copyright (c) 2000 William M. Perry <wmperry@gnu.org> |
7 ** Copyright (C) 2010 Ben Wing. | |
7 ** | 8 ** |
8 ** This file is part of XEmacs. | 9 ** This file is part of XEmacs. |
9 ** | 10 ** |
10 ** XEmacs is free software; you can redistribute it and/or modify it | 11 ** XEmacs is free software; you can redistribute it and/or modify it |
11 ** under the terms of the GNU General Public License as published by the | 12 ** under the terms of the GNU General Public License as published by the |
293 | 294 |
294 /* Foreign function calls */ | 295 /* Foreign function calls */ |
295 static emacs_ffi_data * | 296 static emacs_ffi_data * |
296 allocate_ffi_data (void) | 297 allocate_ffi_data (void) |
297 { | 298 { |
298 emacs_ffi_data *data = ALLOC_LCRECORD_TYPE (emacs_ffi_data, &lrecord_emacs_ffi); | 299 Lisp_Object obj = ALLOC_NORMAL_LISP_OBJECT (emacs_ffi); |
300 emacs_ffi_data *data = XFFI (obj); | |
299 | 301 |
300 data->return_type = GTK_TYPE_NONE; | 302 data->return_type = GTK_TYPE_NONE; |
301 data->n_args = 0; | 303 data->n_args = 0; |
302 data->function_name = Qnil; | 304 data->function_name = Qnil; |
303 data->function_ptr = 0; | 305 data->function_ptr = 0; |
331 if (XFFI (obj)->n_args) | 333 if (XFFI (obj)->n_args) |
332 write_fmt_string (printcharfun, " %d arguments", XFFI (obj)->n_args); | 334 write_fmt_string (printcharfun, " %d arguments", XFFI (obj)->n_args); |
333 write_fmt_string (printcharfun, " %p>", (void *)XFFI (obj)->function_ptr); | 335 write_fmt_string (printcharfun, " %p>", (void *)XFFI (obj)->function_ptr); |
334 } | 336 } |
335 | 337 |
336 DEFINE_LRECORD_IMPLEMENTATION ("ffi", emacs_ffi, | 338 DEFINE_NODUMP_LISP_OBJECT ("ffi", emacs_ffi, |
337 0, /*dumpable-flag*/ | 339 mark_ffi_data, ffi_object_printer, |
338 mark_ffi_data, ffi_object_printer, | 340 0, 0, 0, |
339 0, 0, 0, | 341 ffi_data_description, emacs_ffi_data); |
340 ffi_data_description, emacs_ffi_data); | |
341 | 342 |
342 #if defined (__cplusplus) | 343 #if defined (__cplusplus) |
343 #define MANY_ARGS ... | 344 #define MANY_ARGS ... |
344 #else | 345 #else |
345 #define MANY_ARGS | 346 #define MANY_ARGS |
921 { | 922 { |
922 return (XGTK_OBJECT (obj)->plist); | 923 return (XGTK_OBJECT (obj)->plist); |
923 } | 924 } |
924 | 925 |
925 static void | 926 static void |
926 emacs_gtk_object_finalizer (void *header, int for_disksave) | 927 emacs_gtk_object_finalizer (Lisp_Object obj) |
927 { | 928 { |
928 emacs_gtk_object_data *data = (emacs_gtk_object_data *) header; | 929 emacs_gtk_object_data *data = XEMACS_GTK_OBJECT_DATA (obj); |
929 | |
930 if (for_disksave) | |
931 { | |
932 Lisp_Object obj = wrap_emacs_gtk_object (data); | |
933 | |
934 | |
935 invalid_operation | |
936 ("Can't dump an emacs containing GtkObject objects", obj); | |
937 } | |
938 | 930 |
939 if (data->alive_p) | 931 if (data->alive_p) |
940 { | 932 gtk_object_unref (data->object); |
941 gtk_object_unref (data->object); | 933 } |
942 } | 934 |
943 } | 935 DEFINE_NODUMP_GENERAL_LISP_OBJECT ("GtkObject", emacs_gtk_object, |
944 | 936 mark_gtk_object_data, |
945 DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS ("GtkObject", emacs_gtk_object, | 937 emacs_gtk_object_printer, |
946 0, /*dumpable-flag*/ | 938 emacs_gtk_object_finalizer, |
947 mark_gtk_object_data, | 939 0, /* equality */ |
948 emacs_gtk_object_printer, | 940 0, /* hash */ |
949 emacs_gtk_object_finalizer, | 941 gtk_object_data_description, |
950 0, /* equality */ | 942 object_getprop, |
951 0, /* hash */ | 943 object_putprop, |
952 gtk_object_data_description, | 944 0, /* rem prop */ |
953 object_getprop, | 945 0, /* plist */ |
954 object_putprop, | 946 0, /* disksaver */ |
955 0, /* rem prop */ | 947 emacs_gtk_object_data); |
956 0, /* plist */ | |
957 emacs_gtk_object_data); | |
958 | 948 |
959 static emacs_gtk_object_data * | 949 static emacs_gtk_object_data * |
960 allocate_emacs_gtk_object_data (void) | 950 allocate_emacs_gtk_object_data (void) |
961 { | 951 { |
962 emacs_gtk_object_data *data = ALLOC_LCRECORD_TYPE (emacs_gtk_object_data, | 952 Lisp_Object obj = ALLOC_NORMAL_LISP_OBJECT (emacs_gtk_object); |
963 &lrecord_emacs_gtk_object); | 953 emacs_gtk_object_data *data = XGTK_OBJECT (obj); |
964 | 954 |
965 data->object = NULL; | 955 data->object = NULL; |
966 data->alive_p = FALSE; | 956 data->alive_p = FALSE; |
967 data->plist = Qnil; | 957 data->plist = Qnil; |
968 | 958 |
1136 { | 1126 { |
1137 emacs_gtk_boxed_data *data = XGTK_BOXED(obj); | 1127 emacs_gtk_boxed_data *data = XGTK_BOXED(obj); |
1138 return (HASH2 ((Hashcode) data->object, data->object_type)); | 1128 return (HASH2 ((Hashcode) data->object, data->object_type)); |
1139 } | 1129 } |
1140 | 1130 |
1141 DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS ("GtkBoxed", emacs_gtk_boxed, | 1131 DEFINE_NODUMP_LISP_OBJECT ("GtkBoxed", emacs_gtk_boxed, |
1142 0, /*dumpable-flag*/ | 1132 0, /* marker function */ |
1143 0, /* marker function */ | 1133 emacs_gtk_boxed_printer, |
1144 emacs_gtk_boxed_printer, | 1134 0, /* nuker */ |
1145 0, /* nuker */ | 1135 emacs_gtk_boxed_equality, |
1146 emacs_gtk_boxed_equality, | 1136 emacs_gtk_boxed_hash, |
1147 emacs_gtk_boxed_hash, | 1137 emacs_gtk_boxed_description, |
1148 emacs_gtk_boxed_description, | 1138 emacs_gtk_boxed_data); |
1149 0, /* get prop */ | |
1150 0, /* put prop */ | |
1151 0, /* rem prop */ | |
1152 0, /* plist */ | |
1153 emacs_gtk_boxed_data); | |
1154 /* Currently defined GTK_TYPE_BOXED structures are: | 1139 /* Currently defined GTK_TYPE_BOXED structures are: |
1155 | 1140 |
1156 GtkAccelGroup - | 1141 GtkAccelGroup - |
1157 GtkSelectionData - | 1142 GtkSelectionData - |
1158 GtkStyle - | 1143 GtkStyle - |
1166 GdkColor - | 1151 GdkColor - |
1167 */ | 1152 */ |
1168 static emacs_gtk_boxed_data * | 1153 static emacs_gtk_boxed_data * |
1169 allocate_emacs_gtk_boxed_data (void) | 1154 allocate_emacs_gtk_boxed_data (void) |
1170 { | 1155 { |
1171 emacs_gtk_boxed_data *data = ALLOC_LCRECORD_TYPE (emacs_gtk_boxed_data, | 1156 Lisp_Object obj = ALLOC_NORMAL_LISP_OBJECT (emacs_gtk_boxed); |
1172 &lrecord_emacs_gtk_boxed); | 1157 emacs_gtk_boxed_data *data = XGTK_BOXED (obj); |
1173 | 1158 |
1174 data->object = NULL; | 1159 data->object = NULL; |
1175 data->object_type = GTK_TYPE_INVALID; | 1160 data->object_type = GTK_TYPE_INVALID; |
1176 | 1161 |
1177 return (data); | 1162 return (data); |
1353 | 1338 |
1354 | 1339 |
1355 void | 1340 void |
1356 syms_of_ui_gtk (void) | 1341 syms_of_ui_gtk (void) |
1357 { | 1342 { |
1358 INIT_LRECORD_IMPLEMENTATION (emacs_ffi); | 1343 INIT_LISP_OBJECT (emacs_ffi); |
1359 INIT_LRECORD_IMPLEMENTATION (emacs_gtk_object); | 1344 INIT_LISP_OBJECT (emacs_gtk_object); |
1360 INIT_LRECORD_IMPLEMENTATION (emacs_gtk_boxed); | 1345 INIT_LISP_OBJECT (emacs_gtk_boxed); |
1361 DEFSYMBOL_MULTIWORD_PREDICATE (Qemacs_ffip); | 1346 DEFSYMBOL_MULTIWORD_PREDICATE (Qemacs_ffip); |
1362 DEFSYMBOL_MULTIWORD_PREDICATE (Qemacs_gtk_objectp); | 1347 DEFSYMBOL_MULTIWORD_PREDICATE (Qemacs_gtk_objectp); |
1363 DEFSYMBOL_MULTIWORD_PREDICATE (Qemacs_gtk_boxedp); | 1348 DEFSYMBOL_MULTIWORD_PREDICATE (Qemacs_gtk_boxedp); |
1364 DEFSYMBOL (Qvoid); | 1349 DEFSYMBOL (Qvoid); |
1365 DEFSUBR (Fdll_load); | 1350 DEFSUBR (Fdll_load); |