emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lwlib/lwlib-Xm.c


From: Juanma Barranquero
Subject: [Emacs-diffs] Changes to emacs/lwlib/lwlib-Xm.c
Date: Tue, 04 Feb 2003 09:08:25 -0500

Index: emacs/lwlib/lwlib-Xm.c
diff -c emacs/lwlib/lwlib-Xm.c:1.46 emacs/lwlib/lwlib-Xm.c:1.47
*** emacs/lwlib/lwlib-Xm.c:1.46 Sun Jan 26 08:06:48 2003
--- emacs/lwlib/lwlib-Xm.c      Tue Feb  4 09:08:23 2003
***************
*** 3,15 ****
  
  This file is part of the Lucid Widget Library.
  
! The Lucid Widget Library is free software; you can redistribute it and/or 
  modify it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 1, or (at your option)
  any later version.
  
  The Lucid Widget Library is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
--- 3,15 ----
  
  This file is part of the Lucid Widget Library.
  
! The Lucid Widget Library is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 1, or (at your option)
  any later version.
  
  The Lucid Widget Library is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
***************
*** 72,78 ****
  
  
  /* Structures to keep destroyed instances */
! typedef struct _destroyed_instance 
  {
    char*               name;
    char*               type;
--- 72,78 ----
  
  
  /* Structures to keep destroyed instances */
! typedef struct _destroyed_instance
  {
    char*               name;
    char*               type;
***************
*** 188,194 ****
    instance->next = NULL;
    return instance;
  }
!                        
  static void
  free_destroyed_instance (instance)
       destroyed_instance* instance;
--- 188,194 ----
    instance->next = NULL;
    return instance;
  }
! 
  static void
  free_destroyed_instance (instance)
       destroyed_instance* instance;
***************
*** 210,216 ****
  lw_motif_widget_p (widget)
       Widget widget;
  {
!   return 
      XtClass (widget) == xmDialogShellWidgetClass
        || XmIsPrimitive (widget) || XmIsManager (widget) || XmIsGadget 
(widget);
  }
--- 210,216 ----
  lw_motif_widget_p (widget)
       Widget widget;
  {
!   return
      XtClass (widget) == xmDialogShellWidgetClass
        || XmIsPrimitive (widget) || XmIsManager (widget) || XmIsGadget 
(widget);
  }
***************
*** 222,228 ****
  {
    XtResource resource;
    XmString result = 0;
!   
    resource.resource_name = name;
    resource.resource_class = XmCXmString;
    resource.resource_type = XmRXmString;
--- 222,228 ----
  {
    XtResource resource;
    XmString result = 0;
! 
    resource.resource_name = name;
    resource.resource_class = XmCXmString;
    resource.resource_type = XmRXmString;
***************
*** 254,260 ****
        XtUnmanageChildren (children + first_child_to_destroy,
                          number - first_child_to_destroy);
  
!       /* Unmanage all children and destroy them.  They will only be 
         really destroyed when we get out of DispatchEvent.  */
        for (i = first_child_to_destroy; i < number; i++)
        {
--- 254,260 ----
        XtUnmanageChildren (children + first_child_to_destroy,
                          number - first_child_to_destroy);
  
!       /* Unmanage all children and destroy them.  They will only be
         really destroyed when we get out of DispatchEvent.  */
        for (i = first_child_to_destroy; i < number; i++)
        {
***************
*** 265,271 ****
             XtCompositeChildren.  So get it out of the cascade button
             and free it.  If this child is not a cascade button,
             then submenu should remain unchanged.  */
!         XtSetArg (al[0], XmNsubMenuId, &submenu); 
          XtGetValues (children[i], al, 1);
          if (submenu)
              {
--- 265,271 ----
             XtCompositeChildren.  So get it out of the cascade button
             and free it.  If this child is not a cascade button,
             then submenu should remain unchanged.  */
!         XtSetArg (al[0], XmNsubMenuId, &submenu);
          XtGetValues (children[i], al, 1);
          if (submenu)
              {
***************
*** 329,335 ****
     the value to update.
  
     Menus:
!    
     Emacs fills VAL->name with the text to display in the menu, and
     sets VAL->value to null.  Function make_menu_in_widget creates
     widgets with VAL->name as resource name.  This works because the
--- 329,335 ----
     the value to update.
  
     Menus:
! 
     Emacs fills VAL->name with the text to display in the menu, and
     sets VAL->value to null.  Function make_menu_in_widget creates
     widgets with VAL->name as resource name.  This works because the
***************
*** 371,380 ****
            XmStringCreateLtoR (val->value, XmSTRING_DEFAULT_CHARSET);
          XtSetArg (al [ac], XmNlabelString, built_string); ac++;
        }
!       
        XtSetArg (al [ac], XmNlabelType, XmSTRING); ac++;
      }
!   
    if (val->key)
      {
        key_string = XmStringCreateLtoR (val->key, XmSTRING_DEFAULT_CHARSET);
--- 371,380 ----
            XmStringCreateLtoR (val->value, XmSTRING_DEFAULT_CHARSET);
          XtSetArg (al [ac], XmNlabelString, built_string); ac++;
        }
! 
        XtSetArg (al [ac], XmNlabelType, XmSTRING); ac++;
      }
! 
    if (val->key)
      {
        key_string = XmStringCreateLtoR (val->key, XmSTRING_DEFAULT_CHARSET);
***************
*** 566,572 ****
        XtSetArg (al[ac], XmNsensitive, cur->enabled); ac++;
        XtSetArg (al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
        XtSetArg (al[ac], XmNuserData, cur->call_data); ac++;
!       
        if (instance->pop_up_p && !cur->contents && !cur->call_data
          && !lw_separator_p (cur->name, &separator, 1))
        {
--- 566,572 ----
        XtSetArg (al[ac], XmNsensitive, cur->enabled); ac++;
        XtSetArg (al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
        XtSetArg (al[ac], XmNuserData, cur->call_data); ac++;
! 
        if (instance->pop_up_p && !cur->contents && !cur->call_data
          && !lw_separator_p (cur->name, &separator, 1))
        {
***************
*** 605,613 ****
              XtAddCallback (button, XmNarmCallback, xm_arm_callback, cur);
              XtAddCallback (button, XmNdisarmCallback, xm_arm_callback, cur);
            }
!         
          xm_update_label (instance, button, cur);
!         
          /* Add a callback that is called when the button is
             selected.  Toggle buttons don't support
             XmNactivateCallback, we use XmNvalueChangedCallback in
--- 605,613 ----
              XtAddCallback (button, XmNarmCallback, xm_arm_callback, cur);
              XtAddCallback (button, XmNdisarmCallback, xm_arm_callback, cur);
            }
! 
          xm_update_label (instance, button, cur);
! 
          /* Add a callback that is called when the button is
             selected.  Toggle buttons don't support
             XmNactivateCallback, we use XmNvalueChangedCallback in
***************
*** 684,690 ****
    menu = NULL;
    XtSetArg (al [ac], XmNsubMenuId, &menu); ac++;
    XtGetValues (widget, al, ac);
!   
    contents = val->contents;
  
    if (!menu)
--- 684,690 ----
    menu = NULL;
    XtSetArg (al [ac], XmNsubMenuId, &menu); ac++;
    XtGetValues (widget, al, ac);
! 
    contents = val->contents;
  
    if (!menu)
***************
*** 715,722 ****
          else
            {
              Widget button;
!             
!             /* The current menuitem is a XmPushButtonGadget, it 
                 needs to be replaced by a CascadeButtonGadget */
              XtDestroyWidget (widget_list[i]);
              menu = XmCreatePulldownMenu (parent, val->name, NULL, 0);
--- 715,722 ----
          else
            {
              Widget button;
! 
!             /* The current menuitem is a XmPushButtonGadget, it
                 needs to be replaced by a CascadeButtonGadget */
              XtDestroyWidget (widget_list[i]);
              menu = XmCreatePulldownMenu (parent, val->name, NULL, 0);
***************
*** 732,738 ****
  #endif
              button = XmCreateCascadeButton (parent, val->name, al, ac);
              xm_update_label (instance, button, val);
!             
              XtAddCallback (button, XmNcascadingCallback, 
xm_pull_down_callback,
                             (XtPointer)instance);
              XtManageChild (button);
--- 732,738 ----
  #endif
              button = XmCreateCascadeButton (parent, val->name, al, ac);
              xm_update_label (instance, button, val);
! 
              XtAddCallback (button, XmNcascadingCallback, 
xm_pull_down_callback,
                             (XtPointer)instance);
              XtManageChild (button);
***************
*** 779,785 ****
      {
        if (children)
        {
!         for (i = 0, cur = val->contents; 
                 (i < num_children
                && cur); /* how else to ditch unwanted children ?? - mgd */
               i++, cur = cur->next)
--- 779,785 ----
      {
        if (children)
        {
!         for (i = 0, cur = val->contents;
                 (i < num_children
                && cur); /* how else to ditch unwanted children ?? - mgd */
               i++, cur = cur->next)
***************
*** 867,884 ****
       Boolean deep_p;
  {
    WidgetClass class;
!   
    /* Mark as not edited */
    val->edited = False;
  
    /* Common to all widget types */
    XtSetSensitive (widget, val->enabled);
    XtVaSetValues (widget, XmNuserData, val->call_data, NULL);
!   
    /* Common to all label like widgets */
    if (XtIsSubclass (widget, xmLabelWidgetClass))
      xm_update_label (instance, widget, val);
!   
    class = XtClass (widget);
    /* Class specific things */
    if (class == xmPushButtonWidgetClass ||
--- 867,884 ----
       Boolean deep_p;
  {
    WidgetClass class;
! 
    /* Mark as not edited */
    val->edited = False;
  
    /* Common to all widget types */
    XtSetSensitive (widget, val->enabled);
    XtVaSetValues (widget, XmNuserData, val->call_data, NULL);
! 
    /* Common to all label like widgets */
    if (XtIsSubclass (widget, xmLabelWidgetClass))
      xm_update_label (instance, widget, val);
! 
    class = XtClass (widget);
    /* Class specific things */
    if (class == xmPushButtonWidgetClass ||
***************
*** 900,909 ****
        Boolean radiobox = 0;
        int ac = 0;
        Arg al [1];
!       
        XtSetArg (al [ac], XmNradioBehavior, &radiobox); ac++;
        XtGetValues (widget, al, ac);
!       
        if (radiobox)
        xm_update_radiobox (instance, widget, val);
        else
--- 900,909 ----
        Boolean radiobox = 0;
        int ac = 0;
        Arg al [1];
! 
        XtSetArg (al [ac], XmNradioBehavior, &radiobox); ac++;
        XtGetValues (widget, al, ac);
! 
        if (radiobox)
        xm_update_radiobox (instance, widget, val);
        else
***************
*** 940,946 ****
        val->call_data = old_wv->call_data;
        break;
        }
!   
    if (class == xmToggleButtonWidgetClass || class == 
xmToggleButtonGadgetClass)
      {
        XtVaGetValues (widget, XmNset, &val->selected, NULL);
--- 940,946 ----
        val->call_data = old_wv->call_data;
        break;
        }
! 
    if (class == xmToggleButtonWidgetClass || class == 
xmToggleButtonGadgetClass)
      {
        XtVaGetValues (widget, XmNset, &val->selected, NULL);
***************
*** 965,974 ****
        Boolean radiobox = 0;
        int ac = 0;
        Arg al [1];
!       
        XtSetArg (al [ac], XmNradioBehavior, &radiobox); ac++;
        XtGetValues (widget, al, ac);
!       
        if (radiobox)
        {
          CompositeWidget radio = (CompositeWidget)widget;
--- 965,974 ----
        Boolean radiobox = 0;
        int ac = 0;
        Arg al [1];
! 
        XtSetArg (al [ac], XmNradioBehavior, &radiobox); ac++;
        XtGetValues (widget, al, ac);
! 
        if (radiobox)
        {
          CompositeWidget radio = (CompositeWidget)widget;
***************
*** 977,983 ****
            {
              int set = False;
              Widget toggle = radio->composite.children [i];
!             
              XtVaGetValues (toggle, XmNset, &set, NULL);
              if (set)
                {
--- 977,983 ----
            {
              int set = False;
              Widget toggle = radio->composite.children [i];
! 
              XtVaGetValues (toggle, XmNset, &set, NULL);
              if (set)
                {
***************
*** 1020,1026 ****
  /* This function is for activating a button from a program.  It's wrong 
because
     we pass a NULL argument in the call_data which is not Motif compatible.
     This is used from the XmNdefaultAction callback of the List widgets to
!    have a double-click put down a dialog box like the button would do. 
     I could not find a way to do that with accelerators.
   */
  static void
--- 1020,1026 ----
  /* This function is for activating a button from a program.  It's wrong 
because
     we pass a NULL argument in the call_data which is not Motif compatible.
     This is used from the XmNdefaultAction callback of the List widgets to
!    have a double-click put down a dialog box like the button would do.
     I could not find a way to do that with accelerators.
   */
  static void
***************
*** 1064,1070 ****
    Arg         al[64];                 /* Arg List */
    int         ac;                     /* Arg Count */
    int         i;
!   
    if (pop_up_p)
      {
        ac = 0;
--- 1064,1070 ----
    Arg         al[64];                 /* Arg List */
    int         ac;                     /* Arg Count */
    int         i;
! 
    if (pop_up_p)
      {
        ac = 0;
***************
*** 1089,1097 ****
  
    n_children = left_buttons + right_buttons + 1;
    ac = 0;
!   XtSetArg(al[ac], XmNpacking, n_children == 3? 
           XmPACK_COLUMN: XmPACK_TIGHT); ac++;
!   XtSetArg(al[ac], XmNorientation, n_children == 3? 
           XmVERTICAL: XmHORIZONTAL); ac++;
    XtSetArg(al[ac], XmNnumColumns, left_buttons + right_buttons + 1); ac++;
    XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
--- 1089,1097 ----
  
    n_children = left_buttons + right_buttons + 1;
    ac = 0;
!   XtSetArg(al[ac], XmNpacking, n_children == 3?
           XmPACK_COLUMN: XmPACK_TIGHT); ac++;
!   XtSetArg(al[ac], XmNorientation, n_children == 3?
           XmVERTICAL: XmHORIZONTAL); ac++;
    XtSetArg(al[ac], XmNnumColumns, left_buttons + right_buttons + 1); ac++;
    XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
***************
*** 1108,1114 ****
    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
    XtSetArg(al[ac], XmNrightOffset, 13); ac++;
    row = XmCreateRowColumn (form, "row", al, ac);
!   
    n_children = 0;
    for (i = 0; i < left_buttons; i++)
      {
--- 1108,1114 ----
    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
    XtSetArg(al[ac], XmNrightOffset, 13); ac++;
    row = XmCreateRowColumn (form, "row", al, ac);
! 
    n_children = 0;
    for (i = 0; i < left_buttons; i++)
      {
***************
*** 1140,1146 ****
    XtSetArg (al[ac], XmNmappedWhenManaged, FALSE); ac++;
    children [n_children] = XmCreateLabel (row, "separator_button", al, ac);
    n_children++;
!   
    for (i = 0; i < right_buttons; i++)
      {
        char button_name [16];
--- 1140,1146 ----
    XtSetArg (al[ac], XmNmappedWhenManaged, FALSE); ac++;
    children [n_children] = XmCreateLabel (row, "separator_button", al, ac);
    n_children++;
! 
    for (i = 0; i < right_buttons; i++)
      {
        char button_name [16];
***************
*** 1152,1160 ****
        if (! button) button = children [n_children];
        n_children++;
      }
!   
    XtManageChildren (children, n_children);
!   
    ac = 0;
    XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
    XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
--- 1152,1160 ----
        if (! button) button = children [n_children];
        n_children++;
      }
! 
    XtManageChildren (children, n_children);
! 
    ac = 0;
    XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
    XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
***************
*** 1250,1256 ****
         list activate the default button */
        XtAddCallback (value, XmNdefaultActionCallback, activate_button, 
button);
      }
!   
    ac = 0;
    XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
    XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
--- 1250,1256 ----
         list activate the default button */
        XtAddCallback (value, XmNdefaultActionCallback, activate_button, 
button);
      }
! 
    ac = 0;
    XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
    XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
***************
*** 1265,1271 ****
    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
    XtSetArg(al[ac], XmNrightOffset, 13); ac++;
    message = XmCreateLabel (form, "message", al, ac);
!   
    if (list)
      XtManageChild (value);
  
--- 1265,1271 ----
    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
    XtSetArg(al[ac], XmNrightOffset, 13); ac++;
    message = XmCreateLabel (form, "message", al, ac);
! 
    if (list)
      XtManageChild (value);
  
***************
*** 1280,1286 ****
    children [i] = icon; i++;
    children [i] = icon_separator; i++;
    XtManageChildren (children, i);
!   
    if (text_input_slot || list)
      {
        XtInstallAccelerators (value, button);
--- 1280,1286 ----
    children [i] = icon; i++;
    children [i] = icon_separator; i++;
    XtManageChildren (children, i);
! 
    if (text_input_slot || list)
      {
        XtInstallAccelerators (value, button);
***************
*** 1291,1297 ****
        XtInstallAccelerators (form, button);
        XtSetKeyboardFocus (result, button);
      }
!   
    return result;
  }
  
--- 1291,1297 ----
        XtInstallAccelerators (form, button);
        XtSetKeyboardFocus (result, button);
      }
! 
    return result;
  }
  
***************
*** 1364,1370 ****
  
    x = (((Position)parent_width) - ((Position)child_width)) / 2;
    y = (((Position)parent_height) - ((Position)child_height)) / 2;
!   
    XtTranslateCoords (parent, x, y, &x, &y);
  
    if (x + child_width > screen_width)
--- 1364,1370 ----
  
    x = (((Position)parent_width) - ((Position)child_width)) / 2;
    y = (((Position)parent_height) - ((Position)child_height)) / 2;
! 
    XtTranslateCoords (parent, x, y, &x, &y);
  
    if (x + child_width > screen_width)
***************
*** 1404,1410 ****
        focus = XtNameToWidget (widget, "*button1");
        if (focus)
        XtSetKeyboardFocus (widget, focus);
!       
        /* shrink the separator label back to their original size */
        separator = XtNameToWidget (widget, "*separator_button");
        if (separator)
--- 1404,1410 ----
        focus = XtNameToWidget (widget, "*button1");
        if (focus)
        XtSetKeyboardFocus (widget, focus);
! 
        /* shrink the separator label back to their original size */
        separator = XtNameToWidget (widget, "*separator_button");
        if (separator)
***************
*** 1472,1478 ****
      shell_name = "Question";
      break;
    }
!   
    total_buttons = name [1] - '0';
  
    if (name [3] == 'T' || name [3] == 't')
--- 1472,1478 ----
      shell_name = "Question";
      break;
    }
! 
    total_buttons = name [1] - '0';
  
    if (name [3] == 'T' || name [3] == 't')
***************
*** 1482,1490 ****
      }
    else if (name [3])
      right_buttons = name [4] - '0';
!   
    left_buttons = total_buttons - right_buttons;
!   
    widget = make_dialog (name, parent, pop_up_p,
                        shell_name, icon_name, text_input_slot, radio_box,
                        list, left_buttons, right_buttons);
--- 1482,1490 ----
      }
    else if (name [3])
      right_buttons = name [4] - '0';
! 
    left_buttons = total_buttons - right_buttons;
! 
    widget = make_dialog (name, parent, pop_up_p,
                        shell_name, icon_name, text_input_slot, radio_box,
                        list, left_buttons, right_buttons);
***************
*** 1655,1661 ****
  #endif /* ENERGIZE */
  
  widget_creation_entry
! xm_creation_table [] = 
  {
    {"menubar",                         make_menubar},
    {"popup",                   make_popup_menu},
--- 1655,1661 ----
  #endif /* ENERGIZE */
  
  widget_creation_entry
! xm_creation_table [] =
  {
    {"menubar",                         make_menubar},
    {"popup",                   make_popup_menu},
***************
*** 1744,1750 ****
          /* This is so totally ridiculous: there's NO WAY to tell Motif
             that *any* button can select a menu item.  Only one button
             can have that honor.  */
!       
          char *trans = 0;
          if      (event->xbutton.state & Button5Mask) trans = "<Btn5Down>";
          else if (event->xbutton.state & Button4Mask) trans = "<Btn4Down>";
--- 1744,1750 ----
          /* This is so totally ridiculous: there's NO WAY to tell Motif
             that *any* button can select a menu item.  Only one button
             can have that honor.  */
! 
          char *trans = 0;
          if      (event->xbutton.state & Button5Mask) trans = "<Btn5Down>";
          else if (event->xbutton.state & Button4Mask) trans = "<Btn4Down>";
***************
*** 1754,1763 ****
          if (trans) XtVaSetValues (widget, XmNmenuPost, trans, NULL);
        }
  #endif
!       
        XmMenuPosition (widget, (XButtonPressedEvent *) event);
      }
!   
    XtManageChild (widget);
  }
  
--- 1754,1763 ----
          if (trans) XtVaSetValues (widget, XmNmenuPost, trans, NULL);
        }
  #endif
! 
        XmMenuPosition (widget, (XButtonPressedEvent *) event);
      }
! 
    XtManageChild (widget);
  }
  
***************
*** 1795,1806 ****
        if (up)
        XtManageChild (widget);
        else
!       XtUnmanageChild (widget);       
      }
  }
  
  
! /* motif callback */ 
  
  static void
  do_call (widget, closure, type)
--- 1795,1806 ----
        if (up)
        XtManageChild (widget);
        else
!       XtUnmanageChild (widget);
      }
  }
  
  
! /* motif callback */
  
  static void
  do_call (widget, closure, type)
***************
*** 1829,1864 ****
    user_data = NULL;
    XtSetArg (al [ac], XmNuserData, &user_data); ac++;
    XtGetValues (widget, al, ac);
!   
    switch (type)
      {
      case pre_activate:
        if (instance->info->pre_activate_cb)
        instance->info->pre_activate_cb (widget, id, user_data);
        break;
!       
      case selection:
        if (instance->info->selection_cb)
        instance->info->selection_cb (widget, id, user_data);
        break;
!       
      case no_selection:
        if (instance->info->selection_cb)
        instance->info->selection_cb (widget, id, (XtPointer) -1);
        break;
!       
      case post_activate:
        if (instance->info->post_activate_cb)
        instance->info->post_activate_cb (widget, id, user_data);
        break;
!       
      default:
        abort ();
      }
  }
  
  /* Like lw_internal_update_other_instances except that it does not do
!    anything if its shell parent is not managed.  This is to protect 
     lw_internal_update_other_instances to dereference freed memory
     if the widget was ``destroyed'' by caching it in the 
all_destroyed_instances
     list */
--- 1829,1864 ----
    user_data = NULL;
    XtSetArg (al [ac], XmNuserData, &user_data); ac++;
    XtGetValues (widget, al, ac);
! 
    switch (type)
      {
      case pre_activate:
        if (instance->info->pre_activate_cb)
        instance->info->pre_activate_cb (widget, id, user_data);
        break;
! 
      case selection:
        if (instance->info->selection_cb)
        instance->info->selection_cb (widget, id, user_data);
        break;
! 
      case no_selection:
        if (instance->info->selection_cb)
        instance->info->selection_cb (widget, id, (XtPointer) -1);
        break;
! 
      case post_activate:
        if (instance->info->post_activate_cb)
        instance->info->post_activate_cb (widget, id, user_data);
        break;
! 
      default:
        abort ();
      }
  }
  
  /* Like lw_internal_update_other_instances except that it does not do
!    anything if its shell parent is not managed.  This is to protect
     lw_internal_update_other_instances to dereference freed memory
     if the widget was ``destroyed'' by caching it in the 
all_destroyed_instances
     list */
***************
*** 1924,1930 ****
  
  
  /* XmNpopdownCallback for MenuShell widgets.  WIDGET is the MenuShell,
!    CLOSURE is a pointer to the widget_instance of the shell, 
  
     Note that this callback is called for each cascade button in a
     menu, whether or not its submenu is visible.  */
--- 1924,1930 ----
  
  
  /* XmNpopdownCallback for MenuShell widgets.  WIDGET is the MenuShell,
!    CLOSURE is a pointer to the widget_instance of the shell,
  
     Note that this callback is called for each cascade button in a
     menu, whether or not its submenu is visible.  */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]