From 8c17825afdca531a0584b8750bf5ffb34d6f10bb Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Tue, 16 Oct 2018 19:08:45 +0300 Subject: [PATCH] X11: Remember perm_invent window geometry Instead of remembering the geometry at window closing time, remember it immediately when it changes. --- win/X11/winmenu.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/win/X11/winmenu.c b/win/X11/winmenu.c index e2f405ba1..98465b3da 100644 --- a/win/X11/winmenu.c +++ b/win/X11/winmenu.c @@ -37,6 +37,7 @@ XColor FDECL(get_nhcolor, (struct xwindow *, int)); static void FDECL(init_menu_nhcolors, (struct xwindow *)); +static void FDECL(menu_size_change_handler, (Widget, XtPointer, XEvent *, Boolean *)); static void FDECL(menu_select, (Widget, XtPointer, XtPointer)); static void FDECL(invert_line, (struct xwindow *, x11_menu_item *, int, long)); @@ -94,6 +95,29 @@ create_menu_translation_tables() } } +static void +menu_size_change_handler(w, ptr, event, flag) +Widget w; +XtPointer ptr; +XEvent *event; +Boolean *flag; +{ + struct xwindow *wp = (struct xwindow *) ptr; + + if (!wp || !event) + return; + + if (iflags.perm_invent && wp == &window_list[WIN_INVEN] + && wp->menu_information->how == PICK_NONE) { + get_widget_window_geometry(wp->popup, + &wp->menu_information->permi_x, + &wp->menu_information->permi_y, + &wp->menu_information->permi_w, + &wp->menu_information->permi_h); + } +} + + /* * Menu callback. */ @@ -540,15 +564,6 @@ static void menu_popdown(wp) struct xwindow *wp; { - if (iflags.perm_invent && wp == &window_list[WIN_INVEN] - && wp->menu_information->how == PICK_NONE) { - get_widget_window_geometry(wp->popup, - &wp->menu_information->permi_x, - &wp->menu_information->permi_y, - &wp->menu_information->permi_w, - &wp->menu_information->permi_h); - } - nh_XtPopdown(wp->popup); /* remove the event grab */ XtDestroyWidget(wp->popup); wp->w = wp->popup = (Widget) 0; @@ -1041,6 +1056,8 @@ menu_item **menu_list; toplevel, args, num_args); XtOverrideTranslations(wp->popup, menu_del_translation_table); + XtAddEventHandler(wp->popup, StructureNotifyMask, False, menu_size_change_handler, (XtPointer) wp); + num_args = 0; XtSetArg(args[num_args], XtNtranslations, menu_translation_table); num_args++;