From c95fc5f1b93d02b595eb7f3add9dffd692dcbc83 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Mon, 30 Apr 2001 14:38:34 +0000 Subject: [PATCH] (x_window_to_menu_bar) [USE_LUCID]: New function. (XTread_socket) [USE_LUCID] : Handle events for windows that are components of a Lucid menu bar. --- src/ChangeLog | 6 ++++++ src/xterm.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index f0ae3d17eac..282d0a2de2c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2001-04-30 Gerd Moellmann + + * xterm.c (x_window_to_menu_bar) [USE_LUCID]: New function. + (XTread_socket) [USE_LUCID]: Handle events for + windows that are components of a Lucid menu bar. + 2001-04-27 Gerd Moellmann * term.c (turn_on_face): Fix reverse video handling on terminals diff --git a/src/xterm.c b/src/xterm.c index 15ba1e9c6dc..118c1261ee9 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -8037,6 +8037,33 @@ x_window_to_scroll_bar (window_id) } +#if defined USE_X_TOOLKIT && defined USE_LUCID + +/* Return the Lucid menu bar WINDOW is part of. Return null + if WINDOW is not part of a menu bar. */ + +static Widget +x_window_to_menu_bar (window) + Window window; +{ + Lisp_Object tail; + + for (tail = Vframe_list; + XGCTYPE (tail) == Lisp_Cons; + tail = XCDR (tail)) + { + Lisp_Object frame = XCAR (tail); + Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget; + + if (menu_bar && xlwmenu_window_p (menu_bar, window)) + return menu_bar; + } + + return NULL; +} + +#endif /* USE_X_TOOLKIT && USE_LUCID */ + /************************************************************************ Toolkit scroll bars @@ -9990,6 +10017,18 @@ XTread_socket (sd, bufp, numchars, expected) } else { +#if defined USE_X_TOOLKIT && defined USE_LUCID + /* Submenus of the Lucid menu bar aren't widgets + themselves, so there's no way to dispatch events + to them. Recognize this case separately. */ + { + Widget widget + = x_window_to_menu_bar (event.xexpose.window); + if (widget) + xlwmenu_redisplay (widget); + } +#endif /* USE_X_TOOLKIT && USE_LUCID */ + #ifdef USE_TOOLKIT_SCROLL_BARS /* Dispatch event to the widget. */ goto OTHER; -- 2.39.5