]> granicus.if.org Git - nethack/commitdiff
X11: Remember perm_invent window geometry
authorPasi Kallinen <paxed@alt.org>
Tue, 16 Oct 2018 16:08:45 +0000 (19:08 +0300)
committerPasi Kallinen <paxed@alt.org>
Tue, 16 Oct 2018 16:08:49 +0000 (19:08 +0300)
Instead of remembering the geometry at window closing time,
remember it immediately when it changes.

win/X11/winmenu.c

index e2f405ba148e7280431634b8c53569bef548bdc6..98465b3da2ec75ebb667f8af3211862eb79c7e63 100644 (file)
@@ -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++;