X11: Remember perm_invent window geometry
Instead of remembering the geometry at window closing time, remember it immediately when it changes.
This commit is contained in:
+26
-9
@@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
XColor FDECL(get_nhcolor, (struct xwindow *, int));
|
XColor FDECL(get_nhcolor, (struct xwindow *, int));
|
||||||
static void FDECL(init_menu_nhcolors, (struct xwindow *));
|
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(menu_select, (Widget, XtPointer, XtPointer));
|
||||||
static void FDECL(invert_line, (struct xwindow *, x11_menu_item *, int, long));
|
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.
|
* Menu callback.
|
||||||
*/
|
*/
|
||||||
@@ -540,15 +564,6 @@ static void
|
|||||||
menu_popdown(wp)
|
menu_popdown(wp)
|
||||||
struct xwindow *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 */
|
nh_XtPopdown(wp->popup); /* remove the event grab */
|
||||||
XtDestroyWidget(wp->popup);
|
XtDestroyWidget(wp->popup);
|
||||||
wp->w = wp->popup = (Widget) 0;
|
wp->w = wp->popup = (Widget) 0;
|
||||||
@@ -1041,6 +1056,8 @@ menu_item **menu_list;
|
|||||||
toplevel, args, num_args);
|
toplevel, args, num_args);
|
||||||
XtOverrideTranslations(wp->popup, menu_del_translation_table);
|
XtOverrideTranslations(wp->popup, menu_del_translation_table);
|
||||||
|
|
||||||
|
XtAddEventHandler(wp->popup, StructureNotifyMask, False, menu_size_change_handler, (XtPointer) wp);
|
||||||
|
|
||||||
num_args = 0;
|
num_args = 0;
|
||||||
XtSetArg(args[num_args], XtNtranslations,
|
XtSetArg(args[num_args], XtNtranslations,
|
||||||
menu_translation_table); num_args++;
|
menu_translation_table); num_args++;
|
||||||
|
|||||||
Reference in New Issue
Block a user