Mercurial > emacs
annotate lwlib/lwlib.c @ 41882:f3bc5e440020
Resurrect the Hebrew category
settings for all Hebrew characters removed by the last change.
Add code for setting the Hebrew category of the Unicode Hebrew
characters. Set syntax entries for Hebrew punctuation characters.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Fri, 07 Dec 2001 17:52:20 +0000 |
parents | 27b70bc263d6 |
children | 87f989b9dad5 |
rev | line source |
---|---|
5626 | 1 /* A general interface to the widgets of different toolkits. |
2 Copyright (C) 1992, 1993 Lucid, Inc. | |
3 | |
4 This file is part of the Lucid Widget Library. | |
5 | |
6 The Lucid Widget Library is free software; you can redistribute it and/or | |
7 modify it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 2, or (at your option) | |
9 any later version. | |
10 | |
11 The Lucid Widget Library is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14163
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14163
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
5626 | 20 |
21 #ifdef NeXT | |
22 #undef __STRICT_BSD__ /* ick */ | |
23 #endif | |
24 | |
26087
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25718
diff
changeset
|
25 #ifdef HAVE_CONFIG_H |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25718
diff
changeset
|
26 #include <config.h> |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25718
diff
changeset
|
27 #endif |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25718
diff
changeset
|
28 |
41765
27b70bc263d6
Include ../src/lisp.h. Don't declare xmalloc.
Richard M. Stallman <rms@gnu.org>
parents:
32040
diff
changeset
|
29 #include "../src/lisp.h" |
27b70bc263d6
Include ../src/lisp.h. Don't declare xmalloc.
Richard M. Stallman <rms@gnu.org>
parents:
32040
diff
changeset
|
30 |
5626 | 31 #include <sys/types.h> |
32 #include <stdio.h> | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
33 #include <ctype.h> |
5627
7ff2d6076466
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
34 #include "lwlib-int.h" |
5626 | 35 #include "lwlib-utils.h" |
5706
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5627
diff
changeset
|
36 #include <X11/StringDefs.h> |
5626 | 37 |
38 #if defined (USE_LUCID) | |
39 #include "lwlib-Xlw.h" | |
40 #endif | |
41 #if defined (USE_MOTIF) | |
42 #include "lwlib-Xm.h" | |
6306
19fc40b33f52
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6305
diff
changeset
|
43 #else /* not USE_MOTIF */ |
19fc40b33f52
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6305
diff
changeset
|
44 #if defined (USE_LUCID) |
19fc40b33f52
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6305
diff
changeset
|
45 #define USE_XAW |
19fc40b33f52
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6305
diff
changeset
|
46 #endif /* not USE_MOTIF && USE_LUCID */ |
5626 | 47 #endif |
48 #if defined (USE_OLIT) | |
49 #include "lwlib-Xol.h" | |
50 #endif | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
51 #if defined (USE_XAW) |
21391 | 52 #include <X11/Xaw/Paned.h> |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
53 #include "lwlib-Xaw.h" |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
54 #endif |
5626 | 55 |
56 #if !defined (USE_LUCID) && !defined (USE_MOTIF) && !defined (USE_OLIT) | |
57 ERROR! At least one of USE_LUCID, USE_MOTIF or USE_OLIT must be defined. | |
58 #endif | |
59 | |
60 #if defined (USE_MOTIF) && defined (USE_OLIT) | |
61 ERROR! no more than one of USE_MOTIF and USE_OLIT may be defined. | |
62 #endif | |
63 | |
8785 | 64 #ifndef max |
65 #define max(x, y) ((x) > (y) ? (x) : (y)) | |
66 #endif | |
67 | |
5626 | 68 /* List of all widgets managed by the library. */ |
69 static widget_info* | |
70 all_widget_info = NULL; | |
71 | |
12187
18d061c3d0dd
(lwlib_toolkit_type): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11861
diff
changeset
|
72 #ifdef USE_MOTIF |
18d061c3d0dd
(lwlib_toolkit_type): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11861
diff
changeset
|
73 char *lwlib_toolkit_type = "motif"; |
18d061c3d0dd
(lwlib_toolkit_type): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11861
diff
changeset
|
74 #else |
18d061c3d0dd
(lwlib_toolkit_type): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11861
diff
changeset
|
75 char *lwlib_toolkit_type = "lucid"; |
18d061c3d0dd
(lwlib_toolkit_type): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11861
diff
changeset
|
76 #endif |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
77 |
29468 | 78 #if defined __STDC__ || defined PROTOTYPES |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
79 #define P_(x) x |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
80 #else |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
81 #define P_(x) () |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
82 #endif |
5626 | 83 |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
84 static widget_value *merge_widget_value P_ ((widget_value *, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
85 widget_value *, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
86 int, int *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
87 static void instantiate_widget_instance P_ ((widget_instance *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
88 static int my_strcasecmp P_ ((char *, char *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
89 static void safe_free_str P_ ((char *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
90 static void free_widget_value_tree P_ ((widget_value *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
91 static widget_value *copy_widget_value_tree P_ ((widget_value *, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
92 change_type)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
93 static widget_info *allocate_widget_info P_ ((char *, char *, LWLIB_ID, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
94 widget_value *, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
95 lw_callback, lw_callback, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
96 lw_callback, lw_callback)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
97 static void free_widget_info P_ ((widget_info *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
98 static void mark_widget_destroyed P_ ((Widget, XtPointer, XtPointer)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
99 static widget_instance *allocate_widget_instance P_ ((widget_info *, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
100 Widget, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
101 static void free_widget_instance P_ ((widget_instance *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
102 static widget_info *get_widget_info P_ ((LWLIB_ID, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
103 static widget_instance *get_widget_instance P_ ((Widget, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
104 static widget_instance *find_instance P_ ((LWLIB_ID, Widget, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
105 static Boolean safe_strcmp P_ ((char *, char *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
106 static Widget name_to_widget P_ ((widget_instance *, char *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
107 static void set_one_value P_ ((widget_instance *, widget_value *, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
108 static void update_one_widget_instance P_ ((widget_instance *, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
109 static void update_all_widget_values P_ ((widget_info *, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
110 static void initialize_widget_instance P_ ((widget_instance *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
111 static widget_creation_function find_in_table P_ ((char *, widget_creation_entry *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
112 static Boolean dialog_spec_p P_ ((char *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
113 static void instantiate_widget_instance P_ ((widget_instance *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
114 static void destroy_one_instance P_ ((widget_instance *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
115 static void lw_pop_all_widgets P_ ((LWLIB_ID, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
116 static Boolean get_one_value P_ ((widget_instance *, widget_value *)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
117 static void show_one_widget_busy P_ ((Widget, Boolean)); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
118 |
21391 | 119 void |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
120 lwlib_memset (address, value, length) |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
121 char *address; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
122 int value; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
123 int length; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
124 { |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
125 int i; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
126 |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
127 for (i = 0; i < length; i++) |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
128 address[i] = value; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
129 } |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
130 |
21391 | 131 void |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
132 lwlib_bcopy (from, to, length) |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
133 char *from; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
134 char *to; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
135 int length; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
136 { |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
137 int i; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
138 |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
139 for (i = 0; i < length; i++) |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
140 to[i] = from[i]; |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
141 } |
5626 | 142 /* utility functions for widget_instance and widget_info */ |
7423
4a5d0d109242
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6333
diff
changeset
|
143 char * |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
144 safe_strdup (s) |
29468 | 145 const char *s; |
5626 | 146 { |
147 char *result; | |
148 if (! s) return 0; | |
149 result = (char *) malloc (strlen (s) + 1); | |
150 if (! result) | |
151 return 0; | |
152 strcpy (result, s); | |
153 return result; | |
154 } | |
155 | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
156 /* Like strcmp but ignore differences in case. */ |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
157 |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
158 static int |
5853 | 159 my_strcasecmp (s1, s2) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
160 char *s1, *s2; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
161 { |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
162 while (1) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
163 { |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
164 int c1 = *s1++; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
165 int c2 = *s2++; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
166 if (isupper (c1)) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
167 c1 = tolower (c1); |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
168 if (isupper (c2)) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
169 c2 = tolower (c2); |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
170 if (c1 != c2) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
171 return (c1 > c2 ? 1 : -1); |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
172 if (c1 == 0) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
173 return 0; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
174 } |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
175 } |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
176 |
5626 | 177 static void |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
178 safe_free_str (s) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
179 char *s; |
5626 | 180 { |
181 if (s) free (s); | |
182 } | |
183 | |
184 static widget_value *widget_value_free_list = 0; | |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
185 static int malloc_cpt = 0; |
5626 | 186 |
187 widget_value * | |
188 malloc_widget_value () | |
189 { | |
190 widget_value *wv; | |
191 if (widget_value_free_list) | |
192 { | |
193 wv = widget_value_free_list; | |
194 widget_value_free_list = wv->free_list; | |
195 wv->free_list = 0; | |
196 } | |
197 else | |
198 { | |
199 wv = (widget_value *) malloc (sizeof (widget_value)); | |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
200 malloc_cpt++; |
5626 | 201 } |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
202 lwlib_memset (wv, 0, sizeof (widget_value)); |
5626 | 203 return wv; |
204 } | |
205 | |
14163
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
206 /* this is analogous to free(). It frees only what was allocated |
5626 | 207 by malloc_widget_value(), and no substructures. |
208 */ | |
209 void | |
210 free_widget_value (wv) | |
211 widget_value *wv; | |
212 { | |
213 if (wv->free_list) | |
214 abort (); | |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
215 |
5999
b135bb2b4bfe
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5993
diff
changeset
|
216 if (malloc_cpt > 25) |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
217 { |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
218 /* When the number of already allocated cells is too big, |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
219 We free it. */ |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
220 free (wv); |
5999
b135bb2b4bfe
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5993
diff
changeset
|
221 malloc_cpt--; |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
222 } |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
223 else |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
224 { |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
225 wv->free_list = widget_value_free_list; |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
226 widget_value_free_list = wv; |
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5853
diff
changeset
|
227 } |
5626 | 228 } |
229 | |
230 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
231 free_widget_value_tree (wv) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
232 widget_value *wv; |
5626 | 233 { |
234 if (!wv) | |
235 return; | |
236 | |
237 if (wv->name) free (wv->name); | |
238 if (wv->value) free (wv->value); | |
239 if (wv->key) free (wv->key); | |
240 | |
41765
27b70bc263d6
Include ../src/lisp.h. Don't declare xmalloc.
Richard M. Stallman <rms@gnu.org>
parents:
32040
diff
changeset
|
241 wv->name = wv->value = wv->key = (char *) 0xDEADBEEF; |
5626 | 242 |
243 if (wv->toolkit_data && wv->free_toolkit_data) | |
244 { | |
14611
69fca906f068
(free_widget_value_tree, merge_widget_value):
Karl Heuer <kwzh@gnu.org>
parents:
14594
diff
changeset
|
245 XtFree (wv->toolkit_data); |
5626 | 246 wv->toolkit_data = (void *) 0xDEADBEEF; |
247 } | |
248 | |
249 if (wv->contents && (wv->contents != (widget_value*)1)) | |
250 { | |
251 free_widget_value_tree (wv->contents); | |
252 wv->contents = (widget_value *) 0xDEADBEEF; | |
253 } | |
254 if (wv->next) | |
255 { | |
256 free_widget_value_tree (wv->next); | |
257 wv->next = (widget_value *) 0xDEADBEEF; | |
258 } | |
259 free_widget_value (wv); | |
260 } | |
261 | |
262 static widget_value * | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
263 copy_widget_value_tree (val, change) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
264 widget_value* val; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
265 change_type change; |
5626 | 266 { |
267 widget_value* copy; | |
268 | |
269 if (!val) | |
270 return NULL; | |
271 if (val == (widget_value *) 1) | |
272 return val; | |
273 | |
274 copy = malloc_widget_value (); | |
275 copy->name = safe_strdup (val->name); | |
276 copy->value = safe_strdup (val->value); | |
277 copy->key = safe_strdup (val->key); | |
41765
27b70bc263d6
Include ../src/lisp.h. Don't declare xmalloc.
Richard M. Stallman <rms@gnu.org>
parents:
32040
diff
changeset
|
278 copy->help = val->help; |
5626 | 279 copy->enabled = val->enabled; |
25036 | 280 copy->button_type = val->button_type; |
5626 | 281 copy->selected = val->selected; |
282 copy->edited = False; | |
283 copy->change = change; | |
14879
70f79ccb9875
(merge_widget_value): Set the this_one_change field.
Richard M. Stallman <rms@gnu.org>
parents:
14663
diff
changeset
|
284 copy->this_one_change = change; |
5626 | 285 copy->contents = copy_widget_value_tree (val->contents, change); |
286 copy->call_data = val->call_data; | |
287 copy->next = copy_widget_value_tree (val->next, change); | |
288 copy->toolkit_data = NULL; | |
289 copy->free_toolkit_data = False; | |
290 return copy; | |
291 } | |
292 | |
293 static widget_info * | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
294 allocate_widget_info (type, name, id, val, pre_activate_cb, |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
295 selection_cb, post_activate_cb, highlight_cb) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
296 char* type; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
297 char* name; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
298 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
299 widget_value* val; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
300 lw_callback pre_activate_cb; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
301 lw_callback selection_cb; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
302 lw_callback post_activate_cb; |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
303 lw_callback highlight_cb; |
5626 | 304 { |
305 widget_info* info = (widget_info*)malloc (sizeof (widget_info)); | |
306 info->type = safe_strdup (type); | |
307 info->name = safe_strdup (name); | |
308 info->id = id; | |
309 info->val = copy_widget_value_tree (val, STRUCTURAL_CHANGE); | |
310 info->busy = False; | |
311 info->pre_activate_cb = pre_activate_cb; | |
312 info->selection_cb = selection_cb; | |
313 info->post_activate_cb = post_activate_cb; | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
314 info->highlight_cb = highlight_cb; |
5626 | 315 info->instances = NULL; |
316 | |
317 info->next = all_widget_info; | |
318 all_widget_info = info; | |
319 | |
320 return info; | |
321 } | |
322 | |
323 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
324 free_widget_info (info) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
325 widget_info* info; |
5626 | 326 { |
327 safe_free_str (info->type); | |
328 safe_free_str (info->name); | |
329 free_widget_value_tree (info->val); | |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
330 lwlib_memset ((void*)info, 0xDEADBEEF, sizeof (widget_info)); |
5626 | 331 free (info); |
332 } | |
333 | |
334 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
335 mark_widget_destroyed (widget, closure, call_data) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
336 Widget widget; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
337 XtPointer closure; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
338 XtPointer call_data; |
5626 | 339 { |
340 widget_instance* instance = (widget_instance*)closure; | |
341 | |
342 /* be very conservative */ | |
343 if (instance->widget == widget) | |
344 instance->widget = NULL; | |
345 } | |
346 | |
347 static widget_instance * | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
348 allocate_widget_instance (info, parent, pop_up_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
349 widget_info* info; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
350 Widget parent; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
351 Boolean pop_up_p; |
5626 | 352 { |
353 widget_instance* instance = | |
354 (widget_instance*)malloc (sizeof (widget_instance)); | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
355 bzero (instance, sizeof *instance); |
5626 | 356 instance->parent = parent; |
357 instance->pop_up_p = pop_up_p; | |
358 instance->info = info; | |
359 instance->next = info->instances; | |
360 info->instances = instance; | |
361 | |
14163
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
362 instantiate_widget_instance (instance); |
5626 | 363 |
364 XtAddCallback (instance->widget, XtNdestroyCallback, | |
365 mark_widget_destroyed, (XtPointer)instance); | |
366 return instance; | |
367 } | |
368 | |
369 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
370 free_widget_instance (instance) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
371 widget_instance* instance; |
5626 | 372 { |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
373 lwlib_memset ((void*)instance, 0xDEADBEEF, sizeof (widget_instance)); |
5626 | 374 free (instance); |
375 } | |
376 | |
377 static widget_info * | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
378 get_widget_info (id, remove_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
379 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
380 Boolean remove_p; |
5626 | 381 { |
382 widget_info* info; | |
383 widget_info* prev; | |
384 for (prev = NULL, info = all_widget_info; | |
385 info; | |
386 prev = info, info = info->next) | |
387 if (info->id == id) | |
388 { | |
389 if (remove_p) | |
390 { | |
391 if (prev) | |
392 prev->next = info->next; | |
393 else | |
394 all_widget_info = info->next; | |
395 } | |
396 return info; | |
397 } | |
398 return NULL; | |
399 } | |
400 | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
401 /* Internal function used by the library dependent implementation to get the |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
402 widget_value for a given widget in an instance */ |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
403 widget_info * |
6333
f3fe542e8cd7
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6306
diff
changeset
|
404 lw_get_widget_info (id) |
f3fe542e8cd7
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6306
diff
changeset
|
405 LWLIB_ID id; |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
406 { |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
407 return get_widget_info (id, 0); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
408 } |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
409 |
5626 | 410 static widget_instance * |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
411 get_widget_instance (widget, remove_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
412 Widget widget; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
413 Boolean remove_p; |
5626 | 414 { |
415 widget_info* info; | |
416 widget_instance* instance; | |
417 widget_instance* prev; | |
418 for (info = all_widget_info; info; info = info->next) | |
419 for (prev = NULL, instance = info->instances; | |
420 instance; | |
421 prev = instance, instance = instance->next) | |
422 if (instance->widget == widget) | |
423 { | |
424 if (remove_p) | |
425 { | |
426 if (prev) | |
427 prev->next = instance->next; | |
428 else | |
429 info->instances = instance->next; | |
430 } | |
431 return instance; | |
432 } | |
433 return (widget_instance *) 0; | |
434 } | |
435 | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
436 /* Value is a pointer to the widget_instance corresponding to |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
437 WIDGET, or null if WIDGET is not a lwlib widget. */ |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
438 |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
439 widget_instance * |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
440 lw_get_widget_instance (widget) |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
441 Widget widget; |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
442 { |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
443 return get_widget_instance (widget, False); |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
444 } |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
445 |
5626 | 446 static widget_instance* |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
447 find_instance (id, parent, pop_up_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
448 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
449 Widget parent; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
450 Boolean pop_up_p; |
5626 | 451 { |
452 widget_info* info = get_widget_info (id, False); | |
453 widget_instance* instance; | |
454 | |
455 if (info) | |
456 for (instance = info->instances; instance; instance = instance->next) | |
457 if (instance->parent == parent && instance->pop_up_p == pop_up_p) | |
458 return instance; | |
459 | |
460 return NULL; | |
461 } | |
462 | |
463 | |
464 /* utility function for widget_value */ | |
465 static Boolean | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
466 safe_strcmp (s1, s2) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
467 char* s1; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
468 char* s2; |
5626 | 469 { |
470 if (!!s1 ^ !!s2) return True; | |
471 return (s1 && s2) ? strcmp (s1, s2) : s1 ? False : !!s2; | |
472 } | |
473 | |
474 | |
475 #if 0 | |
476 # define EXPLAIN(name, oc, nc, desc, a1, a2) \ | |
477 printf ("Change: \"%s\"\tmax(%s=%d,%s=%d)\t%s %d %d\n", \ | |
478 name, \ | |
479 (oc == NO_CHANGE ? "none" : \ | |
480 (oc == INVISIBLE_CHANGE ? "invisible" : \ | |
481 (oc == VISIBLE_CHANGE ? "visible" : \ | |
482 (oc == STRUCTURAL_CHANGE ? "structural" : "???")))), \ | |
483 oc, \ | |
484 (nc == NO_CHANGE ? "none" : \ | |
485 (nc == INVISIBLE_CHANGE ? "invisible" : \ | |
486 (nc == VISIBLE_CHANGE ? "visible" : \ | |
487 (nc == STRUCTURAL_CHANGE ? "structural" : "???")))), \ | |
488 nc, desc, a1, a2) | |
489 #else | |
490 # define EXPLAIN(name, oc, nc, desc, a1, a2) | |
491 #endif | |
492 | |
493 | |
494 static widget_value * | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
495 merge_widget_value (val1, val2, level, change_p) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
496 widget_value* val1; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
497 widget_value* val2; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
498 int level; |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
499 int *change_p; |
5626 | 500 { |
14879
70f79ccb9875
(merge_widget_value): Set the this_one_change field.
Richard M. Stallman <rms@gnu.org>
parents:
14663
diff
changeset
|
501 change_type change, this_one_change; |
5626 | 502 widget_value* merged_next; |
503 widget_value* merged_contents; | |
504 | |
505 if (!val1) | |
506 { | |
507 if (val2) | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
508 { |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
509 *change_p = 1; |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
510 return copy_widget_value_tree (val2, STRUCTURAL_CHANGE); |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
511 } |
5626 | 512 else |
513 return NULL; | |
514 } | |
515 if (!val2) | |
516 { | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
517 *change_p = 1; |
5626 | 518 free_widget_value_tree (val1); |
519 return NULL; | |
520 } | |
521 | |
522 change = NO_CHANGE; | |
523 | |
524 if (safe_strcmp (val1->name, val2->name)) | |
525 { | |
526 EXPLAIN (val1->name, change, STRUCTURAL_CHANGE, "name change", | |
527 val1->name, val2->name); | |
528 change = max (change, STRUCTURAL_CHANGE); | |
529 safe_free_str (val1->name); | |
530 val1->name = safe_strdup (val2->name); | |
531 } | |
532 if (safe_strcmp (val1->value, val2->value)) | |
533 { | |
534 EXPLAIN (val1->name, change, VISIBLE_CHANGE, "value change", | |
535 val1->value, val2->value); | |
536 change = max (change, VISIBLE_CHANGE); | |
537 safe_free_str (val1->value); | |
538 val1->value = safe_strdup (val2->value); | |
539 } | |
540 if (safe_strcmp (val1->key, val2->key)) | |
541 { | |
542 EXPLAIN (val1->name, change, VISIBLE_CHANGE, "key change", | |
543 val1->key, val2->key); | |
544 change = max (change, VISIBLE_CHANGE); | |
545 safe_free_str (val1->key); | |
546 val1->key = safe_strdup (val2->key); | |
547 } | |
41765
27b70bc263d6
Include ../src/lisp.h. Don't declare xmalloc.
Richard M. Stallman <rms@gnu.org>
parents:
32040
diff
changeset
|
548 if (! EQ (val1->help, val2->help)) |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
549 { |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
550 EXPLAIN (val1->name, change, VISIBLE_CHANGE, "help change", |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
551 val1->help, val2->help); |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
552 change = max (change, VISIBLE_CHANGE); |
41765
27b70bc263d6
Include ../src/lisp.h. Don't declare xmalloc.
Richard M. Stallman <rms@gnu.org>
parents:
32040
diff
changeset
|
553 val1->help = val2->help; |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
554 } |
5626 | 555 if (val1->enabled != val2->enabled) |
556 { | |
557 EXPLAIN (val1->name, change, VISIBLE_CHANGE, "enablement change", | |
558 val1->enabled, val2->enabled); | |
559 change = max (change, VISIBLE_CHANGE); | |
560 val1->enabled = val2->enabled; | |
561 } | |
25036 | 562 if (val1->button_type != val2->button_type) |
563 { | |
564 EXPLAIN (val1->name, change, VISIBLE_CHANGE, "button type change", | |
565 val1->button_type, val2->button_type); | |
566 change = max (change, VISIBLE_CHANGE); | |
567 val1->button_type = val2->button_type; | |
568 } | |
5626 | 569 if (val1->selected != val2->selected) |
570 { | |
571 EXPLAIN (val1->name, change, VISIBLE_CHANGE, "selection change", | |
572 val1->selected, val2->selected); | |
573 change = max (change, VISIBLE_CHANGE); | |
574 val1->selected = val2->selected; | |
575 } | |
576 if (val1->call_data != val2->call_data) | |
577 { | |
578 EXPLAIN (val1->name, change, INVISIBLE_CHANGE, "call-data change", | |
579 val1->call_data, val2->call_data); | |
580 change = max (change, INVISIBLE_CHANGE); | |
581 val1->call_data = val2->call_data; | |
582 } | |
583 | |
584 if (level > 0) | |
585 { | |
586 merged_contents = | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
587 merge_widget_value (val1->contents, val2->contents, level - 1, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
588 change_p); |
5626 | 589 |
590 if (val1->contents && !merged_contents) | |
591 { | |
14163
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
592 /* This used to say INVISIBLE_CHANGE, |
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
593 but it is visible and vitally important when |
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
594 the contents of the menu bar itself are entirely deleted. |
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
595 |
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
596 But maybe it doesn't matter. This fails to fix the bug. */ |
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
597 EXPLAIN (val1->name, change, STRUCTURAL_CHANGE, "(contents gone)", |
5626 | 598 0, 0); |
14163
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
599 change = max (change, STRUCTURAL_CHANGE); |
5626 | 600 } |
601 else if (merged_contents && merged_contents->change != NO_CHANGE) | |
602 { | |
603 EXPLAIN (val1->name, change, INVISIBLE_CHANGE, "(contents change)", | |
604 0, 0); | |
605 change = max (change, INVISIBLE_CHANGE); | |
15854
184808f2a73c
(merge_widget_value): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15790
diff
changeset
|
606 #if 0 /* This was replaced by the August 9 1996 change in lwlib-Xm.c. */ |
15790
fb5e87397205
(merge_widget_value) [USE_MOTIF]: Pass along the change flag from
Richard M. Stallman <rms@gnu.org>
parents:
15630
diff
changeset
|
607 #ifdef USE_MOTIF |
fb5e87397205
(merge_widget_value) [USE_MOTIF]: Pass along the change flag from
Richard M. Stallman <rms@gnu.org>
parents:
15630
diff
changeset
|
608 change = max (merged_contents->change, change); |
fb5e87397205
(merge_widget_value) [USE_MOTIF]: Pass along the change flag from
Richard M. Stallman <rms@gnu.org>
parents:
15630
diff
changeset
|
609 #endif |
15854
184808f2a73c
(merge_widget_value): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15790
diff
changeset
|
610 #endif |
5626 | 611 } |
612 | |
613 val1->contents = merged_contents; | |
614 } | |
615 | |
14879
70f79ccb9875
(merge_widget_value): Set the this_one_change field.
Richard M. Stallman <rms@gnu.org>
parents:
14663
diff
changeset
|
616 this_one_change = change; |
70f79ccb9875
(merge_widget_value): Set the this_one_change field.
Richard M. Stallman <rms@gnu.org>
parents:
14663
diff
changeset
|
617 |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
618 merged_next = merge_widget_value (val1->next, val2->next, level, change_p); |
5626 | 619 |
620 if (val1->next && !merged_next) | |
621 { | |
622 EXPLAIN (val1->name, change, STRUCTURAL_CHANGE, "(following gone)", | |
623 0, 0); | |
624 change = max (change, STRUCTURAL_CHANGE); | |
625 } | |
626 else if (merged_next) | |
627 { | |
628 if (merged_next->change) | |
629 EXPLAIN (val1->name, change, merged_next->change, "(following change)", | |
630 0, 0); | |
631 change = max (change, merged_next->change); | |
632 } | |
633 | |
634 val1->next = merged_next; | |
635 | |
14879
70f79ccb9875
(merge_widget_value): Set the this_one_change field.
Richard M. Stallman <rms@gnu.org>
parents:
14663
diff
changeset
|
636 val1->this_one_change = this_one_change; |
5626 | 637 val1->change = change; |
638 | |
639 if (change > NO_CHANGE && val1->toolkit_data) | |
640 { | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
641 *change_p = 1; |
5626 | 642 if (val1->free_toolkit_data) |
14611
69fca906f068
(free_widget_value_tree, merge_widget_value):
Karl Heuer <kwzh@gnu.org>
parents:
14594
diff
changeset
|
643 XtFree (val1->toolkit_data); |
5626 | 644 val1->toolkit_data = NULL; |
645 } | |
646 | |
647 return val1; | |
648 } | |
649 | |
650 | |
651 /* modifying the widgets */ | |
652 static Widget | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
653 name_to_widget (instance, name) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
654 widget_instance* instance; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
655 char* name; |
5626 | 656 { |
657 Widget widget = NULL; | |
658 | |
659 if (!instance->widget) | |
660 return NULL; | |
661 | |
662 if (!strcmp (XtName (instance->widget), name)) | |
663 widget = instance->widget; | |
664 else | |
665 { | |
666 int length = strlen (name) + 2; | |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
667 char* real_name = (char *) xmalloc (length); |
5626 | 668 real_name [0] = '*'; |
669 strcpy (real_name + 1, name); | |
670 | |
671 widget = XtNameToWidget (instance->widget, real_name); | |
7515
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
672 |
d31babe815e7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
7423
diff
changeset
|
673 free (real_name); |
5626 | 674 } |
675 return widget; | |
676 } | |
677 | |
678 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
679 set_one_value (instance, val, deep_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
680 widget_instance* instance; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
681 widget_value* val; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
682 Boolean deep_p; |
5626 | 683 { |
684 Widget widget = name_to_widget (instance, val->name); | |
685 | |
686 if (widget) | |
687 { | |
688 #if defined (USE_LUCID) | |
689 if (lw_lucid_widget_p (instance->widget)) | |
690 xlw_update_one_widget (instance, widget, val, deep_p); | |
691 #endif | |
692 #if defined (USE_MOTIF) | |
693 if (lw_motif_widget_p (instance->widget)) | |
694 xm_update_one_widget (instance, widget, val, deep_p); | |
695 #endif | |
696 #if defined (USE_OLIT) | |
697 if (lw_olit_widget_p (instance->widget)) | |
698 xol_update_one_widget (instance, widget, val, deep_p); | |
699 #endif | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
700 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
701 if (lw_xaw_widget_p (instance->widget)) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
702 xaw_update_one_widget (instance, widget, val, deep_p); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
703 #endif |
5626 | 704 } |
705 } | |
706 | |
707 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
708 update_one_widget_instance (instance, deep_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
709 widget_instance* instance; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
710 Boolean deep_p; |
5626 | 711 { |
712 widget_value *val; | |
713 | |
714 if (!instance->widget) | |
715 /* the widget was destroyed */ | |
716 return; | |
717 | |
718 for (val = instance->info->val; val; val = val->next) | |
719 if (val->change != NO_CHANGE) | |
720 set_one_value (instance, val, deep_p); | |
721 } | |
722 | |
723 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
724 update_all_widget_values (info, deep_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
725 widget_info* info; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
726 Boolean deep_p; |
5626 | 727 { |
728 widget_instance* instance; | |
729 widget_value* val; | |
730 | |
731 for (instance = info->instances; instance; instance = instance->next) | |
732 update_one_widget_instance (instance, deep_p); | |
733 | |
734 for (val = info->val; val; val = val->next) | |
735 val->change = NO_CHANGE; | |
736 } | |
737 | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
738 int |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
739 lw_modify_all_widgets (id, val, deep_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
740 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
741 widget_value* val; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
742 Boolean deep_p; |
5626 | 743 { |
744 widget_info* info = get_widget_info (id, False); | |
745 widget_value* new_val; | |
746 widget_value* next_new_val; | |
747 widget_value* cur; | |
748 widget_value* prev; | |
749 widget_value* next; | |
750 int found; | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
751 int change_p = 0; |
5626 | 752 |
753 if (!info) | |
29468 | 754 return 0; |
5626 | 755 |
756 for (new_val = val; new_val; new_val = new_val->next) | |
757 { | |
758 next_new_val = new_val->next; | |
759 new_val->next = NULL; | |
760 found = False; | |
761 for (prev = NULL, cur = info->val; cur; prev = cur, cur = cur->next) | |
762 if (!strcmp (cur->name, new_val->name)) | |
763 { | |
764 found = True; | |
765 next = cur->next; | |
766 cur->next = NULL; | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
767 cur = merge_widget_value (cur, new_val, deep_p ? 1000 : 1, |
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
768 &change_p); |
5626 | 769 if (prev) |
770 prev->next = cur ? cur : next; | |
771 else | |
772 info->val = cur ? cur : next; | |
773 if (cur) | |
774 cur->next = next; | |
775 break; | |
776 } | |
777 if (!found) | |
778 { | |
779 /* Could not find it, add it */ | |
780 if (prev) | |
781 prev->next = copy_widget_value_tree (new_val, STRUCTURAL_CHANGE); | |
782 else | |
783 info->val = copy_widget_value_tree (new_val, STRUCTURAL_CHANGE); | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
784 change_p = 1; |
5626 | 785 } |
786 new_val->next = next_new_val; | |
787 } | |
788 | |
789 update_all_widget_values (info, deep_p); | |
27997
7ff6dc4c3775
(lw_modify_all_widgets): Return non-zero if widget
Gerd Moellmann <gerd@gnu.org>
parents:
27756
diff
changeset
|
790 return change_p; |
5626 | 791 } |
792 | |
793 | |
794 /* creating the widgets */ | |
795 | |
796 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
797 initialize_widget_instance (instance) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
798 widget_instance* instance; |
5626 | 799 { |
800 widget_value* val; | |
801 | |
802 for (val = instance->info->val; val; val = val->next) | |
803 val->change = STRUCTURAL_CHANGE; | |
804 | |
805 update_one_widget_instance (instance, True); | |
806 | |
807 for (val = instance->info->val; val; val = val->next) | |
808 val->change = NO_CHANGE; | |
809 } | |
810 | |
811 | |
812 static widget_creation_function | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
813 find_in_table (type, table) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
814 char* type; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
815 widget_creation_entry* table; |
5626 | 816 { |
817 widget_creation_entry* cur; | |
818 for (cur = table; cur->type; cur++) | |
5853 | 819 if (!my_strcasecmp (type, cur->type)) |
5626 | 820 return cur->function; |
821 return NULL; | |
822 } | |
823 | |
824 static Boolean | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
825 dialog_spec_p (name) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
826 char* name; |
5626 | 827 { |
828 /* return True if name matches [EILPQeilpq][1-9][Bb] or | |
829 [EILPQeilpq][1-9][Bb][Rr][1-9] */ | |
830 if (!name) | |
831 return False; | |
832 | |
833 switch (name [0]) | |
834 { | |
835 case 'E': case 'I': case 'L': case 'P': case 'Q': | |
836 case 'e': case 'i': case 'l': case 'p': case 'q': | |
837 if (name [1] >= '0' && name [1] <= '9') | |
838 { | |
839 if (name [2] != 'B' && name [2] != 'b') | |
840 return False; | |
841 if (!name [3]) | |
842 return True; | |
843 if ((name [3] == 'T' || name [3] == 't') && !name [4]) | |
844 return True; | |
845 if ((name [3] == 'R' || name [3] == 'r') | |
846 && name [4] >= '0' && name [4] <= '9' && !name [5]) | |
847 return True; | |
848 return False; | |
849 } | |
850 else | |
851 return False; | |
852 | |
853 default: | |
854 return False; | |
855 } | |
856 } | |
857 | |
858 static void | |
14163
2422ceecd9d2
(instantiate_widget_instance): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
12744
diff
changeset
|
859 instantiate_widget_instance (instance) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
860 widget_instance* instance; |
5626 | 861 { |
862 widget_creation_function function = NULL; | |
863 | |
864 #if defined (USE_LUCID) | |
865 if (!function) | |
866 function = find_in_table (instance->info->type, xlw_creation_table); | |
867 #endif | |
868 #if defined(USE_MOTIF) | |
869 if (!function) | |
870 function = find_in_table (instance->info->type, xm_creation_table); | |
871 #endif | |
872 #if defined (USE_OLIT) | |
873 if (!function) | |
874 function = find_in_table (instance->info->type, xol_creation_table); | |
875 #endif | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
876 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
877 if (!function) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
878 function = find_in_table (instance->info->type, xaw_creation_table); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
879 #endif |
5626 | 880 |
881 if (!function) | |
882 { | |
883 if (dialog_spec_p (instance->info->type)) | |
884 { | |
885 #if defined (USE_LUCID) | |
886 /* not yet */ | |
887 #endif | |
888 #if defined(USE_MOTIF) | |
889 if (!function) | |
890 function = xm_create_dialog; | |
891 #endif | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
892 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
893 if (!function) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
894 function = xaw_create_dialog; |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
895 #endif |
5626 | 896 #if defined (USE_OLIT) |
897 /* not yet */ | |
898 #endif | |
899 } | |
900 } | |
901 | |
902 if (!function) | |
903 { | |
904 printf ("No creation function for widget type %s\n", | |
905 instance->info->type); | |
906 abort (); | |
907 } | |
908 | |
909 instance->widget = (*function) (instance); | |
910 | |
911 if (!instance->widget) | |
912 abort (); | |
913 | |
914 /* XtRealizeWidget (instance->widget);*/ | |
915 } | |
916 | |
917 void | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
918 lw_register_widget (type, name, id, val, pre_activate_cb, |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
919 selection_cb, post_activate_cb, highlight_cb) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
920 char* type; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
921 char* name; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
922 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
923 widget_value* val; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
924 lw_callback pre_activate_cb; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
925 lw_callback selection_cb; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
926 lw_callback post_activate_cb; |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
927 lw_callback highlight_cb; |
5626 | 928 { |
929 if (!get_widget_info (id, False)) | |
930 allocate_widget_info (type, name, id, val, pre_activate_cb, selection_cb, | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
931 post_activate_cb, highlight_cb); |
5626 | 932 } |
933 | |
934 Widget | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
935 lw_get_widget (id, parent, pop_up_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
936 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
937 Widget parent; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
938 Boolean pop_up_p; |
5626 | 939 { |
940 widget_instance* instance; | |
941 | |
942 instance = find_instance (id, parent, pop_up_p); | |
943 return instance ? instance->widget : NULL; | |
944 } | |
945 | |
946 Widget | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
947 lw_make_widget (id, parent, pop_up_p) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
948 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
949 Widget parent; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
950 Boolean pop_up_p; |
5626 | 951 { |
952 widget_instance* instance; | |
953 widget_info* info; | |
954 | |
955 instance = find_instance (id, parent, pop_up_p); | |
956 if (!instance) | |
957 { | |
958 info = get_widget_info (id, False); | |
959 if (!info) | |
960 return NULL; | |
961 instance = allocate_widget_instance (info, parent, pop_up_p); | |
962 initialize_widget_instance (instance); | |
963 } | |
964 if (!instance->widget) | |
965 abort (); | |
966 return instance->widget; | |
967 } | |
968 | |
969 Widget | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
970 lw_create_widget (type, name, id, val, parent, pop_up_p, pre_activate_cb, |
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
971 selection_cb, post_activate_cb, highlight_cb) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
972 char* type; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
973 char* name; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
974 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
975 widget_value* val; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
976 Widget parent; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
977 Boolean pop_up_p; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
978 lw_callback pre_activate_cb; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
979 lw_callback selection_cb; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
980 lw_callback post_activate_cb; |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
981 lw_callback highlight_cb; |
5626 | 982 { |
983 lw_register_widget (type, name, id, val, pre_activate_cb, selection_cb, | |
27335
314e947f85ea
(copy_widget_value_tree): Copy help string.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
984 post_activate_cb, highlight_cb); |
5626 | 985 return lw_make_widget (id, parent, pop_up_p); |
986 } | |
987 | |
988 | |
989 /* destroying the widgets */ | |
990 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
991 destroy_one_instance (instance) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
992 widget_instance* instance; |
5626 | 993 { |
994 /* Remove the destroy callback on the widget; that callback will try to | |
995 dereference the instance object (to set its widget slot to 0, since the | |
996 widget is dead.) Since the instance is now dead, we don't have to worry | |
997 about the fact that its widget is dead too. | |
998 | |
999 This happens in the Phase2Destroy of the widget, so this callback would | |
1000 not have been run until arbitrarily long after the instance was freed. | |
1001 */ | |
1002 if (instance->widget) | |
1003 XtRemoveCallback (instance->widget, XtNdestroyCallback, | |
1004 mark_widget_destroyed, (XtPointer)instance); | |
1005 | |
1006 if (instance->widget) | |
1007 { | |
1008 /* The else are pretty tricky here, including the empty statement | |
1009 at the end because it would be very bad to destroy a widget | |
1010 twice. */ | |
1011 #if defined (USE_LUCID) | |
1012 if (lw_lucid_widget_p (instance->widget)) | |
1013 xlw_destroy_instance (instance); | |
1014 else | |
1015 #endif | |
1016 #if defined (USE_MOTIF) | |
1017 if (lw_motif_widget_p (instance->widget)) | |
1018 xm_destroy_instance (instance); | |
1019 else | |
1020 #endif | |
1021 #if defined (USE_OLIT) | |
1022 if (lw_olit_widget_p (instance->widget)) | |
1023 xol_destroy_instance (instance); | |
1024 else | |
1025 #endif | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1026 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1027 if (lw_xaw_widget_p (instance->widget)) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1028 xaw_destroy_instance (instance); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1029 else |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1030 #endif |
5626 | 1031 /* do not remove the empty statement */ |
1032 ; | |
1033 } | |
1034 | |
1035 free_widget_instance (instance); | |
1036 } | |
1037 | |
1038 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1039 lw_destroy_widget (w) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1040 Widget w; |
5626 | 1041 { |
1042 widget_instance* instance = get_widget_instance (w, True); | |
1043 | |
1044 if (instance) | |
1045 { | |
1046 widget_info *info = instance->info; | |
1047 /* instance has already been removed from the list; free it */ | |
1048 destroy_one_instance (instance); | |
1049 /* if there are no instances left, free the info too */ | |
1050 if (!info->instances) | |
1051 lw_destroy_all_widgets (info->id); | |
1052 } | |
1053 } | |
1054 | |
1055 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1056 lw_destroy_all_widgets (id) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1057 LWLIB_ID id; |
5626 | 1058 { |
1059 widget_info* info = get_widget_info (id, True); | |
1060 widget_instance* instance; | |
1061 widget_instance* next; | |
1062 | |
1063 if (info) | |
1064 { | |
1065 for (instance = info->instances; instance; ) | |
1066 { | |
1067 next = instance->next; | |
1068 destroy_one_instance (instance); | |
1069 instance = next; | |
1070 } | |
1071 free_widget_info (info); | |
1072 } | |
1073 } | |
1074 | |
1075 void | |
1076 lw_destroy_everything () | |
1077 { | |
1078 while (all_widget_info) | |
1079 lw_destroy_all_widgets (all_widget_info->id); | |
1080 } | |
1081 | |
1082 void | |
1083 lw_destroy_all_pop_ups () | |
1084 { | |
1085 widget_info* info; | |
1086 widget_info* next; | |
1087 widget_instance* instance; | |
1088 | |
1089 for (info = all_widget_info; info; info = next) | |
1090 { | |
1091 next = info->next; | |
1092 instance = info->instances; | |
1093 if (instance && instance->pop_up_p) | |
1094 lw_destroy_all_widgets (info->id); | |
1095 } | |
1096 } | |
1097 | |
1098 #ifdef USE_MOTIF | |
11861 | 1099 extern Widget first_child (/* Widget */); /* garbage */ |
5626 | 1100 #endif |
1101 | |
1102 Widget | |
1103 lw_raise_all_pop_up_widgets () | |
1104 { | |
1105 widget_info* info; | |
1106 widget_instance* instance; | |
1107 Widget result = NULL; | |
1108 | |
1109 for (info = all_widget_info; info; info = info->next) | |
1110 for (instance = info->instances; instance; instance = instance->next) | |
1111 if (instance->pop_up_p) | |
1112 { | |
1113 Widget widget = instance->widget; | |
1114 if (widget) | |
1115 { | |
1116 if (XtIsManaged (widget) | |
1117 #ifdef USE_MOTIF | |
1118 /* What a complete load of crap!!!! | |
1119 When a dialogShell is on the screen, it is not managed! | |
1120 */ | |
1121 || (lw_motif_widget_p (instance->widget) && | |
1122 XtIsManaged (first_child (widget))) | |
1123 #endif | |
1124 ) | |
1125 { | |
1126 if (!result) | |
1127 result = widget; | |
1128 XMapRaised (XtDisplay (widget), XtWindow (widget)); | |
1129 } | |
1130 } | |
1131 } | |
1132 return result; | |
1133 } | |
1134 | |
1135 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1136 lw_pop_all_widgets (id, up) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1137 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1138 Boolean up; |
5626 | 1139 { |
1140 widget_info* info = get_widget_info (id, False); | |
1141 widget_instance* instance; | |
1142 | |
1143 if (info) | |
1144 for (instance = info->instances; instance; instance = instance->next) | |
1145 if (instance->pop_up_p && instance->widget) | |
1146 { | |
1147 #if defined (USE_LUCID) | |
1148 if (lw_lucid_widget_p (instance->widget)) | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1149 { |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1150 XtRealizeWidget (instance->widget); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1151 xlw_pop_instance (instance, up); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1152 } |
5626 | 1153 #endif |
1154 #if defined (USE_MOTIF) | |
1155 if (lw_motif_widget_p (instance->widget)) | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1156 { |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1157 XtRealizeWidget (instance->widget); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1158 xm_pop_instance (instance, up); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1159 } |
5626 | 1160 #endif |
1161 #if defined (USE_OLIT) | |
1162 if (lw_olit_widget_p (instance->widget)) | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1163 { |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1164 XtRealizeWidget (instance->widget); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1165 xol_pop_instance (instance, up); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1166 } |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1167 #endif |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1168 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1169 if (lw_xaw_widget_p (instance->widget)) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1170 { |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1171 XtRealizeWidget (XtParent (instance->widget)); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1172 XtRealizeWidget (instance->widget); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1173 xaw_pop_instance (instance, up); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1174 } |
5626 | 1175 #endif |
1176 } | |
1177 } | |
1178 | |
1179 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1180 lw_pop_up_all_widgets (id) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1181 LWLIB_ID id; |
5626 | 1182 { |
1183 lw_pop_all_widgets (id, True); | |
1184 } | |
1185 | |
1186 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1187 lw_pop_down_all_widgets (id) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1188 LWLIB_ID id; |
5626 | 1189 { |
1190 lw_pop_all_widgets (id, False); | |
1191 } | |
1192 | |
1193 void | |
12744
0c5625e91a11
(lw_popup_menu): New arg event, passed along.
Richard M. Stallman <rms@gnu.org>
parents:
12187
diff
changeset
|
1194 lw_popup_menu (widget, event) |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1195 Widget widget; |
12744
0c5625e91a11
(lw_popup_menu): New arg event, passed along.
Richard M. Stallman <rms@gnu.org>
parents:
12187
diff
changeset
|
1196 XEvent *event; |
5626 | 1197 { |
1198 #if defined (USE_LUCID) | |
1199 if (lw_lucid_widget_p (widget)) | |
12744
0c5625e91a11
(lw_popup_menu): New arg event, passed along.
Richard M. Stallman <rms@gnu.org>
parents:
12187
diff
changeset
|
1200 xlw_popup_menu (widget, event); |
5626 | 1201 #endif |
1202 #if defined (USE_MOTIF) | |
1203 if (lw_motif_widget_p (widget)) | |
12744
0c5625e91a11
(lw_popup_menu): New arg event, passed along.
Richard M. Stallman <rms@gnu.org>
parents:
12187
diff
changeset
|
1204 xm_popup_menu (widget, event); |
5626 | 1205 #endif |
1206 #if defined (USE_OLIT) | |
1207 if (lw_olit_widget_p (widget)) | |
12744
0c5625e91a11
(lw_popup_menu): New arg event, passed along.
Richard M. Stallman <rms@gnu.org>
parents:
12187
diff
changeset
|
1208 xol_popup_menu (widget, event); |
5626 | 1209 #endif |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1210 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1211 if (lw_xaw_widget_p (widget)) |
12744
0c5625e91a11
(lw_popup_menu): New arg event, passed along.
Richard M. Stallman <rms@gnu.org>
parents:
12187
diff
changeset
|
1212 xaw_popup_menu (widget, event); |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1213 #endif |
5626 | 1214 } |
1215 | |
1216 /* get the values back */ | |
1217 static Boolean | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1218 get_one_value (instance, val) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1219 widget_instance* instance; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1220 widget_value* val; |
5626 | 1221 { |
1222 Widget widget = name_to_widget (instance, val->name); | |
1223 | |
1224 if (widget) | |
1225 { | |
1226 #if defined (USE_LUCID) | |
1227 if (lw_lucid_widget_p (instance->widget)) | |
1228 xlw_update_one_value (instance, widget, val); | |
1229 #endif | |
1230 #if defined (USE_MOTIF) | |
1231 if (lw_motif_widget_p (instance->widget)) | |
1232 xm_update_one_value (instance, widget, val); | |
1233 #endif | |
1234 #if defined (USE_OLIT) | |
1235 if (lw_olit_widget_p (instance->widget)) | |
1236 xol_update_one_value (instance, widget, val); | |
1237 #endif | |
6305
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1238 #if defined (USE_XAW) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1239 if (lw_xaw_widget_p (instance->widget)) |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1240 xaw_update_one_value (instance, widget, val); |
65beaa9aa1e4
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5999
diff
changeset
|
1241 #endif |
5626 | 1242 return True; |
1243 } | |
1244 else | |
1245 return False; | |
1246 } | |
1247 | |
1248 Boolean | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1249 lw_get_some_values (id, val_out) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1250 LWLIB_ID id; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1251 widget_value* val_out; |
5626 | 1252 { |
1253 widget_info* info = get_widget_info (id, False); | |
1254 widget_instance* instance; | |
1255 widget_value* val; | |
1256 Boolean result = False; | |
1257 | |
1258 if (!info) | |
1259 return False; | |
1260 | |
1261 instance = info->instances; | |
1262 if (!instance) | |
1263 return False; | |
1264 | |
1265 for (val = val_out; val; val = val->next) | |
1266 if (get_one_value (instance, val)) | |
1267 result = True; | |
1268 | |
1269 return result; | |
1270 } | |
1271 | |
1272 widget_value* | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1273 lw_get_all_values (id) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1274 LWLIB_ID id; |
5626 | 1275 { |
1276 widget_info* info = get_widget_info (id, False); | |
1277 widget_value* val = info->val; | |
1278 if (lw_get_some_values (id, val)) | |
1279 return val; | |
1280 else | |
1281 return NULL; | |
1282 } | |
1283 | |
1284 /* internal function used by the library dependent implementation to get the | |
1285 widget_value for a given widget in an instance */ | |
1286 widget_value* | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1287 lw_get_widget_value_for_widget (instance, w) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1288 widget_instance* instance; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1289 Widget w; |
5626 | 1290 { |
1291 char* name = XtName (w); | |
1292 widget_value* cur; | |
1293 for (cur = instance->info->val; cur; cur = cur->next) | |
1294 if (!strcmp (cur->name, name)) | |
1295 return cur; | |
1296 return NULL; | |
1297 } | |
1298 | |
1299 /* update other instances value when one thing changed */ | |
14594
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1300 |
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1301 /* To forbid recursive calls */ |
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1302 static Boolean lwlib_updating; |
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1303 |
5626 | 1304 /* This function can be used as a an XtCallback for the widgets that get |
1305 modified to update other instances of the widgets. Closure should be the | |
1306 widget_instance. */ | |
1307 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1308 lw_internal_update_other_instances (widget, closure, call_data) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1309 Widget widget; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1310 XtPointer closure; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1311 XtPointer call_data; |
5626 | 1312 { |
1313 widget_instance* instance = (widget_instance*)closure; | |
1314 char* name = XtName (widget); | |
1315 widget_info* info; | |
1316 widget_instance* cur; | |
1317 widget_value* val; | |
1318 | |
14594
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1319 /* Avoid possibly infinite recursion. */ |
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1320 if (lwlib_updating) |
5626 | 1321 return; |
1322 | |
1323 /* protect against the widget being destroyed */ | |
1324 if (XtWidgetBeingDestroyedP (widget)) | |
1325 return; | |
1326 | |
1327 /* Return immediately if there are no other instances */ | |
1328 info = instance->info; | |
1329 if (!info->instances->next) | |
1330 return; | |
1331 | |
14594
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1332 lwlib_updating = True; |
5626 | 1333 |
1334 for (val = info->val; val && strcmp (val->name, name); val = val->next); | |
1335 | |
1336 if (val && get_one_value (instance, val)) | |
1337 for (cur = info->instances; cur; cur = cur->next) | |
1338 if (cur != instance) | |
1339 set_one_value (cur, val, True); | |
1340 | |
14594
37d38d8040a1
(lw_internal_update_other_instances): Move static var
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
1341 lwlib_updating = False; |
5626 | 1342 } |
1343 | |
1344 | |
1345 /* get the id */ | |
1346 | |
1347 LWLIB_ID | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1348 lw_get_widget_id (w) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1349 Widget w; |
5626 | 1350 { |
1351 widget_instance* instance = get_widget_instance (w, False); | |
1352 | |
1353 return instance ? instance->info->id : 0; | |
1354 } | |
1355 | |
1356 /* set the keyboard focus */ | |
1357 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1358 lw_set_keyboard_focus (parent, w) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1359 Widget parent; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1360 Widget w; |
5626 | 1361 { |
1362 #if defined (USE_MOTIF) | |
1363 xm_set_keyboard_focus (parent, w); | |
1364 #else | |
1365 XtSetKeyboardFocus (parent, w); | |
1366 #endif | |
1367 } | |
1368 | |
1369 /* Show busy */ | |
1370 static void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1371 show_one_widget_busy (w, flag) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1372 Widget w; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1373 Boolean flag; |
5626 | 1374 { |
1375 Pixel foreground = 0; | |
1376 Pixel background = 1; | |
1377 Widget widget_to_invert = XtNameToWidget (w, "*sheet"); | |
1378 if (!widget_to_invert) | |
1379 widget_to_invert = w; | |
1380 | |
1381 XtVaGetValues (widget_to_invert, | |
1382 XtNforeground, &foreground, | |
1383 XtNbackground, &background, | |
30571 | 1384 NULL); |
5626 | 1385 XtVaSetValues (widget_to_invert, |
1386 XtNforeground, background, | |
1387 XtNbackground, foreground, | |
30571 | 1388 NULL); |
5626 | 1389 } |
1390 | |
1391 void | |
5724
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1392 lw_show_busy (w, busy) |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1393 Widget w; |
02a4aeb69cae
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
1394 Boolean busy; |
5626 | 1395 { |
1396 widget_instance* instance = get_widget_instance (w, False); | |
1397 widget_info* info; | |
1398 widget_instance* next; | |
1399 | |
1400 if (instance) | |
1401 { | |
1402 info = instance->info; | |
1403 if (info->busy != busy) | |
1404 { | |
1405 for (next = info->instances; next; next = next->next) | |
1406 if (next->widget) | |
1407 show_one_widget_busy (next->widget, busy); | |
1408 info->busy = busy; | |
1409 } | |
1410 } | |
1411 } | |
8785 | 1412 |
1413 /* This hack exists because Lucid/Athena need to execute the strange | |
1414 function below to support geometry management. */ | |
1415 void | |
1416 lw_refigure_widget (w, doit) | |
1417 Widget w; | |
1418 Boolean doit; | |
1419 { | |
9929
72dc1c5b3939
(lw_refigure_widget): Use the macro USE_XAW rather than XAW.
Paul Reilly <pmr@pajato.com>
parents:
9226
diff
changeset
|
1420 #if defined (USE_XAW) |
8785 | 1421 XawPanedSetRefigureMode (w, doit); |
1422 #endif | |
1423 #if defined (USE_MOTIF) | |
1424 if (doit) | |
11714
b62d02709ec7
(lw_refigure_widget) [USE_MOTIF]: Fix backward if.
Richard M. Stallman <rms@gnu.org>
parents:
11676
diff
changeset
|
1425 XtManageChild (w); |
8785 | 1426 else |
11714
b62d02709ec7
(lw_refigure_widget) [USE_MOTIF]: Fix backward if.
Richard M. Stallman <rms@gnu.org>
parents:
11676
diff
changeset
|
1427 XtUnmanageChild (w); |
8785 | 1428 #endif |
1429 } | |
1430 | |
1431 /* Toolkit independent way of determining if an event window is in the | |
1432 menubar. */ | |
1433 Boolean | |
1434 lw_window_is_in_menubar (win, menubar_widget) | |
1435 Window win; | |
1436 Widget menubar_widget; | |
1437 { | |
1438 return menubar_widget | |
1439 #if defined (USE_LUCID) | |
1440 && XtWindow (menubar_widget) == win; | |
1441 #endif | |
1442 #if defined (USE_MOTIF) | |
14663
d9cafe0ebb7d
(lw_window_is_in_menubar) [USE_MOTIF]:
Richard M. Stallman <rms@gnu.org>
parents:
14611
diff
changeset
|
1443 && ((XtWindow (menubar_widget) == win) |
d9cafe0ebb7d
(lw_window_is_in_menubar) [USE_MOTIF]:
Richard M. Stallman <rms@gnu.org>
parents:
14611
diff
changeset
|
1444 || (XtWindowToWidget (XtDisplay (menubar_widget), win) |
d9cafe0ebb7d
(lw_window_is_in_menubar) [USE_MOTIF]:
Richard M. Stallman <rms@gnu.org>
parents:
14611
diff
changeset
|
1445 && (XtParent (XtWindowToWidget (XtDisplay (menubar_widget), win)) |
d9cafe0ebb7d
(lw_window_is_in_menubar) [USE_MOTIF]:
Richard M. Stallman <rms@gnu.org>
parents:
14611
diff
changeset
|
1446 == menubar_widget))); |
8785 | 1447 #endif |
1448 } | |
1449 | |
1450 /* Motif hack to set the main window areas. */ | |
1451 void | |
1452 lw_set_main_areas (parent, menubar, work_area) | |
1453 Widget parent; | |
1454 Widget menubar; | |
1455 Widget work_area; | |
1456 { | |
1457 #if defined (USE_MOTIF) | |
9093
f8546f467db6
(lw_set_main_areas): Move call to XmMainSetAreas() to `lwlib-Xm.c'.
Paul Reilly <pmr@pajato.com>
parents:
8785
diff
changeset
|
1458 xm_set_main_areas (parent, menubar, work_area); |
8785 | 1459 #endif |
1460 } | |
1461 | |
1462 /* Manage resizing for Motif. This disables resizing when the menubar | |
1463 is about to be modified. */ | |
1464 void | |
1465 lw_allow_resizing (w, flag) | |
1466 Widget w; | |
1467 Boolean flag; | |
1468 { | |
1469 #if defined (USE_MOTIF) | |
9226
fc3f748ccf9e
(lw_set_main_areas): Use xm_set_main_areas().
Paul Reilly <pmr@pajato.com>
parents:
9093
diff
changeset
|
1470 xm_manage_resizing (w, flag); |
8785 | 1471 #endif |
1472 } | |
25036 | 1473 |
1474 | |
1475 /* Value is non-zero if LABEL is a menu separator. If it is, *TYPE is | |
1476 set to an appropriate enumerator of type enum menu_separator. | |
1477 MOTIF_P non-zero means map separator types not supported by Motif | |
1478 to similar ones that are supported. */ | |
1479 | |
1480 int | |
1481 lw_separator_p (label, type, motif_p) | |
1482 char *label; | |
1483 enum menu_separator *type; | |
1484 int motif_p; | |
1485 { | |
32040
02773dbde247
(lw_separator_p): Init separator_p (bug with "-- some text").
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30571
diff
changeset
|
1486 int separator_p = 0; |
25036 | 1487 |
1488 if (strlen (label) >= 3 | |
1489 && bcmp (label, "--:", 3) == 0) | |
1490 { | |
1491 static struct separator_table | |
1492 { | |
1493 char *name; | |
1494 enum menu_separator type; | |
1495 } | |
1496 separator_names[] = | |
1497 { | |
25627
157324e02b30
(lw_separator_p): Add `--:space' with the same
Gerd Moellmann <gerd@gnu.org>
parents:
25562
diff
changeset
|
1498 "space", SEPARATOR_NO_LINE, |
25036 | 1499 "noLine", SEPARATOR_NO_LINE, |
1500 "singleLine", SEPARATOR_SINGLE_LINE, | |
1501 "doubleLine", SEPARATOR_DOUBLE_LINE, | |
1502 "singleDashedLine", SEPARATOR_SINGLE_DASHED_LINE, | |
1503 "doubleDashedLine", SEPARATOR_DOUBLE_DASHED_LINE, | |
1504 "shadowEtchedIn", SEPARATOR_SHADOW_ETCHED_IN, | |
1505 "shadowEtchedOut", SEPARATOR_SHADOW_ETCHED_OUT, | |
1506 "shadowEtchedInDash", SEPARATOR_SHADOW_ETCHED_IN_DASH, | |
1507 "shadowEtchedOutDash", SEPARATOR_SHADOW_ETCHED_OUT_DASH, | |
1508 "shadowDoubleEtchedIn", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN, | |
1509 "shadowDoubleEtchedOut", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT, | |
1510 "shadowDoubleEtchedInDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH, | |
1511 "shadowDoubleEtchedOutDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH, | |
1512 0 | |
1513 }; | |
1514 | |
1515 int i; | |
1516 | |
1517 label += 3; | |
1518 for (i = 0; separator_names[i].name; ++i) | |
1519 if (strcmp (label, separator_names[i].name) == 0) | |
1520 { | |
1521 separator_p = 1; | |
1522 *type = separator_names[i].type; | |
1523 | |
1524 /* If separator type is not supported under Motif, | |
1525 use a similar one. */ | |
1526 if (motif_p && *type >= SEPARATOR_SHADOW_DOUBLE_ETCHED_IN) | |
1527 *type -= 4; | |
1528 break; | |
1529 } | |
1530 } | |
25562
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1531 else if (strlen (label) > 3 |
25718
096f3085e905
(lw_separator_p): Check for new-style separators
Gerd Moellmann <gerd@gnu.org>
parents:
25627
diff
changeset
|
1532 && bcmp (label, "--", 2) == 0 |
096f3085e905
(lw_separator_p): Check for new-style separators
Gerd Moellmann <gerd@gnu.org>
parents:
25627
diff
changeset
|
1533 && label[2] != '-') |
25562
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1534 { |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1535 /* Alternative, more Emacs-style names. */ |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1536 static struct separator_table |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1537 { |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1538 char *name; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1539 enum menu_separator type; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1540 } |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1541 separator_names[] = |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1542 { |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1543 "space", SEPARATOR_NO_LINE, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1544 "no-line", SEPARATOR_NO_LINE, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1545 "single-line", SEPARATOR_SINGLE_LINE, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1546 "double-line", SEPARATOR_DOUBLE_LINE, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1547 "single-dashed-line", SEPARATOR_SINGLE_DASHED_LINE, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1548 "double-dashed-line", SEPARATOR_DOUBLE_DASHED_LINE, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1549 "shadow-etched-in", SEPARATOR_SHADOW_ETCHED_IN, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1550 "shadow-etched-out", SEPARATOR_SHADOW_ETCHED_OUT, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1551 "shadow-etched-in-dash", SEPARATOR_SHADOW_ETCHED_IN_DASH, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1552 "shadow-etched-out-dash", SEPARATOR_SHADOW_ETCHED_OUT_DASH, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1553 "shadow-double-etched-in", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1554 "shadow-double-etched-out", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1555 "shadow-double-etched-in-dash", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1556 "shadow-double-etched-out-dash",SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1557 0 |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1558 }; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1559 |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1560 int i; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1561 |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1562 label += 2; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1563 for (i = 0; separator_names[i].name; ++i) |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1564 if (strcmp (label, separator_names[i].name) == 0) |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1565 { |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1566 separator_p = 1; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1567 *type = separator_names[i].type; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1568 |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1569 /* If separator type is not supported under Motif, |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1570 use a similar one. */ |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1571 if (motif_p && *type >= SEPARATOR_SHADOW_DOUBLE_ETCHED_IN) |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1572 *type -= 4; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1573 break; |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1574 } |
374f4e51615c
(lw_separator_p): Add alternative separator type names.
Gerd Moellmann <gerd@gnu.org>
parents:
25036
diff
changeset
|
1575 } |
25036 | 1576 else |
1577 { | |
1578 /* Old-style separator, maybe. It's a separator if it contains | |
1579 only dashes. */ | |
1580 while (*label == '-') | |
1581 ++label; | |
1582 separator_p = *label == 0; | |
1583 *type = SEPARATOR_SHADOW_ETCHED_IN; | |
1584 } | |
1585 | |
1586 return separator_p; | |
1587 } | |
1588 |