Vin, please note:
For me this applies to 21.4 with offset -3, but is NOT RECOMMENDED yet.
There have been persistent reports of inflooping with window managers
that don't respect XEmacs's desire to size to a exact number of
character cells, specifically when maximizing the XEmacs frame. The
surface problem is that XEmacs doesn't take XtGeometryNo for an
answer. The attached patch fixes that, and my XEmacs is now
well-behaved under metacity.
However, the underlying problem is that the EmacsManager shell
widget's geometry management system contains mutually recursive
functions, and furthermore actually changes the geometry of children
in the process of a query. Really straightening this out (at minimum,
the structure of the geometry manager must be documented) isn't going
to be easy (unless there's somebody more expert than I willing to work
on it).
Proposal:
Apply this patch to 21.5 and work out any new geometry management
issues as they come up, then get something into 21.4 quickly.
Comments?
Index: src/ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ChangeLog,v
retrieving revision 1.761
diff -u -U0 -r1.761 ChangeLog
--- src/ChangeLog 7 Dec 2004 12:52:48 -0000 1.761
+++ src/ChangeLog 15 Dec 2004 03:57:02 -0000
@@ -0,0 +1,4 @@
+2004-12-15 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * EmacsManager.c (EmacsManagerChangeSize): Respect XtGeometryNo.
+
Index: src/EmacsManager.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/EmacsManager.c,v
retrieving revision 1.6
diff -u -r1.6 EmacsManager.c
--- src/EmacsManager.c 20 Sep 2004 19:19:34 -0000 1.6
+++ src/EmacsManager.c 15 Dec 2004 03:57:09 -0000
@@ -243,11 +243,15 @@
/* do nothing if we're already that size */
if (w->core.width != width || w->core.height != height)
- if (XtMakeResizeRequest (w, width, height, &w->core.width,
&w->core.height)
- == XtGeometryAlmost)
- XtMakeResizeRequest (w, w->core.width, w->core.height, NULL, NULL);
-
- Resize (w);
+ {
+ XtGeometryResult result =
+ XtMakeResizeRequest (w, width, height, &w->core.width, &w->core.height);
+ if (result == XtGeometryNo)
+ return;
+ if (result == XtGeometryAlmost)
+ XtMakeResizeRequest (w, w->core.width, w->core.height, NULL, NULL);
+ Resize (w);
+ }
}
--
Institute of Policy and Planning Sciences
http://turnbull.sk.tsukuba.ac.jp
University of Tsukuba Tennodai 1-1-1 Tsukuba 305-8573 JAPAN
Ask not how you can "do" free software business;
ask what your business can "do for" free software.