home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / windows / x / motif / 8312 < prev    next >
Encoding:
Text File  |  1993-01-04  |  2.9 KB  |  84 lines

  1. Newsgroups: comp.windows.x.motif
  2. Path: sparky!uunet!enterpoop.mit.edu!paperboy.osf.org!moonshine!daniel
  3. From: daniel@moonshine.osf.org (Daniel Dardailler)
  4. Subject: Re: Motif 1.2 widgets with non-Motif parents
  5. Message-ID: <1993Jan4.204131.13775@osf.org>
  6. Sender: daniel@moonshine (Daniel Dardailler)
  7. Organization: Open Software Foundation, Motif Team
  8. References:  <FELIX.93Jan4180727@idefix.laas.fr>
  9. Distribution: comp
  10. Date: Mon, 4 Jan 1993 20:41:31 GMT
  11. Lines: 71
  12.  
  13. 1.2 has introduced a bug that precludes mixing of Motif and non-Motif
  14. widgets.
  15.  
  16. The problem is a blind access of the core class extension
  17. record without proper checking.
  18.  
  19. The bug has been fixed in 1.2.2.
  20.  
  21. In the mean time, if you have the problem,
  22. you need to do one of the following:
  23.     - subclass out of a Motif widget
  24.     - add a Motif core class extension to your widget
  25.  
  26. I already post something describing how to implement option 2 in the past.
  27. Here it is again:
  28.  
  29. In your widget JoeWidget.c, you need to create a Motif extension record.
  30. (the typedef you already get with XmP.h I think)
  31.  
  32. static XmBaseClassExtRec baseClassExtRec = {
  33.     NULL,
  34.     NULLQUARK,
  35.     XmBaseClassExtVersion,
  36.     sizeof(XmBaseClassExtRec),
  37.     NULL,                /* InitializePrehook    */
  38.     NULL,                /* SetValuesPrehook    */
  39.     NULL,                /* InitializePosthook    */
  40.     NULL,                /* SetValuesPosthook    */
  41.     NULL,                /* secondaryObjectClass    */
  42.     NULL,                /* secondaryCreate    */
  43.     NULL,                       /* getSecRes data    */
  44.     { 0 },                  /* fastSubclass flags    */
  45.     NULL,                /* getValuesPrehook    */
  46.     NULL,                /* getValuesPosthook    */
  47.     NULL,                               /* classPartInitPrehook */
  48.     NULL,                               /* classPartInitPosthook*/
  49.     NULL,                               /* ext_resources        */
  50.     NULL,                               /* compiled_ext_resources*/
  51.     0,                                  /* num_ext_resources    */
  52.     FALSE,                              /* use_sub_resources    */
  53.     NULL,                               /* widgetNavigable      */
  54.     NULL                                /* focusChange          */
  55. };
  56.  
  57. /******* then you stuck it in your class record:  *******/
  58.  
  59. JoeClassRec joeClassRec =
  60. {
  61.    {            /* core_class fields      */
  62.       (WidgetClass) &superJoeClassRec,        /* superclass         */
  63.       "Joe",                        /* class_name         */
  64.       sizeof(JoeRec),                    /* widget_size        */
  65.       ClassInitialize,                    /* class_initialize   */
  66.       ClassPartInitialize,            /* class_part_init    */
  67.       ..........
  68.       QueryGeometry,                        /* query_geometry     */
  69.       NULL,                                 /* display_accelerator*/
  70.       (XtPointer)&baseClassExtRec,              /* extension          */
  71.    },
  72.  
  73.  
  74. /******* and you also initialize the record_type   
  75.          (can't be done statically becasue it's a variable *******/
  76.  
  77. static void ClassInitialize( void )
  78. {   
  79.   baseClassExtRec.record_type = XmQmotif ;
  80. }
  81.  
  82.  
  83. I haven't actually test this code, tell me if there is a problem.
  84.