[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master d32d937: Resurrect support for negative frame geome
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] master d32d937: Resurrect support for negative frame geometry parameters on MS-Windows |
Date: |
Tue, 24 Sep 2019 03:31:49 -0400 (EDT) |
branch: master
commit d32d9373b5348db87c85fd2717f1b5a524bc207f
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Resurrect support for negative frame geometry parameters on MS-Windows
* src/w32fns.c (my_create_window): Avoid assertion violations
in XFIXNUM when the 'top' or 'left' frame parameters are
neither fixnums nor 'unbound', in which case
f->size_hint_flags are set by gui_figure_window_size.
(Bug#37415)
---
src/w32fns.c | 46 ++++++++++++++++++++++++++++++++--------------
1 file changed, 32 insertions(+), 14 deletions(-)
diff --git a/src/w32fns.c b/src/w32fns.c
index 34abd02..bb28c01 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -5413,6 +5413,11 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM
lParam)
return 0;
}
+/* This function is called from the main (a.k.a. "Lisp") thread, and
+ prepares the coordinates to be used by w32_createwindow (which runs
+ in the input thread), when necessary. The calls to
+ gui_display_get_arg must be done here, because they can cons Lisp
+ objects, and that can only be done in the Lisp thread. */
static void
my_create_window (struct frame * f)
{
@@ -5421,20 +5426,33 @@ my_create_window (struct frame * f)
Lisp_Object left, top;
struct w32_display_info *dpyinfo = &one_w32_display_info;
- /* When called with RES_TYPE_NUMBER, gui_display_get_arg will return
- zero for anything that is not a number and is not Qunbound. */
- left = gui_display_get_arg (dpyinfo, Qnil, Qleft, "left", "Left",
- RES_TYPE_NUMBER);
- top = gui_display_get_arg (dpyinfo, Qnil, Qtop, "top", "Top",
- RES_TYPE_NUMBER);
- if (EQ (left, Qunbound))
- coords[0] = CW_USEDEFAULT;
- else
- coords[0] = XFIXNUM (left);
- if (EQ (top, Qunbound))
- coords[1] = CW_USEDEFAULT;
- else
- coords[1] = XFIXNUM (top);
+ /* If f->size_hint_flags is set, it means gui_figure_window_size
+ already processed the 'top' and 'left' frame parameters and set
+ f->top_pos and f->left_pos accordingly. w32_createwindow will
+ then use those value disregarding coords[]. So we don't need to
+ compute coords[] in that case. */
+ if (!(f->size_hint_flags & USPosition || f->size_hint_flags & PPosition))
+ {
+ /* When called with RES_TYPE_NUMBER, and there's no 'top' or
+ 'left' parameters in the frame's parameter alist,
+ gui_display_get_arg will return zero for anything that is
+ neither a number nor Qunbound. If frame parameter alist does
+ have 'left' or 'top', they are interpreted by
+ gui_figure_window_size, which was already called, and which
+ sets f->size_hint_flags. */
+ left = gui_display_get_arg (dpyinfo, Qnil, Qleft, "left", "Left",
+ RES_TYPE_NUMBER);
+ top = gui_display_get_arg (dpyinfo, Qnil, Qtop, "top", "Top",
+ RES_TYPE_NUMBER);
+ if (EQ (left, Qunbound))
+ coords[0] = CW_USEDEFAULT;
+ else
+ coords[0] = XFIXNUM (left);
+ if (EQ (top, Qunbound))
+ coords[1] = CW_USEDEFAULT;
+ else
+ coords[1] = XFIXNUM (top);
+ }
if (!PostThreadMessage (dwWindowsThreadId, WM_EMACS_CREATEWINDOW,
(WPARAM)f, (LPARAM)coords))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master d32d937: Resurrect support for negative frame geometry parameters on MS-Windows,
Eli Zaretskii <=