[PATCH] New frames not displayed correctly if buffer tabs off
Mike Alexander <[email protected]>
| Newsgroups | gmane.emacs.xemacs.windows |
|---|---|
| Message-ID | <[email protected]> |
A while back I mentioned [1] that frames other than the initial frame didn't display correctly in the native Windows version of XEmacs. My analysis of the problem in that message was wrong, but I think I found the actual problem and this patch seems to fix it. The problem is that when the frame is created the main window in the frame is not sized correctly (it ends up being something like 13 by 7 pixels). When redisplay_frame is called for the new frame for the first time it calls adjust_frame_size which on Windows eventually winds up in mswindows_set_frame_size. This method needs to call change_frame_size to cause XEmacs to recalculate the size of the windows in the frame. The problem doesn't show up if buffer tabs are on since the process of computing the tabs causes the window sizes to be recalculated and this happens late enough that the calculations are correct. You can also make the frame display correctly by resizing it, however slightly. Adding the call to change_frame_size to mswindows_set_frame_size seems correct since that's what gtk_set_frame_size does. [1] http://list-archive.xemacs.org/xemacs-nt/200302/msg00032.html -- Mike Alexander Arbortext, Inc. [email protected] +1-734-997-0200 src/ChangeLog addition: 2003-03-03 Mike Alexander <[email protected]> * frame-msw.c (mswindows_set_frame_size): Call change_frame_size. xemacs source patch: Diff command: C:/PROGRA~1/GNU/WinCvs~1.3/cvs -q diff -u Files affected: src/frame-msw.c Index: src/frame-msw.c =================================================================== RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame-msw.c,v retrieving revision 1.51 diff -u -u -r1.51 frame-msw.c --- src/frame-msw.c 2003/02/21 06:56:57 1.51 +++ src/frame-msw.c 2003/03/03 08:56:55 @@ -337,9 +337,14 @@ mswindows_set_frame_size (struct frame *f, int width, int height) { RECT rect; + int columns, rows; + rect.left = rect.top = 0; rect.right = width; rect.bottom = height; + + pixel_to_char_size (f, rect.right, rect.bottom, &columns, &rows); + change_frame_size (f, rows, columns, 0); /* This can call Lisp, because it runs the window procedure, which can call redisplay() */