comparison lwlib/lwlib-Xm.c @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents 9ee227acff29
children c7528f8e288d
comparison
equal deleted inserted replaced
69:804d1389bcd6 70:131b0175ea99
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with XEmacs; see the file COPYING. If not, write to 18 along with GNU Emacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20 Boston, MA 02111-1307, USA. */
21 20
22 #include <stdlib.h> 21 #include <stdlib.h>
23 #include <unistd.h> 22 #include <unistd.h>
24 #include <string.h> 23 #include <string.h>
25 #include <stdio.h> 24 #include <stdio.h>
110 static destroyed_instance* 109 static destroyed_instance*
111 make_destroyed_instance (char* name, char* type, Widget widget, Widget parent, 110 make_destroyed_instance (char* name, char* type, Widget widget, Widget parent,
112 Boolean pop_up_p) 111 Boolean pop_up_p)
113 { 112 {
114 destroyed_instance* instance = 113 destroyed_instance* instance =
115 (destroyed_instance*) malloc (sizeof (destroyed_instance)); 114 (destroyed_instance*)malloc (sizeof (destroyed_instance));
116 instance->name = safe_strdup (name); 115 instance->name = safe_strdup (name);
117 instance->type = safe_strdup (type); 116 instance->type = safe_strdup (type);
118 instance->widget = widget; 117 instance->widget = widget;
119 instance->parent = parent; 118 instance->parent = parent;
120 instance->pop_up_p = pop_up_p; 119 instance->pop_up_p = pop_up_p;
151 resource_string (Widget widget, char *name) 150 resource_string (Widget widget, char *name)
152 { 151 {
153 XtResource resource; 152 XtResource resource;
154 char *result = NULL; 153 char *result = NULL;
155 154
156 resource.resource_name = "labelString"; 155 resource.resource_name = (String) "labelString";
157 resource.resource_class = "LabelString"; /* #### should be Xmsomething... */ 156 resource.resource_class = (String) "LabelString"; /* #### should be Xmsomething... */
158 resource.resource_type = XtRString; 157 resource.resource_type = XtRString;
159 resource.resource_size = sizeof (String); 158 resource.resource_size = sizeof (String);
160 resource.resource_offset = 0; 159 resource.resource_offset = 0;
161 resource.default_type = XtRImmediate; 160 resource.default_type = XtRImmediate;
162 resource.default_addr = 0; 161 resource.default_addr = 0;
278 277
279 XtFree (value_name); 278 XtFree (value_name);
280 } 279 }
281 280
282 XtSetArg (al [ac], XmNlabelString, built_string); ac++; 281 XtSetArg (al [ac], XmNlabelString, built_string); ac++;
283 XtSetArg (al [ac], XmNlabelType, XmSTRING); ac++; 282 XtSetArg (al [ac], XmNlabelType, XmSTRING); ac++;
284 } 283 }
285 284
286 if (val->key) 285 if (val->key)
287 { 286 {
288 key_string = XmStringCreateLtoR (val->key, XmSTRING_DEFAULT_CHARSET); 287 key_string = XmStringCreateLtoR (val->key, XmSTRING_DEFAULT_CHARSET);
457 num_children = 0; 456 num_children = 0;
458 for (child_index = 0, cur = val; cur; child_index++, cur = cur->next) 457 for (child_index = 0, cur = val; cur; child_index++, cur = cur->next)
459 { 458 {
460 ac = 0; 459 ac = 0;
461 button = 0; 460 button = 0;
462 XtSetArg (al [ac], XmNsensitive, cur->enabled); ac++; 461 XtSetArg (al [ac], XmNsensitive, cur->enabled); ac++;
463 XtSetArg (al [ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; 462 XtSetArg (al [ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
464 XtSetArg (al [ac], XmNuserData, cur->call_data); ac++; 463 XtSetArg (al [ac], XmNuserData, cur->call_data); ac++;
465 464
466 switch (cur->type) 465 switch (cur->type)
467 { 466 {
468 case PUSHRIGHT_TYPE: 467 case PUSHRIGHT_TYPE:
469 /* A pushright marker which is not needed for the real Motif 468 /* A pushright marker which is not needed for the real Motif
666 /* update text widgets */ 665 /* update text widgets */
667 666
668 static void 667 static void
669 xm_update_text (widget_instance* instance, Widget widget, widget_value* val) 668 xm_update_text (widget_instance* instance, Widget widget, widget_value* val)
670 { 669 {
671 XmTextSetString (widget, val->value ? val->value : ""); 670 XmTextSetString (widget, val->value ? val->value : (char *) "");
672 XtRemoveAllCallbacks (widget, XmNactivateCallback); 671 XtRemoveAllCallbacks (widget, XmNactivateCallback);
673 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); 672 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance);
674 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); 673 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback);
675 XtAddCallback (widget, XmNvalueChangedCallback, 674 XtAddCallback (widget, XmNvalueChangedCallback,
676 xm_internal_update_other_instances, instance); 675 xm_internal_update_other_instances, instance);
678 677
679 static void 678 static void
680 xm_update_text_field (widget_instance* instance, Widget widget, 679 xm_update_text_field (widget_instance* instance, Widget widget,
681 widget_value* val) 680 widget_value* val)
682 { 681 {
683 XmTextFieldSetString (widget, val->value ? val->value : ""); 682 XmTextFieldSetString (widget, val->value ? val->value : (char *) "");
684 XtRemoveAllCallbacks (widget, XmNactivateCallback); 683 XtRemoveAllCallbacks (widget, XmNactivateCallback);
685 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); 684 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance);
686 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); 685 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback);
687 XtAddCallback (widget, XmNvalueChangedCallback, 686 XtAddCallback (widget, XmNvalueChangedCallback,
688 xm_internal_update_other_instances, instance); 687 xm_internal_update_other_instances, instance);
782 val->edited = False; 781 val->edited = False;
783 782
784 /* Common to all widget types */ 783 /* Common to all widget types */
785 XtVaSetValues (widget, 784 XtVaSetValues (widget,
786 XmNsensitive, val->enabled, 785 XmNsensitive, val->enabled,
787 XmNuserData, val->call_data, 786 XmNuserData, val->call_data,
788 0); 787 0);
789 788
790 #if defined (DIALOGS_MOTIF) || defined (MENUBARS_MOTIF) 789 #if defined (DIALOGS_MOTIF) || defined (MENUBARS_MOTIF)
791 /* Common to all label like widgets */ 790 /* Common to all label like widgets */
792 if (XtIsSubclass (widget, xmLabelWidgetClass)) 791 if (XtIsSubclass (widget, xmLabelWidgetClass))
1039 #endif /* ! DND_KLUDGE */ 1038 #endif /* ! DND_KLUDGE */
1040 1039
1041 if (pop_up_p) 1040 if (pop_up_p)
1042 { 1041 {
1043 ac = 0; 1042 ac = 0;
1044 XtSetArg(al[ac], XmNtitle, shell_title); ac++; 1043 XtSetArg(al[ac], XmNtitle, shell_title); ac++;
1045 XtSetArg(al[ac], XtNallowShellResize, True); ac++; 1044 XtSetArg(al[ac], XtNallowShellResize, True); ac++;
1046 XtSetArg(al[ac], XmNdeleteResponse, XmUNMAP); ac++; 1045 XtSetArg(al[ac], XmNdeleteResponse, XmUNMAP); ac++;
1047 result = XmCreateDialogShell (parent, "dialog", al, ac); 1046 result = XmCreateDialogShell (parent, (char *) "dialog", al, ac);
1048 1047
1049 XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++; 1048 XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++;
1050 /* XtSetArg(al[ac], XmNautoUnmanage, TRUE); ac++; */ /* ####is this ok? */ 1049 /* XtSetArg(al[ac], XmNautoUnmanage, TRUE); ac++; */ /* ####is this ok? */
1051 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; 1050 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++;
1052 form = XmCreateForm (result, (char *) shell_title, al, ac); 1051 form = XmCreateForm (result, (char *) shell_title, al, ac);
1053 } 1052 }
1054 else 1053 else
1055 { 1054 {
1056 ac = 0; 1055 ac = 0;
1057 XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++; 1056 XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++;
1058 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; 1057 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++;
1059 form = XmCreateForm (parent, (char *) shell_title, al, ac); 1058 form = XmCreateForm (parent, (char *) shell_title, al, ac);
1060 result = form; 1059 result = form;
1061 } 1060 }
1062 1061
1063 ac = 0; 1062 ac = 0;
1064 XtSetArg(al[ac], XmNpacking, XmPACK_COLUMN); ac++; 1063 XtSetArg(al[ac], XmNpacking, XmPACK_COLUMN); ac++;
1065 XtSetArg(al[ac], XmNorientation, XmVERTICAL); ac++; 1064 XtSetArg(al[ac], XmNorientation, XmVERTICAL); ac++;
1066 XtSetArg(al[ac], XmNnumColumns, left_buttons + right_buttons + 1); ac++; 1065 XtSetArg(al[ac], XmNnumColumns, left_buttons + right_buttons + 1); ac++;
1067 XtSetArg(al[ac], XmNmarginWidth, 0); ac++; 1066 XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
1068 XtSetArg(al[ac], XmNmarginHeight, 0); ac++; 1067 XtSetArg(al[ac], XmNmarginHeight, 0); ac++;
1069 XtSetArg(al[ac], XmNspacing, 13); ac++; 1068 XtSetArg(al[ac], XmNspacing, 13); ac++;
1070 XtSetArg(al[ac], XmNadjustLast, False); ac++; 1069 XtSetArg(al[ac], XmNadjustLast, False); ac++;
1071 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++; 1070 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++;
1072 XtSetArg(al[ac], XmNisAligned, True); ac++; 1071 XtSetArg(al[ac], XmNisAligned, True); ac++;
1073 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; 1072 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
1074 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; 1073 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
1075 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; 1074 XtSetArg(al[ac], XmNbottomOffset, 13); ac++;
1076 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; 1075 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
1077 XtSetArg(al[ac], XmNleftOffset, 13); ac++; 1076 XtSetArg(al[ac], XmNleftOffset, 13); ac++;
1078 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; 1077 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
1079 XtSetArg(al[ac], XmNrightOffset, 13); ac++; 1078 XtSetArg(al[ac], XmNrightOffset, 13); ac++;
1080 row = XmCreateRowColumn (form, "row", al, ac); 1079 row = XmCreateRowColumn (form, (char *) "row", al, ac);
1081 1080
1082 n_children = 0; 1081 n_children = 0;
1083 for (i = 0; i < left_buttons; i++) 1082 for (i = 0; i < left_buttons; i++)
1084 { 1083 {
1085 char button_name [16]; 1084 char button_name [16];
1086 sprintf (button_name, "button%d", i + 1); 1085 sprintf (button_name, "button%d", i + 1);
1087 ac = 0; 1086 ac = 0;
1088 if (i == 0) 1087 if (i == 0)
1089 { 1088 {
1090 XtSetArg(al[ac], XmNhighlightThickness, 1); ac++; 1089 XtSetArg(al[ac], XmNhighlightThickness, 1); ac++;
1091 XtSetArg(al[ac], XmNshowAsDefault, TRUE); ac++; 1090 XtSetArg(al[ac], XmNshowAsDefault, TRUE); ac++;
1092 } 1091 }
1093 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; 1092 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++;
1094 children [n_children] = XmCreatePushButton (row, button_name, al, ac); 1093 children [n_children] = XmCreatePushButton (row, button_name, al, ac);
1095 DO_DND_KLUDGE (children [n_children]); 1094 DO_DND_KLUDGE (children [n_children]);
1096 1095
1114 } 1113 }
1115 1114
1116 /* invisible seperator button */ 1115 /* invisible seperator button */
1117 ac = 0; 1116 ac = 0;
1118 XtSetArg (al[ac], XmNmappedWhenManaged, FALSE); ac++; 1117 XtSetArg (al[ac], XmNmappedWhenManaged, FALSE); ac++;
1119 children [n_children] = XmCreateLabel (row, "separator_button", 1118 children [n_children] = XmCreateLabel (row, (char *) "separator_button",
1120 al, ac); 1119 al, ac);
1121 DO_DND_KLUDGE (children [n_children]); 1120 DO_DND_KLUDGE (children [n_children]);
1122 n_children++; 1121 n_children++;
1123 1122
1124 for (i = 0; i < right_buttons; i++) 1123 for (i = 0; i < right_buttons; i++)
1134 } 1133 }
1135 1134
1136 XtManageChildren (children, n_children); 1135 XtManageChildren (children, n_children);
1137 1136
1138 ac = 0; 1137 ac = 0;
1139 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; 1138 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
1140 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; 1139 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
1141 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; 1140 XtSetArg(al[ac], XmNbottomOffset, 13); ac++;
1142 XtSetArg(al[ac], XmNbottomWidget, row); ac++; 1141 XtSetArg(al[ac], XmNbottomWidget, row); ac++;
1143 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; 1142 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
1144 XtSetArg(al[ac], XmNleftOffset, 0); ac++; 1143 XtSetArg(al[ac], XmNleftOffset, 0); ac++;
1145 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; 1144 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
1146 XtSetArg(al[ac], XmNrightOffset, 0); ac++; 1145 XtSetArg(al[ac], XmNrightOffset, 0); ac++;
1147 separator = XmCreateSeparator (form, "", al, ac); 1146 separator = XmCreateSeparator (form, (char *) "", al, ac);
1148 1147
1149 ac = 0; 1148 ac = 0;
1150 XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++; 1149 XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++;
1151 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; 1150 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
1152 XtSetArg(al[ac], XmNtopOffset, 13); ac++; 1151 XtSetArg(al[ac], XmNtopOffset, 13); ac++;
1153 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; 1152 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
1154 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; 1153 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
1155 XtSetArg(al[ac], XmNleftOffset, 13); ac++; 1154 XtSetArg(al[ac], XmNleftOffset, 13); ac++;
1156 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; 1155 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
1157 icon = XmCreateLabel (form, (char *) icon_name, al, ac); 1156 icon = XmCreateLabel (form, (char *) icon_name, al, ac);
1158 DO_DND_KLUDGE (icon); 1157 DO_DND_KLUDGE (icon);
1159 1158
1160 ac = 0; 1159 ac = 0;
1161 XtSetArg(al[ac], XmNmappedWhenManaged, FALSE); ac++; 1160 XtSetArg(al[ac], XmNmappedWhenManaged, FALSE); ac++;
1162 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; 1161 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
1163 XtSetArg(al[ac], XmNtopOffset, 6); ac++; 1162 XtSetArg(al[ac], XmNtopOffset, 6); ac++;
1164 XtSetArg(al[ac], XmNtopWidget, icon); ac++; 1163 XtSetArg(al[ac], XmNtopWidget, icon); ac++;
1165 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; 1164 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
1166 XtSetArg(al[ac], XmNbottomOffset, 6); ac++; 1165 XtSetArg(al[ac], XmNbottomOffset, 6); ac++;
1167 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; 1166 XtSetArg(al[ac], XmNbottomWidget, separator); ac++;
1168 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_NONE); ac++; 1167 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_NONE); ac++;
1169 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; 1168 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
1170 icon_separator = XmCreateLabel (form, "", al, ac); 1169 icon_separator = XmCreateLabel (form, (char *) "", al, ac);
1171 DO_DND_KLUDGE (icon_separator); 1170 DO_DND_KLUDGE (icon_separator);
1172 1171
1173 if (text_input_slot) 1172 if (text_input_slot)
1174 { 1173 {
1175 ac = 0; 1174 ac = 0;
1176 XtSetArg(al[ac], XmNcolumns, 50); ac++; 1175 XtSetArg(al[ac], XmNcolumns, 50); ac++;
1177 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; 1176 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
1178 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; 1177 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
1179 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; 1178 XtSetArg(al[ac], XmNbottomOffset, 13); ac++;
1180 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; 1179 XtSetArg(al[ac], XmNbottomWidget, separator); ac++;
1181 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; 1180 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
1182 XtSetArg(al[ac], XmNleftOffset, 13); ac++; 1181 XtSetArg(al[ac], XmNleftOffset, 13); ac++;
1183 XtSetArg(al[ac], XmNleftWidget, icon); ac++; 1182 XtSetArg(al[ac], XmNleftWidget, icon); ac++;
1184 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; 1183 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
1185 XtSetArg(al[ac], XmNrightOffset, 13); ac++; 1184 XtSetArg(al[ac], XmNrightOffset, 13); ac++;
1186 value = XmCreateTextField (form, "value", al, ac); 1185 value = XmCreateTextField (form, (char *) "value", al, ac);
1187 DO_DND_KLUDGE (value); 1186 DO_DND_KLUDGE (value);
1188 } 1187 }
1189 else if (radio_box) 1188 else if (radio_box)
1190 { 1189 {
1191 Widget radio_butt; 1190 Widget radio_butt;
1192 ac = 0; 1191 ac = 0;
1193 XtSetArg(al[ac], XmNmarginWidth, 0); ac++; 1192 XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
1194 XtSetArg(al[ac], XmNmarginHeight, 0); ac++; 1193 XtSetArg(al[ac], XmNmarginHeight, 0); ac++;
1195 XtSetArg(al[ac], XmNspacing, 13); ac++; 1194 XtSetArg(al[ac], XmNspacing, 13); ac++;
1196 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++; 1195 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++;
1197 XtSetArg(al[ac], XmNorientation, XmHORIZONTAL); ac++; 1196 XtSetArg(al[ac], XmNorientation, XmHORIZONTAL); ac++;
1198 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; 1197 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
1199 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; 1198 XtSetArg(al[ac], XmNbottomOffset, 13); ac++;
1200 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; 1199 XtSetArg(al[ac], XmNbottomWidget, separator); ac++;
1201 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; 1200 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
1202 XtSetArg(al[ac], XmNleftOffset, 13); ac++; 1201 XtSetArg(al[ac], XmNleftOffset, 13); ac++;
1203 XtSetArg(al[ac], XmNleftWidget, icon); ac++; 1202 XtSetArg(al[ac], XmNleftWidget, icon); ac++;
1204 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; 1203 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
1205 XtSetArg(al[ac], XmNrightOffset, 13); ac++; 1204 XtSetArg(al[ac], XmNrightOffset, 13); ac++;
1206 value = XmCreateRadioBox (form, "radiobutton1", al, ac); 1205 value = XmCreateRadioBox (form, (char *) "radiobutton1", al, ac);
1207 ac = 0; 1206 ac = 0;
1208 i = 0; 1207 i = 0;
1209 radio_butt = XmCreateToggleButtonGadget (value, "radio1", al, ac); 1208 radio_butt = XmCreateToggleButtonGadget (value, (char *) "radio1",
1209 al, ac);
1210 children [i++] = radio_butt; 1210 children [i++] = radio_butt;
1211 radio_butt = XmCreateToggleButtonGadget (value, "radio2", al, ac); 1211 radio_butt = XmCreateToggleButtonGadget (value, (char *) "radio2",
1212 al, ac);
1212 children [i++] = radio_butt; 1213 children [i++] = radio_butt;
1213 radio_butt = XmCreateToggleButtonGadget (value, "radio3", al, ac); 1214 radio_butt = XmCreateToggleButtonGadget (value, (char *) "radio3",
1215 al, ac);
1214 children [i++] = radio_butt; 1216 children [i++] = radio_butt;
1215 XtManageChildren (children, i); 1217 XtManageChildren (children, i);
1216 } 1218 }
1217 else if (list) 1219 else if (list)
1218 { 1220 {
1219 ac = 0; 1221 ac = 0;
1220 XtSetArg(al[ac], XmNvisibleItemCount, 5); ac++; 1222 XtSetArg(al[ac], XmNvisibleItemCount, 5); ac++;
1221 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; 1223 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
1222 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; 1224 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
1223 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; 1225 XtSetArg(al[ac], XmNbottomOffset, 13); ac++;
1224 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; 1226 XtSetArg(al[ac], XmNbottomWidget, separator); ac++;
1225 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; 1227 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
1226 XtSetArg(al[ac], XmNleftOffset, 13); ac++; 1228 XtSetArg(al[ac], XmNleftOffset, 13); ac++;
1227 XtSetArg(al[ac], XmNleftWidget, icon); ac++; 1229 XtSetArg(al[ac], XmNleftWidget, icon); ac++;
1228 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; 1230 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
1229 XtSetArg(al[ac], XmNrightOffset, 13); ac++; 1231 XtSetArg(al[ac], XmNrightOffset, 13); ac++;
1230 value = XmCreateScrolledList (form, "list", al, ac); 1232 value = XmCreateScrolledList (form, (char *) "list", al, ac);
1231 1233
1232 /* this is the easiest way I found to have the dble click in the 1234 /* this is the easiest way I found to have the dble click in the
1233 list activate the default button */ 1235 list activate the default button */
1234 XtAddCallback (value, XmNdefaultActionCallback, activate_button, button); 1236 XtAddCallback (value, XmNdefaultActionCallback, activate_button, button);
1235 } 1237 }
1236 1238
1237 ac = 0; 1239 ac = 0;
1238 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; 1240 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
1239 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; 1241 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
1240 XtSetArg(al[ac], XmNtopOffset, 13); ac++; 1242 XtSetArg(al[ac], XmNtopOffset, 13); ac++;
1241 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; 1243 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
1242 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; 1244 XtSetArg(al[ac], XmNbottomOffset, 13); ac++;
1243 XtSetArg(al[ac], XmNbottomWidget, 1245 XtSetArg(al[ac], XmNbottomWidget,
1244 text_input_slot || radio_box || list ? value : separator); ac++; 1246 text_input_slot || radio_box || list ? value : separator); ac++;
1245 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; 1247 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
1246 XtSetArg(al[ac], XmNleftOffset, 13); ac++; 1248 XtSetArg(al[ac], XmNleftOffset, 13); ac++;
1247 XtSetArg(al[ac], XmNleftWidget, icon); ac++; 1249 XtSetArg(al[ac], XmNleftWidget, icon); ac++;
1248 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; 1250 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
1249 XtSetArg(al[ac], XmNrightOffset, 13); ac++; 1251 XtSetArg(al[ac], XmNrightOffset, 13); ac++;
1250 message = XmCreateLabel (form, "message", al, ac); 1252 message = XmCreateLabel (form, (char *) "message", al, ac);
1251 DO_DND_KLUDGE (message); 1253 DO_DND_KLUDGE (message);
1252 1254
1253 if (list) 1255 if (list)
1254 XtManageChild (value); 1256 XtManageChild (value);
1255 1257
1484 make_menubar (widget_instance* instance) 1486 make_menubar (widget_instance* instance)
1485 { 1487 {
1486 Arg al[10]; 1488 Arg al[10];
1487 int ac = 0; 1489 int ac = 0;
1488 1490
1489 XtSetArg(al[ac], XmNmarginHeight, 0); ac++; 1491 XtSetArg(al[ac], XmNmarginHeight, 0); ac++;
1490 XtSetArg(al[ac], XmNshadowThickness, 3); ac++; 1492 XtSetArg(al[ac], XmNshadowThickness, 3); ac++;
1491 1493
1492 return XmCreateMenuBar (instance->parent, instance->info->name, al, ac); 1494 return XmCreateMenuBar (instance->parent, instance->info->name, al, ac);
1493 } 1495 }
1494 1496
1520 static Widget 1522 static Widget
1521 make_scrollbar (widget_instance *instance, int vertical) 1523 make_scrollbar (widget_instance *instance, int vertical)
1522 { 1524 {
1523 Arg al[20]; 1525 Arg al[20];
1524 int ac = 0; 1526 int ac = 0;
1525 static XtCallbackRec callbacks[2] = 1527 Widget scrollbar;
1526 { {xm_scrollbar_callback, NULL}, {NULL, NULL} }; 1528
1527 1529 XtSetArg (al[ac], XmNminimum, 1); ac++;
1528 callbacks[0].closure = (XtPointer) instance;
1529
1530 XtSetArg (al[ac], XmNminimum, 1); ac++;
1531 XtSetArg (al[ac], XmNmaximum, INT_MAX); ac++; 1530 XtSetArg (al[ac], XmNmaximum, INT_MAX); ac++;
1532 XtSetArg (al[ac], XmNincrement, 1); ac++; 1531 XtSetArg (al[ac], XmNincrement, 1); ac++;
1533 XtSetArg (al[ac], XmNpageIncrement, 1); ac++; 1532 XtSetArg (al[ac], XmNpageIncrement, 1); ac++;
1534 XtSetArg (al[ac], XmNborderWidth, 0); ac++; 1533 XtSetArg (al[ac], XmNborderWidth, 0); ac++;
1535 XtSetArg (al[ac], XmNorientation, vertical ? XmVERTICAL : XmHORIZONTAL); ac++; 1534 if (vertical)
1536 1535 {
1537 XtSetArg (al[ac], XmNdecrementCallback, callbacks); ac++; 1536 XtSetArg (al[ac], XmNorientation, XmVERTICAL); ac++;
1538 XtSetArg (al[ac], XmNdragCallback, callbacks); ac++; 1537 }
1539 XtSetArg (al[ac], XmNincrementCallback, callbacks); ac++; 1538 else
1540 XtSetArg (al[ac], XmNpageDecrementCallback, callbacks); ac++; 1539 {
1541 XtSetArg (al[ac], XmNpageIncrementCallback, callbacks); ac++; 1540 XtSetArg (al[ac], XmNorientation, XmHORIZONTAL); ac++;
1542 XtSetArg (al[ac], XmNtoBottomCallback, callbacks); ac++; 1541 }
1543 XtSetArg (al[ac], XmNtoTopCallback, callbacks); ac++; 1542
1544 XtSetArg (al[ac], XmNvalueChangedCallback, callbacks); ac++; 1543 scrollbar =
1545 1544 XmCreateScrollBar (instance->parent, instance->info->name, al, ac);
1546 return XmCreateScrollBar (instance->parent, instance->info->name, al, ac); 1545
1546 XtRemoveAllCallbacks (scrollbar, XmNdecrementCallback);
1547 XtRemoveAllCallbacks (scrollbar, XmNdragCallback);
1548 XtRemoveAllCallbacks (scrollbar, XmNincrementCallback);
1549 XtRemoveAllCallbacks (scrollbar, XmNpageDecrementCallback);
1550 XtRemoveAllCallbacks (scrollbar, XmNpageIncrementCallback);
1551 XtRemoveAllCallbacks (scrollbar, XmNtoBottomCallback);
1552 XtRemoveAllCallbacks (scrollbar, XmNtoTopCallback);
1553 XtRemoveAllCallbacks (scrollbar, XmNvalueChangedCallback);
1554
1555 XtAddCallback(scrollbar, XmNdecrementCallback, xm_scrollbar_callback,
1556 (XtPointer) instance);
1557 XtAddCallback(scrollbar, XmNdragCallback, xm_scrollbar_callback,
1558 (XtPointer) instance);
1559 XtAddCallback(scrollbar, XmNincrementCallback, xm_scrollbar_callback,
1560 (XtPointer) instance);
1561 XtAddCallback(scrollbar, XmNpageDecrementCallback, xm_scrollbar_callback,
1562 (XtPointer) instance);
1563 XtAddCallback(scrollbar, XmNpageIncrementCallback, xm_scrollbar_callback,
1564 (XtPointer) instance);
1565 XtAddCallback(scrollbar, XmNtoBottomCallback, xm_scrollbar_callback,
1566 (XtPointer) instance);
1567 XtAddCallback(scrollbar, XmNtoTopCallback, xm_scrollbar_callback,
1568 (XtPointer) instance);
1569 XtAddCallback(scrollbar, XmNvalueChangedCallback, xm_scrollbar_callback,
1570 (XtPointer) instance);
1571
1572 return scrollbar;
1547 } 1573 }
1548 1574
1549 static Widget 1575 static Widget
1550 make_vertical_scrollbar (widget_instance *instance) 1576 make_vertical_scrollbar (widget_instance *instance)
1551 { 1577 {