comparison lwlib/lwlib-Xm.c @ 80:1ce6082ce73f r20-0b90

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