annotate src/gtk-glue.c @ 502:7039e6323819

[xemacs-hg @ 2001-05-04 22:41:46 by ben] ----------------------- byte-comp warning fixes ----------------- New functions for cleanly eliminating byte-compiler warnings. Their definitions require no changes at all in bytecomp.el, meaning that any package that wants to use them and be compatible with older versions of XEmacs need only copy the code and rename the functions (i.e. prefix them with the package name). Eliminate byte-compiler warnings using the new functions in bytecomp-runtime.el. Move coding-system-put,get,category, since they're not Mule-specific and are used in prefer-coding-system. font.el was incredibly ugly. Clean it up. Avoid using defsubst for any exported functions, to avoid possible compatibility problems if we later change the internal interface. (It happened before, with face accessors, between 19.8 and 19.9). Fix tons of warnings. Clean up (new function gpm-is-supported-p eliminates duplicate code in gpm-create/delete-device-hook) and eliminate warnings. ---------- make byte-recompile-directory work in the --------- core `lisp' dir, even in the absence of a Mule XEmacs (i.e. make it skip the Mule files rather than trying to compile them). now you should be able to do `touch *.el' in the `lisp' dir, then M-x byte-recompile-directory, and get no warnings. Avoid trying to compile Mule files in byte-recompile-directory when we're not in a Mule XEmacs, since we're highly likely to get syntax errors. Add a coding-system cookie to all Mule files so that byte-recompile-directory ignores them. Magic cookie function moved to files.el from code-files.el (for use by bytecomp even in a non-coding-system XEmacs), and changed names and semantics for use by bytecomp. NOTE: IMO this is an internal function that we can change as we like (and there is absolutely no code anywhere else using the function). ---------------- GUI improvements: menus, help ------------------- Rearrange order of keymap declarations to be alphabetical. Improve help on help to include all bindings, and group by category. Add bindings for new Info commands. Remove warnings. Use command-hyper-apropos in place of command-apropos. Add a function to do the equivalent of command-apropos. Evals its help-text argument so you can put expressions there. Used now by help-for-help. Add binding to continue text searches. Expand index searches to work over multiple info documents. Add commands to search text/index in User and Lispref. Add new entry, "Uncomment Region" (parallels "Comment Out Region"). Redo Help menu; add bindings for new Info commands to search the index or text of the User and Lispref manuals. Add command for mark-paragraph, activate-region. Make Edit->R accelerator be rectangle, not register (more commonly used), and put rectangle first. Fix the Edit Init File entry to never load the .elc file. Simplify the default-popup-menu. Add Cmds->Tabs menu. Use kp-left not kp_left, etc. ---------------- Miscellaneous bug fixes/cleanup ------------------- byte-compiler-options: Correct doc string. easy-menu-do-define: fix extra quote. fill-paragraph-or-region:Rewrite to be more correct -- use call-interactively so that we always get exactly the same behavior as if the functions were called directly. No need to fiddle with zmacs-region-stays, now that bogus clearing of it (2001-04-28 src/ChangeLog) is removed. Put dialog titles back in -- this time correctly. Fix various other problems with leaks and such. key-sequence-list-description: Clean up fun to always correctly canonicalize. Clean up Kinsoku comments, synch comment-region with FSF 20.7. * simple.el (region-exists-p): * simple.el (region-active-p): Add comment about which one is correct to use in menu specs. * sound.el (load-sound-file): Minor code clean up. * startup.el: * startup.el (command-line-early): * startup.el (initial-scratch-message): Comment changes. Add info about sample.init.el to splash screen. Improve initial-scratch-message and clarify purpose of Scratch buffer. Fix byte-compile warning. ------------------------ Added features ------------------------- Add new variable to control whether etags checks all parent directories for tag files. (On by default.) * hash-table.el: New file, useful utility functions. * dumped-lisp.el (preloaded-file-list): Dump hash-table.el. ------------ notable bug fix: Windows event code -------------- Get critical quit working. ------------ notable bug fix and new feature: regex code -------------- Shy groups were implemented in a horrible, half-assed way that would cause them to screw up regex searching in most cases. Fixed to work correctly. Also extended back-reference syntax past 9. Only is recognized as such if there are at least that many non-shy groups; and optionally will warn about such uses, to catch old code that might be using them differently. (Added variable to control this in search.c -- `warn-about-possibly-incompatible-back- references', on by default for the moment. Declared in lisp.h. ---------------- process/SIGIO improvements ------------------- define USE_GETADDRINFO to replace more complex conditional, and use it. the code conditionalized on this in unix_open_network_stream had *serious* problems handling errors. it's now fixed, and major amounts of duplicate code between the two versions were combined. don't disable SIGIO and other interrupts unless CONNECT_NEEDS_SLOWED_INTERRUPTS is defined -- don't penalize OS's without bugs. similarly for a freebsd bug that was affecting all OS's. * s\ultrix.h: define CONNECT_NEEDS_SLOWED_INTERRUPTS, since that's the OS mentioned as having a kernel bug. * sysdep.c (request_sigio_on_device): * sysdep.c (unrequest_sigio_on_device): fix SIGIO problems on Linux. add check for O_ASYNC in case it's defined and FASYNC isn't. add comment about other ways to do SIGIO on Linux. * callproc.c (Fold_call_process_internal): * process.c (Fstart_process_internal): Deal with the possibility that `default-directory' doesn't have terminating slash. Correct comments about vfork. ---------------- Miscellaneous bug fixes/cleanup ------------------- * callint.c (Finteractive): Add lots of documentation -- exactly what the Lisp equivalents of all the interactive specs are. * console.h (struct console): change type of quit_char to Emchar. * event-msw.c (lstream_type_create_mswindows_selectable): spacing change. Eliminate events-mod.h and combine into events.h. * emacs.c: * emacs.c (make_arg_list_1): * emacs.c (main_1): A couple of char->Extbyte changes, add a comment. * glyphs-msw.c: Correct indentation of function defns to not exceed 80 cols. Try (sort of) to fix some code that sets the colors of the progress gauge. (Commented out) * keymap.c (syms_of_keymap): use DEFSYMBOL. * process.c (read_process_output): No need to fiddle with zmacs_region_stays, now that bogus clearing of it (see below) is removed. * search.c (Freplace_match): warning fix.
author ben
date Fri, 04 May 2001 22:42:35 +0000
parents 0784d089fdc9
children 2923009caf47
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1 GtkType GTK_TYPE_ARRAY = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 GtkType GTK_TYPE_STRING_ARRAY = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
3 GtkType GTK_TYPE_FLOAT_ARRAY = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4 GtkType GTK_TYPE_INT_ARRAY = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 GtkType GTK_TYPE_LISTOF = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6 GtkType GTK_TYPE_STRING_LIST = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7 GtkType GTK_TYPE_OBJECT_LIST = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 GtkType GTK_TYPE_GDK_GC = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 static GtkType
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11 xemacs_type_register (gchar *name, GtkType parent)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13 GtkType type_id;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14 GtkTypeInfo info;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16 info.type_name = name;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 info.object_size = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 info.class_size = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19 info.class_init_func = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 info.object_init_func = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21 info.reserved_1 = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 info.reserved_2 = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24 type_id = gtk_type_unique (parent, &info);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26 return (type_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
30 xemacs_init_gtk_classes (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
31 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
32 if (!GTK_TYPE_ARRAY)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
33 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
34 GTK_TYPE_ARRAY = xemacs_type_register ("GtkArrayOf", 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
35 GTK_TYPE_STRING_ARRAY = xemacs_type_register ("GtkArrayOfString", GTK_TYPE_ARRAY);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
36 GTK_TYPE_FLOAT_ARRAY = xemacs_type_register ("GtkArrayOfFloat", GTK_TYPE_ARRAY);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
37 GTK_TYPE_INT_ARRAY = xemacs_type_register ("GtkArrayOfInteger", GTK_TYPE_ARRAY);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
38 GTK_TYPE_LISTOF = xemacs_type_register ("GtkListOf", 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
39 GTK_TYPE_STRING_LIST = xemacs_type_register ("GtkListOfString", GTK_TYPE_LISTOF);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
40 GTK_TYPE_OBJECT_LIST = xemacs_type_register ("GtkListOfObject", GTK_TYPE_LISTOF);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
41 GTK_TYPE_GDK_GC = xemacs_type_register ("GdkGC", GTK_TYPE_BOXED);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
42 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
43 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
45 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 xemacs_list_to_gtklist (Lisp_Object obj, GtkArg *arg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48 CHECK_LIST (obj);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50 if (arg->type == GTK_TYPE_STRING_LIST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52 Lisp_Object temp = obj;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 GList *strings = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
55 while (!NILP (temp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
56 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57 CHECK_STRING (XCAR (temp));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58 temp = XCDR (temp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
59 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
60
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 temp = obj;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
62
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 while (!NILP (temp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
64 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
65 strings = g_list_append (strings, XSTRING_DATA (XCAR (temp)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66 temp = XCDR (temp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
67 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69 GTK_VALUE_POINTER(*arg) = strings;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 else if (arg->type == GTK_TYPE_OBJECT_LIST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 Lisp_Object temp = obj;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74 GList *objects = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76 while (!NILP (temp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
77 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 CHECK_GTK_OBJECT (XCAR (temp));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 temp = XCDR (temp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
82 temp = obj;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84 while (!NILP (temp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 objects = g_list_append (objects, XGTK_OBJECT (XCAR (temp))->object);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 temp = XCDR (temp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 GTK_VALUE_POINTER(*arg) = objects;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 abort();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
96 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
99 __make_gtk_object_mapper (gpointer data, gpointer user_data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101 Lisp_Object *rv = (Lisp_Object *) user_data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103 *rv = Fcons (build_gtk_object (GTK_OBJECT (data)), *rv);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
105
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
106 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107 __make_string_mapper (gpointer data, gpointer user_data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109 Lisp_Object *rv = (Lisp_Object *) user_data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
110
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111 *rv = Fcons (build_string ((char *)data), *rv);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115 xemacs_gtklist_to_list (GtkArg *arg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117 Lisp_Object rval = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 if (GTK_VALUE_POINTER (*arg))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121 if (arg->type == GTK_TYPE_STRING_LIST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123 g_list_foreach (GTK_VALUE_POINTER (*arg), __make_string_mapper, &rval);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
124 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
125 else if (arg->type == GTK_TYPE_OBJECT_LIST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
126 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
127 g_list_foreach (GTK_VALUE_POINTER (*arg), __make_gtk_object_mapper, &rval);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
128 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
129 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
130 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
131 abort();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
132 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
133 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 return (rval);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
137 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 xemacs_list_to_array (Lisp_Object obj, GtkArg *arg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 CHECK_LIST (obj);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 #define FROB(ret_type,check_fn,extract_fn) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143 do { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 Lisp_Object temp = obj; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 int length = 0; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 ret_type *array = NULL; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147 \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 while (!NILP (temp)) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150 check_fn (XCAR (temp)); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151 length++; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 temp = XCDR (temp); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 } \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155 array = xnew_array_and_zero (ret_type, length + 2); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 temp = obj; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 length = 0; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159 while (!NILP (temp)) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160 { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
161 array[length++] = extract_fn (XCAR (temp)); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 temp = XCDR (temp); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 } \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164 \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 GTK_VALUE_POINTER(*arg) = array; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 } while (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168 if (arg->type == GTK_TYPE_STRING_ARRAY)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 FROB(gchar *, CHECK_STRING, XSTRING_DATA);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172 else if (arg->type == GTK_TYPE_FLOAT_ARRAY)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 FROB(gfloat, CHECK_FLOAT, extract_float);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 else if (arg->type == GTK_TYPE_INT_ARRAY)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 FROB(gint, CHECK_INT, XINT);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
180 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
181 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 abort();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184 #undef FROB
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
186
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
187 extern GdkGC *gtk_get_gc (struct device *d, Lisp_Object font, Lisp_Object fg, Lisp_Object bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 Lisp_Object bg_pmap, Lisp_Object lwidth);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
190 static GdkGC *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
191 face_to_gc (Lisp_Object face)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193 Lisp_Object device = Fselected_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195 return (gtk_get_gc (XDEVICE (device),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 Fspecifier_instance (Fget (face, Qfont, Qnil), device, Qnil, Qnil),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 Fspecifier_instance (Fget (face, Qforeground, Qnil), device, Qnil, Qnil),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198 Fspecifier_instance (Fget (face, Qbackground, Qnil), device, Qnil, Qnil),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
199 Fspecifier_instance (Fget (face, Qbackground_pixmap, Qnil), device, Qnil, Qnil),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
200 Qnil));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203 static GtkStyle *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 face_to_style (Lisp_Object face)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 Lisp_Object device = Fselected_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 GtkStyle *style = gtk_style_new ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
209
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
210 Lisp_Object font = Fspecifier_instance (Fget (face, Qfont, Qnil), device, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
211 Lisp_Object fg = Fspecifier_instance (Fget (face, Qforeground, Qnil), device, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 Lisp_Object bg = Fspecifier_instance (Fget (face, Qbackground, Qnil), device, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 Lisp_Object pm = Fspecifier_instance (Fget (face, Qbackground_pixmap, Qnil), device, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 for (i = 0; i < 5; i++) style->fg[i] = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (fg));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 for (i = 0; i < 5; i++) style->bg[i] = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (bg));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218 if (IMAGE_INSTANCEP (pm))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220 for (i = 0; i < 5; i++) style->bg_pixmap[i] = XIMAGE_INSTANCE_GTK_PIXMAP (pm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
221 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
222
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223 style->font = FONT_INSTANCE_GTK_FONT (XFONT_INSTANCE (font));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
224
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225 return (style);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
228 extern int gtk_event_to_emacs_event (struct frame *, GdkEvent *, struct Lisp_Event *);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
229
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
230 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
231 gdk_event_to_emacs_event(GdkEvent *ev)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
232 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
233 Lisp_Object emacs_event = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
234
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
235 if (ev)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
236 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
237 emacs_event = Fmake_event (Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
238 if (!gtk_event_to_emacs_event (NULL, ev, XEVENT (emacs_event)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
239 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
240 /* We need to handle a few more cases than the normal event
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241 ** loop does. Mainly the double/triple click events.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243 if ((ev->type == GDK_2BUTTON_PRESS) || (ev->type == GDK_3BUTTON_PRESS))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
245 struct Lisp_Event *le = XEVENT (emacs_event);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
246
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
247 le->event_type = misc_user_event;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
248 le->event.misc.button = ev->button.button;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
249 le->event.misc.modifiers = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
250 le->event.misc.x = ev->button.x;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
251 le->event.misc.y = ev->button.y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
252 if (ev->type == GDK_2BUTTON_PRESS)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
253 le->event.misc.function = intern ("double-click");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
254 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
255 le->event.misc.function = intern ("triple-click");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
256 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
257 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
258 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
259 Fdeallocate_event (emacs_event);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
260 emacs_event = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
261 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
262 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
263 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
264 return (emacs_event);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
265 }