xmwidgets.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. /*
  2. * CDE - Common Desktop Environment
  3. *
  4. * Copyright (c) 1993-2012, The Open Group. All rights reserved.
  5. *
  6. * These libraries and programs are free software; you can
  7. * redistribute them and/or modify them under the terms of the GNU
  8. * Lesser General Public License as published by the Free Software
  9. * Foundation; either version 2 of the License, or (at your option)
  10. * any later version.
  11. *
  12. * These libraries and programs are distributed in the hope that
  13. * they will be useful, but WITHOUT ANY WARRANTY; without even the
  14. * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  15. * PURPOSE. See the GNU Lesser General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public
  19. * License along with these libraries and programs; if not, write
  20. * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
  21. * Floor, Boston, MA 02110-1301 USA
  22. */
  23. /* $XConsortium: xmwidgets.c /main/6 1996/04/01 17:54:38 rswiston $ */
  24. /* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
  25. /* All Rights Reserved */
  26. /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
  27. /* UNIX System Laboratories, Inc. */
  28. /* The copyright notice above does not evidence any */
  29. /* actual or intended publication of such source code. */
  30. #include "name.h"
  31. #include "shell.h"
  32. #include <X11/Intrinsic.h>
  33. #include <X11/Shell.h>
  34. #include <X11/StringDefs.h>
  35. #include <Xm/ArrowB.h>
  36. #include <Xm/ArrowBG.h>
  37. #include <Xm/BulletinB.h>
  38. #include <Xm/CascadeB.h>
  39. #include <Xm/CascadeBG.h>
  40. #include <Xm/ComboBox.h>
  41. #include <Xm/Command.h>
  42. #include <Xm/DialogS.h>
  43. #include <Xm/DrawingA.h>
  44. #include <Xm/DrawnB.h>
  45. #include <Xm/FileSB.h>
  46. #include <Xm/Form.h>
  47. #include <Xm/Frame.h>
  48. #include <Xm/Label.h>
  49. #include <Xm/LabelG.h>
  50. #include <Xm/List.h>
  51. #include <Xm/MainW.h>
  52. #include <Xm/MenuShell.h>
  53. #include <Xm/MessageB.h>
  54. #include <Xm/PanedW.h>
  55. #include <Xm/PushB.h>
  56. #include <Xm/PushBG.h>
  57. #include <Xm/RowColumn.h>
  58. #include <Xm/SashP.h>
  59. #include <Xm/Scale.h>
  60. #include <Xm/ScrollBar.h>
  61. #include <Xm/ScrolledW.h>
  62. #include <Xm/SelectioB.h>
  63. #include <Xm/Separator.h>
  64. #include <Xm/SeparatoG.h>
  65. #include <Xm/SSpinB.h>
  66. #include <Xm/TearOffBP.h>
  67. #include <Xm/Text.h>
  68. #include <Xm/TextF.h>
  69. #include <Xm/ToggleB.h>
  70. #include <Xm/ToggleBG.h>
  71. #include <Dt/HelpDialog.h>
  72. #include <Dt/HelpQuickD.h>
  73. #include <Dt/Print.h>
  74. #include "dtksh.h"
  75. #include "xmksh.h"
  76. #include "dtkcmds.h"
  77. #include "widget.h"
  78. #include "xmwidgets.h"
  79. #include "msgs.h"
  80. static discInfo * setArrowDisciplines( void ) ;
  81. static discInfo * setComboDisciplines( void ) ;
  82. static discInfo * setCmdDisciplines( void ) ;
  83. static discInfo * setDAreaDisciplines( void ) ;
  84. static discInfo * setDBtnDisciplines( void ) ;
  85. static discInfo * setDtPrintSetupProcDisciplines( void ) ;
  86. static discInfo * setFSelDisciplines( void ) ;
  87. static discInfo * setListDisciplines( void ) ;
  88. static discInfo * setPBtnDisciplines( void ) ;
  89. static discInfo * setRCDisciplines( void ) ;
  90. static discInfo * setScaleDisciplines( void ) ;
  91. static discInfo * setSBarDisciplines( void ) ;
  92. static discInfo * setSWinDisciplines( void ) ;
  93. static discInfo * setSBoxDisciplines( void ) ;
  94. static discInfo * setTextDisciplines( void ) ;
  95. static discInfo * setTBtnDisciplines( void ) ;
  96. static discInfo * setHelpDisciplines( void ) ;
  97. static Namdisc_t arrowDisc={0, NULL, NULL, NULL, NULL,
  98. (Namval_t *(*)())arrowCreateDisc, NULL, NULL};
  99. static Namdisc_t comboDisc={0, NULL, NULL, NULL, NULL,
  100. (Namval_t *(*)())comboCreateDisc, NULL, NULL};
  101. static Namdisc_t cmdDisc={0, NULL, NULL, NULL, NULL,
  102. (Namval_t *(*)())cmdCreateDisc, NULL, NULL};
  103. static Namdisc_t dAreaDisc={0, NULL, NULL, NULL, NULL,
  104. (Namval_t *(*)())dAreaCreateDisc, NULL, NULL};
  105. static Namdisc_t dbtnDisc ={0, NULL, NULL, NULL, NULL,
  106. (Namval_t *(*)())dbtnCreateDisc, NULL, NULL};
  107. static Namdisc_t dtPrintDisc ={0, NULL, NULL, NULL, NULL,
  108. (Namval_t *(*)())dtPrintSetupProcDisc, NULL, NULL};
  109. static Namdisc_t fselDisc={0, NULL, NULL, NULL, NULL,
  110. (Namval_t *(*)())fselCreateDisc, NULL, NULL};
  111. static Namdisc_t listDisc={0, NULL, NULL, NULL, NULL,
  112. (Namval_t *(*)())listCreateDisc, NULL, NULL};
  113. static Namdisc_t pbtnDisc={0, NULL, NULL, NULL, NULL,
  114. (Namval_t *(*)())pbtnCreateDisc, NULL, NULL};
  115. static Namdisc_t rcDisc={0, NULL, NULL, NULL, NULL,
  116. (Namval_t *(*)())rcCreateDisc, NULL, NULL};
  117. static Namdisc_t scaleDisc={0, NULL, NULL, NULL, NULL,
  118. (Namval_t *(*)()) scaleCreateDisc, NULL, NULL};
  119. static Namdisc_t sbarDisc={0, NULL, NULL, NULL, NULL,
  120. (Namval_t *(*)())sbarCreateDisc, NULL, NULL};
  121. static Namdisc_t swinDisc={0, NULL, NULL, NULL, NULL,
  122. (Namval_t *(*)())swinCreateDisc, NULL, NULL};
  123. static Namdisc_t sboxDisc={0, NULL, NULL, NULL, NULL,
  124. (Namval_t *(*)())sboxCreateDisc, NULL, NULL};
  125. static Namdisc_t textDisc={0, NULL, NULL, NULL, NULL,
  126. (Namval_t *(*)())textCreateDisc, NULL, NULL};
  127. static Namdisc_t textDisc2={0, NULL, NULL, NULL, NULL,
  128. (Namval_t *(*)())textCreateDisc2, NULL, NULL};
  129. static Namdisc_t tbtnDisc={0, NULL, NULL, NULL, NULL,
  130. (Namval_t *(*)())tbtnCreateDisc, NULL, NULL};
  131. static Namdisc_t dftDisc={0, NULL, NULL, NULL, NULL,
  132. (Namval_t *(*)())dftCreateDisc, NULL, NULL};
  133. static Namdisc_t helpDisc={0, NULL, NULL, NULL, NULL,
  134. (Namval_t *(*)())helpCreateDisc, NULL, NULL};
  135. /*
  136. * The main window fixups are required because of a Motif bug; the
  137. * resources were typed as XmRWindows, instead of XmRWidgets.
  138. */
  139. resfixup_t mainwindow_fixups[] = {
  140. { "menuBar", XmCMenuBar, XtRWidget, sizeof(Widget) },
  141. { "commandWindow", XmCCommandWindow, XtRWidget, sizeof(Widget) },
  142. { "messageWindow", XmCMessageWindow, XtRWidget, sizeof(Widget) },
  143. { NULL }
  144. };
  145. /*
  146. * The help fixups are required to overcome name overlaps between other
  147. * widgets.
  148. */
  149. resfixup_t helpDialogs_fixups[] = {
  150. { "helpType", DtCHelpType, "HelpType", sizeof(unsigned char) },
  151. { "scrollBarDisplayPolicy", XmCScrollBarDisplayPolicy,
  152. "HelpScrollBarDisplayPolicy",
  153. sizeof(char) },
  154. { NULL }
  155. };
  156. /*
  157. * The following fixups are required to force the resource type to be one
  158. * we have defined, so that our special converter will work. Typically,
  159. * there is no default StringTable to String converter.
  160. */
  161. resfixup_t list_fixups[] = {
  162. { "items", XmCItems, "ListItems", sizeof(XmStringTable) },
  163. { "selectedItems", XmCSelectedItems, "SelectedListItems",
  164. sizeof(XmStringTable) },
  165. { NULL }
  166. };
  167. resfixup_t command_fixups[] = {
  168. { "historyItems", XmCItems, "SelBoxItems", sizeof(XmStringTable) },
  169. { NULL }
  170. };
  171. resfixup_t selbox_fixups[] = {
  172. { "listItems", XmCItems, "SelBoxItems", sizeof(XmStringTable) },
  173. { NULL }
  174. };
  175. resfixup_t fileselbox_fixups[] = {
  176. { "fileListItems", XmCItems, "FSFileItems", sizeof(XmStringTable) },
  177. { "dirListItems", XmCItems, "FSDirItems", sizeof(XmStringTable) },
  178. { NULL }
  179. };
  180. /*
  181. * The following shell resources are 'fixed' to allow them to be referred
  182. * to in a shell script by their symbolic names, as opposed to their
  183. * integer values. These also need to be force onto any subclasses.
  184. */
  185. resfixup_t wmshell_fixups[] = {
  186. { "winGravity", XtCWinGravity, "XWinGravity", sizeof(int) },
  187. { NULL }
  188. };
  189. resfixup_t vendor_fixups[] = {
  190. { "winGravity", XtCWinGravity, "XWinGravity", sizeof(int) },
  191. { "mwmDecorations", XmCMwmDecorations, "MWMDecoration", sizeof(long) },
  192. { "mwmFunctions", XmCMwmFunctions, "MWMFunctions", sizeof(long) },
  193. { "mwmInputMode", XmCMwmInputMode, "MWMInputMode", sizeof(long) },
  194. { NULL }
  195. };
  196. /*
  197. * The following resource needs to be 'fixed' because it not only accepts
  198. * an integer value, but it also supports one specially defined value.
  199. */
  200. resfixup_t panedwin_con_fixups[] = {
  201. {"positionIndex", XmCPositionIndex, "PanedWinPosIndex", sizeof(short)},
  202. { NULL }
  203. };
  204. classtab_t C[] = {
  205. /*
  206. * NOTE: Keep these in alphabetical order
  207. * because the initialize code below depends on
  208. * the order.
  209. */
  210. { "XmArrowButton", NULL, NULL, NULL, NULL, NULL, NULL},
  211. { "XmArrowButtonGadget", NULL, NULL, NULL, NULL, NULL, NULL},
  212. { "XmBulletinBoard", NULL, NULL, NULL, NULL, NULL, NULL},
  213. { "XmCascadeButton", NULL, NULL, NULL, NULL, NULL, NULL},
  214. { "XmCascadeButtonGadget", NULL, NULL, NULL, NULL, NULL, NULL},
  215. { "XmComboBox", NULL, NULL, NULL, NULL, NULL, NULL},
  216. { "XmCommand", NULL, NULL, NULL, NULL, NULL, NULL},
  217. { "XmDialogShell", NULL, NULL, NULL, NULL, NULL, NULL},
  218. { "XmDrawingArea", NULL, NULL, NULL, NULL, NULL, NULL},
  219. { "XmDrawnButton", NULL, NULL, NULL, NULL, NULL, NULL},
  220. { "XmFileSelectionBox", NULL, NULL, NULL, NULL, NULL, NULL},
  221. { "XmForm", NULL, NULL, NULL, NULL, NULL, NULL},
  222. { "XmFrame", NULL, NULL, NULL, NULL, NULL, NULL},
  223. { "XmLabel", NULL, NULL, NULL, NULL, NULL, NULL},
  224. { "XmLabelGadget", NULL, NULL, NULL, NULL, NULL, NULL},
  225. { "XmList", NULL, NULL, NULL, NULL, NULL, NULL},
  226. { "XmMainWindow", NULL, NULL, NULL, NULL, NULL, NULL},
  227. { "XmMenuShell", NULL, NULL, NULL, NULL, NULL, NULL},
  228. { "XmMessageBox", NULL, NULL, NULL, NULL, NULL, NULL},
  229. { "XmPanedWindow", NULL, NULL, NULL, NULL, NULL, NULL},
  230. { "XmPushButton", NULL, NULL, NULL, NULL, NULL, NULL},
  231. { "XmPushButtonGadget", NULL, NULL, NULL, NULL, NULL, NULL},
  232. { "XmRowColumn", NULL, NULL, NULL, NULL, NULL, NULL},
  233. { "XmScale", NULL, NULL, NULL, NULL, NULL, NULL},
  234. { "XmScrollBar", NULL, NULL, NULL, NULL, NULL, NULL},
  235. { "XmScrolledWindow", NULL, NULL, NULL, NULL, NULL, NULL},
  236. { "XmSelectionBox", NULL, NULL, NULL, NULL, NULL, NULL},
  237. { "XmSeparator", NULL, NULL, NULL, NULL, NULL, NULL},
  238. { "XmSeparatorGadget", NULL, NULL, NULL, NULL, NULL, NULL},
  239. { "XmSimpleSpinBox", NULL, NULL, NULL, NULL, NULL, NULL},
  240. { "XmTearOffButton", NULL, NULL, NULL, NULL, NULL, NULL},
  241. { "XmText", NULL, NULL, NULL, NULL, NULL, NULL},
  242. { "XmTextField", NULL, NULL, NULL, NULL, NULL, NULL},
  243. { "XmToggleButton", NULL, NULL, NULL, NULL, NULL, NULL},
  244. { "XmToggleButtonGadget", NULL, NULL, NULL, NULL, NULL, NULL},
  245. { "ApplicationShell", NULL, NULL, NULL, NULL, NULL, NULL},
  246. { "OverrideShell", NULL, NULL, NULL, NULL, NULL, NULL},
  247. { "Shell", NULL, NULL, NULL, NULL, NULL, NULL},
  248. { "TopLevelShell", NULL, NULL, NULL, NULL, NULL, NULL},
  249. { "TransientShell", NULL, NULL, NULL, NULL, NULL, NULL},
  250. { "VendorShell", NULL, NULL, NULL, NULL, NULL, NULL},
  251. { "WMShell", NULL, NULL, NULL, NULL, NULL, NULL},
  252. { "DtHelpDialog", NULL, NULL, NULL, NULL, NULL, NULL},
  253. { "DtHelpQuickDialog", NULL, NULL, NULL, NULL, NULL, NULL},
  254. { "DtPrintSetupBox", NULL, NULL, NULL, NULL, NULL, NULL},
  255. { NULL }
  256. };
  257. void
  258. toolkit_init_widgets( void )
  259. {
  260. int i, n = 0;
  261. struct namnod *nam;
  262. if (C[0].class != NULL)
  263. return;
  264. /*
  265. * NOTE: keep these in alphabetical order because
  266. * the widget table above is in the same order.
  267. */
  268. C[n].disciplines = setArrowDisciplines();
  269. C[n++].class = xmArrowButtonWidgetClass;;
  270. C[n].disciplines = setArrowDisciplines();
  271. C[n++].class = xmArrowButtonGadgetClass;;
  272. C[n++].class = xmBulletinBoardWidgetClass;
  273. C[n++].class = xmCascadeButtonWidgetClass;
  274. C[n++].class = xmCascadeButtonGadgetClass;
  275. C[n].disciplines = setComboDisciplines();
  276. C[n++].class = xmComboBoxWidgetClass;
  277. C[n].disciplines = setCmdDisciplines();
  278. C[n].resfix = &command_fixups[0];
  279. C[n++].class = xmCommandWidgetClass;
  280. C[n].resfix = &vendor_fixups[0];
  281. C[n++].class = xmDialogShellWidgetClass;
  282. C[n].disciplines = setDAreaDisciplines();
  283. C[n++].class = xmDrawingAreaWidgetClass;
  284. C[n].disciplines = setDBtnDisciplines();
  285. C[n++].class = xmDrawnButtonWidgetClass;
  286. C[n].resfix = &fileselbox_fixups[0];
  287. C[n].disciplines = setFSelDisciplines();
  288. C[n++].class = xmFileSelectionBoxWidgetClass;
  289. C[n++].class = xmFormWidgetClass;
  290. C[n++].class = xmFrameWidgetClass;
  291. C[n++].class = xmLabelWidgetClass;
  292. C[n++].class = xmLabelGadgetClass;
  293. C[n].resfix = &list_fixups[0];
  294. C[n].disciplines = setListDisciplines();
  295. C[n++].class = xmListWidgetClass;
  296. C[n].resfix = &mainwindow_fixups[0];
  297. C[n++].class = xmMainWindowWidgetClass;
  298. C[n++].class = xmMenuShellWidgetClass;
  299. C[n++].class = xmMessageBoxWidgetClass;
  300. C[n].confix = &panedwin_con_fixups[0];
  301. C[n++].class = xmPanedWindowWidgetClass;
  302. C[n].disciplines = setPBtnDisciplines();
  303. C[n++].class = xmPushButtonWidgetClass;
  304. C[n].disciplines = setPBtnDisciplines();
  305. C[n++].class = xmPushButtonGadgetClass;
  306. C[n].disciplines = setRCDisciplines();
  307. C[n++].class = xmRowColumnWidgetClass;
  308. C[n].disciplines = setScaleDisciplines();
  309. C[n++].class = xmScaleWidgetClass;
  310. C[n].disciplines = setSBarDisciplines();
  311. C[n++].class = xmScrollBarWidgetClass;
  312. C[n].disciplines = setSWinDisciplines();
  313. C[n++].class = xmScrolledWindowWidgetClass;
  314. C[n].disciplines = setSBoxDisciplines();
  315. C[n].resfix = &selbox_fixups[0];
  316. C[n++].class = xmSelectionBoxWidgetClass;
  317. C[n++].class = xmSeparatorWidgetClass;
  318. C[n++].class = xmSeparatorGadgetClass;
  319. C[n++].class = xmSimpleSpinBoxWidgetClass;
  320. C[n++].class = xmTearOffButtonWidgetClass;
  321. C[n].disciplines = setTextDisciplines();
  322. C[n++].class = xmTextWidgetClass;
  323. C[n].disciplines = setTextDisciplines();
  324. C[n++].class = xmTextFieldWidgetClass;
  325. C[n].disciplines = setTBtnDisciplines();
  326. C[n++].class = xmToggleButtonWidgetClass;
  327. C[n].disciplines = setTBtnDisciplines();
  328. C[n++].class = xmToggleButtonGadgetClass;
  329. C[n].resfix = &vendor_fixups[0];
  330. C[n++].class = applicationShellWidgetClass;
  331. C[n++].class = overrideShellWidgetClass;
  332. C[n++].class = shellWidgetClass;
  333. C[n].resfix = &vendor_fixups[0];
  334. C[n++].class = topLevelShellWidgetClass;
  335. C[n].resfix = &vendor_fixups[0];
  336. C[n++].class = transientShellWidgetClass;
  337. C[n].resfix = &vendor_fixups[0];
  338. C[n++].class = vendorShellWidgetClass;
  339. C[n].resfix = &wmshell_fixups[0];
  340. C[n++].class = wmShellWidgetClass;
  341. C[n].resfix = &helpDialogs_fixups[0];
  342. C[n].disciplines = setHelpDisciplines();
  343. C[n++].class = dtHelpDialogWidgetClass;
  344. C[n].resfix = &helpDialogs_fixups[0];
  345. C[n].disciplines = setHelpDisciplines();
  346. C[n++].class = dtHelpQuickDialogWidgetClass;
  347. C[n].disciplines = setDtPrintSetupProcDisciplines();
  348. C[n++].class = dtPrintSetupBoxWidgetClass;
  349. }
  350. /*****************************************************************************
  351. *****************************************************************************
  352. *
  353. * At initialization time, these functions create the structures which
  354. * map a callback name to its associated discipline table.
  355. *
  356. *****************************************************************************
  357. *****************************************************************************/
  358. static discInfo *
  359. setArrowDisciplines( void )
  360. {
  361. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
  362. info[0].callbackName = strdup(XmNactivateCallback);
  363. info[0].discipline = (void *)&arrowDisc;
  364. info[1].callbackName = strdup(XmNarmCallback);
  365. info[1].discipline = (void *)&arrowDisc;
  366. info[2].callbackName = strdup(XmNdisarmCallback);
  367. info[2].discipline = (void *)&arrowDisc;
  368. info[3].callbackName = NULL;
  369. info[3].discipline = NULL;
  370. return(info);
  371. }
  372. static discInfo *
  373. setComboDisciplines( void )
  374. {
  375. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 2);
  376. info[0].callbackName = strdup(XmNselectionCallback);
  377. info[0].discipline = (void *)&comboDisc;
  378. info[1].callbackName = NULL;
  379. info[1].discipline = NULL;
  380. return(info);
  381. }
  382. static discInfo *
  383. setCmdDisciplines( void )
  384. {
  385. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 3);
  386. info[0].callbackName = strdup(XmNcommandChangedCallback);
  387. info[0].discipline = (void *)&cmdDisc;
  388. info[1].callbackName = strdup(XmNcommandEnteredCallback);
  389. info[1].discipline = (void *)&cmdDisc;
  390. info[2].callbackName = NULL;
  391. info[2].discipline = NULL;
  392. return(info);
  393. }
  394. static discInfo *
  395. setDAreaDisciplines( void )
  396. {
  397. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
  398. info[0].callbackName = strdup(XmNexposeCallback);
  399. info[0].discipline = (void *)&dAreaDisc;
  400. info[1].callbackName = strdup(XmNinputCallback);
  401. info[1].discipline = (void *)&dAreaDisc;
  402. info[2].callbackName = strdup(XmNresizeCallback);
  403. info[2].discipline = (void *)&dAreaDisc;
  404. info[3].callbackName = NULL;
  405. info[3].discipline = NULL;
  406. return(info);
  407. }
  408. static discInfo *
  409. setDBtnDisciplines( void )
  410. {
  411. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 6);
  412. info[0].callbackName = strdup(XmNactivateCallback);
  413. info[0].discipline = (void *)&dbtnDisc;
  414. info[1].callbackName = strdup(XmNarmCallback);
  415. info[1].discipline = (void *)&dbtnDisc;
  416. info[2].callbackName = strdup(XmNdisarmCallback);
  417. info[2].discipline = (void *)&dbtnDisc;
  418. info[3].callbackName = strdup(XmNexposeCallback);
  419. info[3].discipline = (void *)&dbtnDisc;
  420. info[4].callbackName = strdup(XmNresizeCallback);
  421. info[4].discipline = (void *)&dbtnDisc;
  422. info[5].callbackName = NULL;
  423. info[5].discipline = NULL;
  424. return(info);
  425. }
  426. static discInfo *
  427. setDtPrintSetupProcDisciplines( void )
  428. {
  429. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 2);
  430. /* Since the same discipline is used for all of DtPrintSetupBox's
  431. * DtPrintSetupProcs, we can use DtRPrintSetupProc for all of them
  432. * to avoid defining unnecessary info entries.
  433. */
  434. info[0].callbackName = strdup(DtRPrintSetupProc);
  435. info[0].discipline = (void *)&dtPrintDisc;
  436. info[1].callbackName = NULL;
  437. info[1].discipline = NULL;
  438. return(info);
  439. }
  440. static discInfo *
  441. setFSelDisciplines( void )
  442. {
  443. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 5);
  444. info[0].callbackName = strdup(XmNapplyCallback);
  445. info[0].discipline = (void *)&fselDisc;
  446. info[1].callbackName = strdup(XmNcancelCallback);
  447. info[1].discipline = (void *)&fselDisc;
  448. info[2].callbackName = strdup(XmNnoMatchCallback);
  449. info[2].discipline = (void *)&fselDisc;
  450. info[3].callbackName = strdup(XmNokCallback);
  451. info[3].discipline = (void *)&fselDisc;
  452. info[4].callbackName = NULL;
  453. info[4].discipline = NULL;
  454. return(info);
  455. }
  456. static discInfo *
  457. setListDisciplines( void )
  458. {
  459. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 6);
  460. info[0].callbackName = strdup(XmNbrowseSelectionCallback);
  461. info[0].discipline = (void *)&listDisc;
  462. info[1].callbackName = strdup(XmNdefaultActionCallback);
  463. info[1].discipline = (void *)&listDisc;
  464. info[2].callbackName = strdup(XmNextendedSelectionCallback);
  465. info[2].discipline = (void *)&listDisc;
  466. info[3].callbackName = strdup(XmNmultipleSelectionCallback);
  467. info[3].discipline = (void *)&listDisc;
  468. info[4].callbackName = strdup(XmNsingleSelectionCallback);
  469. info[4].discipline = (void *)&listDisc;
  470. info[5].callbackName = NULL;
  471. info[5].discipline = NULL;
  472. return(info);
  473. }
  474. static discInfo *
  475. setPBtnDisciplines( void )
  476. {
  477. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
  478. info[0].callbackName = strdup(XmNactivateCallback);
  479. info[0].discipline = (void *)&pbtnDisc;
  480. info[1].callbackName = strdup(XmNarmCallback);
  481. info[1].discipline = (void *)&pbtnDisc;
  482. info[2].callbackName = strdup(XmNdisarmCallback);
  483. info[2].discipline = (void *)&pbtnDisc;
  484. info[3].callbackName = NULL;
  485. info[3].discipline = NULL;
  486. return(info);
  487. }
  488. static discInfo *
  489. setRCDisciplines( void )
  490. {
  491. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 6);
  492. info[0].callbackName = strdup(XmNentryCallback);
  493. info[0].discipline = (void *)&rcDisc;
  494. info[1].callbackName = strdup(XmNmapCallback);
  495. info[1].discipline = (void *)&rcDisc;
  496. info[2].callbackName = strdup(XmNtearOffMenuActivateCallback);
  497. info[2].discipline = (void *)&rcDisc;
  498. info[3].callbackName = strdup(XmNtearOffMenuDeactivateCallback);
  499. info[3].discipline = (void *)&rcDisc;
  500. info[4].callbackName = strdup(XmNunmapCallback);
  501. info[4].discipline = (void *)&rcDisc;
  502. info[5].callbackName = NULL;
  503. info[5].discipline = NULL;
  504. return(info);
  505. }
  506. static discInfo *
  507. setScaleDisciplines( void )
  508. {
  509. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 3);
  510. info[0].callbackName = strdup(XmNdragCallback);
  511. info[0].discipline = (void *)&scaleDisc;
  512. info[1].callbackName = strdup(XmNvalueChangedCallback);
  513. info[1].discipline = (void *)&scaleDisc;
  514. info[2].callbackName = NULL;
  515. info[2].discipline = NULL;
  516. return(info);
  517. }
  518. static discInfo *
  519. setSBarDisciplines( void )
  520. {
  521. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 9);
  522. info[0].callbackName = strdup(XmNdecrementCallback);
  523. info[0].discipline = (void *)&sbarDisc;
  524. info[1].callbackName = strdup(XmNdragCallback);
  525. info[1].discipline = (void *)&sbarDisc;
  526. info[2].callbackName = strdup(XmNincrementCallback);
  527. info[2].discipline = (void *)&sbarDisc;
  528. info[3].callbackName = strdup(XmNpageDecrementCallback);
  529. info[3].discipline = (void *)&sbarDisc;
  530. info[4].callbackName = strdup(XmNpageIncrementCallback);
  531. info[4].discipline = (void *)&sbarDisc;
  532. info[5].callbackName = strdup(XmNtoBottomCallback);
  533. info[5].discipline = (void *)&sbarDisc;
  534. info[6].callbackName = strdup(XmNtoTopCallback);
  535. info[6].discipline = (void *)&sbarDisc;
  536. info[7].callbackName = strdup(XmNvalueChangedCallback);
  537. info[7].discipline = (void *)&sbarDisc;
  538. info[8].callbackName = NULL;
  539. info[8].discipline = NULL;
  540. return(info);
  541. }
  542. static discInfo *
  543. setSWinDisciplines( void )
  544. {
  545. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 2);
  546. info[0].callbackName = strdup(XmNtraverseObscuredCallback);
  547. info[0].discipline = (void *)&swinDisc;
  548. info[1].callbackName = NULL;
  549. info[1].discipline = NULL;
  550. return(info);
  551. }
  552. static discInfo *
  553. setSBoxDisciplines( void )
  554. {
  555. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 5);
  556. info[0].callbackName = strdup(XmNapplyCallback);
  557. info[0].discipline = (void *)&sboxDisc;
  558. info[1].callbackName = strdup(XmNcancelCallback);
  559. info[1].discipline = (void *)&sboxDisc;
  560. info[2].callbackName = strdup(XmNnoMatchCallback);
  561. info[2].discipline = (void *)&sboxDisc;
  562. info[3].callbackName = strdup(XmNokCallback);
  563. info[3].discipline = (void *)&sboxDisc;
  564. info[4].callbackName = NULL;
  565. info[4].discipline = NULL;
  566. return(info);
  567. }
  568. static discInfo *
  569. setTextDisciplines( void )
  570. {
  571. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 10);
  572. info[0].callbackName = strdup(XmNactivateCallback);
  573. info[0].discipline = (void *)&dftDisc;
  574. info[1].callbackName = strdup(XmNfocusCallback);
  575. info[1].discipline = (void *)&dftDisc;
  576. info[2].callbackName = strdup(XmNgainPrimaryCallback);
  577. info[2].discipline = (void *)&dftDisc;
  578. info[3].callbackName = strdup(XmNlosePrimaryCallback);
  579. info[3].discipline = (void *)&dftDisc;
  580. info[4].callbackName = strdup(XmNlosingFocusCallback);
  581. info[4].discipline = (void *)&textDisc;
  582. info[5].callbackName = strdup(XmNmodifyVerifyCallback);
  583. info[5].discipline = (void *)&textDisc;
  584. info[6].callbackName = strdup(XmNmodifyVerifyCallbackWcs);
  585. info[6].discipline = (void *)&textDisc2;
  586. info[7].callbackName = strdup(XmNmotionVerifyCallback);
  587. info[7].discipline = (void *)&textDisc;
  588. info[8].callbackName = strdup(XmNvalueChangedCallback);
  589. info[8].discipline = (void *)&dftDisc;
  590. info[9].callbackName = NULL;
  591. info[9].discipline = NULL;
  592. return(info);
  593. }
  594. static discInfo *
  595. setTBtnDisciplines( void )
  596. {
  597. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
  598. info[0].callbackName = strdup(XmNarmCallback);
  599. info[0].discipline = (void *)&tbtnDisc;
  600. info[1].callbackName = strdup(XmNdisarmCallback);
  601. info[1].discipline = (void *)&tbtnDisc;
  602. info[2].callbackName = strdup(XmNvalueChangedCallback);
  603. info[2].discipline = (void *)&tbtnDisc;
  604. info[3].callbackName = NULL;
  605. info[3].discipline = NULL;
  606. return(info);
  607. }
  608. static discInfo *
  609. setHelpDisciplines( void )
  610. {
  611. discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 3);
  612. info[0].callbackName = strdup(DtNhyperLinkCallback);
  613. info[0].discipline = (void *)&helpDisc;
  614. info[1].callbackName = strdup(DtNcloseCallback);
  615. info[1].discipline = (void *)&helpDisc;
  616. info[2].callbackName = NULL;
  617. info[2].discipline = NULL;
  618. return(info);
  619. }