diff options
author | Gerd Moellmann <gerd@gnu.org> | 2001-03-13 16:30:15 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 2001-03-13 16:30:15 +0000 |
commit | f25d58a47c5b869b9325e9b411151e128537b14e (patch) | |
tree | 5b6ec35d3ba84581f3fb1cf88c84875031582911 /lwlib/lwlib-Xm.c | |
parent | 2756b446fd9f2b128a71a6f0e515631b305e994c (diff) | |
download | emacs-f25d58a47c5b869b9325e9b411151e128537b14e.tar.gz emacs-f25d58a47c5b869b9325e9b411151e128537b14e.tar.bz2 emacs-f25d58a47c5b869b9325e9b411151e128537b14e.zip |
(make_menu_in_widget): Add an XmNpopdownCallback
instead of an XmNunmapCallback.
(xm_unmap_callback): Removed.
Diffstat (limited to 'lwlib/lwlib-Xm.c')
-rw-r--r-- | lwlib/lwlib-Xm.c | 58 |
1 files changed, 19 insertions, 39 deletions
diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c index 3489f55c89e..340c8fda784 100644 --- a/lwlib/lwlib-Xm.c +++ b/lwlib/lwlib-Xm.c @@ -125,7 +125,6 @@ static void xm_generic_callback P_ ((Widget, XtPointer, XtPointer)); static void xm_nosel_callback P_ ((Widget, XtPointer, XtPointer)); static void xm_pull_down_callback P_ ((Widget, XtPointer, XtPointer)); static void xm_pop_down_callback P_ ((Widget, XtPointer, XtPointer)); -static void xm_unmap_callback P_ ((Widget, XtPointer, XtPointer)); void xm_set_keyboard_focus P_ ((Widget, Widget)); void xm_set_main_areas P_ ((Widget, Widget, Widget)); static void xm_internal_update_other_instances P_ ((Widget, XtPointer, @@ -509,18 +508,11 @@ make_menu_in_widget (instance, widget, val, keep_first_children) abort (); menubar_p = type == XmMENU_BAR; -#if 0 /* This can't be used in LessTif as of 2000-01-24 because it's - impossible to decide from this plus the cascading callback if a - popup is still posted or not. When selecting cascade button A, - then B, then clicking on the frame, the sequence of callbacks is - `cascading A', cascading B', `popdown for all cascade buttons in - the menu bar. */ /* Add a callback to popups and pulldowns that is called when it is made invisible again. */ if (!menubar_p) XtAddCallback (XtParent (widget), XmNpopdownCallback, xm_pop_down_callback, (XtPointer)instance); -#endif /* Preserve the first KEEP_FIRST_CHILDREN old children. */ for (child_index = 0, cur = val; child_index < keep_first_children; @@ -597,12 +589,6 @@ make_menu_in_widget (instance, widget, val, keep_first_children) { menu = XmCreatePulldownMenu (widget, cur->name, NULL, 0); - /* XmNpopdownCallback is working strangely under LessTif. - Using XmNunmapCallback is the only way to go there. */ - if (menubar_p) - XtAddCallback (menu, XmNunmapCallback, xm_unmap_callback, - (XtPointer) instance); - make_menu_in_widget (instance, menu, cur->contents, 0); XtSetArg (al[ac], XmNsubMenuId, menu); ac++; button = XmCreateCascadeButton (widget, cur->name, al, ac); @@ -1813,24 +1799,29 @@ do_call (widget, closure, type) 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 (); } @@ -1872,14 +1863,14 @@ xm_nosel_callback (widget, closure, call_data) XtPointer closure; XtPointer call_data; { - /* This callback is only called when a dialog box is dismissed with the wm's - destroy button (WM_DELETE_WINDOW.) We want the dialog box to be destroyed - in that case, not just unmapped, so that it releases its keyboard grabs. - But there are problems with running our callbacks while the widget is in - the process of being destroyed, so we set XmNdeleteResponse to XmUNMAP - instead of XmDESTROY and then destroy it ourself after having run the - callback. - */ + /* This callback is only called when a dialog box is dismissed with + the wm's destroy button (WM_DELETE_WINDOW.) We want the dialog + box to be destroyed in that case, not just unmapped, so that it + releases its keyboard grabs. But there are problems with running + our callbacks while the widget is in the process of being + destroyed, so we set XmNdeleteResponse to XmUNMAP instead of + XmDESTROY and then destroy it ourself after having run the + callback. */ do_call (widget, closure, no_selection); XtDestroyWidget (widget); } @@ -1903,11 +1894,10 @@ xm_pull_down_callback (widget, closure, call_data) /* XmNpopdownCallback for MenuShell widgets. WIDGET is the MenuShell, - CLOSURE is a pointer to the widget_instance of the shell, CALL_DATA - is always null under LessTif. + CLOSURE is a pointer to the widget_instance of the shell, - 2000-01-23: This callback is called for each cascade button in - a menu, whether or not its submenu is visible. */ + Note that this callback is called for each cascade button in a + menu, whether or not its submenu is visible. */ static void xm_pop_down_callback (widget, closure, call_data) @@ -1916,20 +1906,10 @@ xm_pop_down_callback (widget, closure, call_data) XtPointer call_data; { widget_instance *instance = (widget_instance *) closure; + fprintf (stderr, "%p\n", call_data); - if ((!instance->pop_up_p && (XtParent (widget) == instance->widget)) - || (XtParent (widget) == instance->parent)) - do_call (widget, closure, post_activate); -} - -static void -xm_unmap_callback (widget, closure, call_data) - Widget widget; - XtPointer closure; - XtPointer call_data; -{ - widget_instance *instance = (widget_instance *) closure; - if (!instance->pop_up_p) + if ((!instance->pop_up_p && XtParent (widget) == instance->widget) + || XtParent (widget) == instance->parent) do_call (widget, closure, post_activate); } |