* [Stephen.Berman@gmx.net: Re: redisplay]
@ 2007-04-23 3:48 Richard Stallman
2007-04-23 15:07 ` Chong Yidong
0 siblings, 1 reply; 41+ messages in thread
From: Richard Stallman @ 2007-04-23 3:48 UTC (permalink / raw)
To: emacs-devel
Would someone please debug this, then ack?
------- Start of forwarded message -------
X-Spam-Status: No, score=-0.0 required=5.0 tests=SPF_HELO_PASS,SPF_PASS,
UNPARSEABLE_RELAY autolearn=failed version=3.1.0
To: emacs-pretest-bug@gnu.org
From: Stephen Berman <Stephen.Berman@gmx.net>
Date: Sun, 22 Apr 2007 14:17:14 +0200
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Subject: Re: redisplay
On Sat, 21 Apr 2007 20:47:19 -0400 Richard Stallman <rms@gnu.org> wrote:
> (progn (new-frame)
> (redisplay t)
> (x-popup-dialog t '("Foo" ("Bar" . 1))))
>
> I tried this but it didn't fail -- the new frame was not empty.
In my Emacs (GNU Emacs 22.0.98.2 (i686-pc-linux-gnu, GTK+ Version
2.10.6) of 2007-04-20 on escher) I see two behaviors:
1. Evalling the above sexp in *scratch* with C-j or in any buffer with
M-: results in what the OP reported: "produces a blank frame while the
popup dialog is active, i.e., (redisplay t) fails to wait for
redisplay to finish."
2. Evalling the sexp with C-x C-e in any buffer results in what RMS
reported.
Steve Berman
_______________________________________________
emacs-pretest-bug mailing list
emacs-pretest-bug@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-pretest-bug
------- End of forwarded message -------
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-23 3:48 [Stephen.Berman@gmx.net: Re: redisplay] Richard Stallman @ 2007-04-23 15:07 ` Chong Yidong 2007-04-23 19:14 ` Jan Djärv 0 siblings, 1 reply; 41+ messages in thread From: Chong Yidong @ 2007-04-23 15:07 UTC (permalink / raw) To: rms; +Cc: emacs-devel Richard Stallman <rms@gnu.org> writes: > Would someone please debug this, then ack? > > From: Stephen Berman <Stephen.Berman@gmx.net> > Subject: Re: redisplay > To: emacs-pretest-bug@gnu.org > > On Sat, 21 Apr 2007 20:47:19 -0400 Richard Stallman <rms@gnu.org> wrote: > >> (progn (new-frame) >> (redisplay t) >> (x-popup-dialog t '("Foo" ("Bar" . 1)))) >> >> I tried this but it didn't fail -- the new frame was not empty. > > In my Emacs (GNU Emacs 22.0.98.2 (i686-pc-linux-gnu, GTK+ Version > 2.10.6) of 2007-04-20 on escher) I see two behaviors: > > 1. Evalling the above sexp in *scratch* with C-j or in any buffer with > M-: results in what the OP reported: "produces a blank frame while the > popup dialog is active, i.e., (redisplay t) fails to wait for > redisplay to finish." > > 2. Evalling the sexp with C-x C-e in any buffer results in what RMS > reported. I believe this is because x-popup-dialog is handled with a GTK dialog when you build under GTK, instead of using the Emacs redisplay engine. So the behaviors are slightly different. I don't think this "problem"---if it's really a problem---is serious, and it certainly shouldn't block the Emacs 22 release. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-23 15:07 ` Chong Yidong @ 2007-04-23 19:14 ` Jan Djärv 2007-04-23 22:12 ` Stephen Berman 2007-04-24 14:08 ` Stefan Monnier 0 siblings, 2 replies; 41+ messages in thread From: Jan Djärv @ 2007-04-23 19:14 UTC (permalink / raw) To: Chong Yidong; +Cc: rms, emacs-devel Chong Yidong skrev: > Richard Stallman <rms@gnu.org> writes: > >> Would someone please debug this, then ack? >> >> From: Stephen Berman <Stephen.Berman@gmx.net> >> Subject: Re: redisplay >> To: emacs-pretest-bug@gnu.org >> >> On Sat, 21 Apr 2007 20:47:19 -0400 Richard Stallman <rms@gnu.org> wrote: >> >>> (progn (new-frame) >>> (redisplay t) >>> (x-popup-dialog t '("Foo" ("Bar" . 1)))) >>> >>> I tried this but it didn't fail -- the new frame was not empty. >> In my Emacs (GNU Emacs 22.0.98.2 (i686-pc-linux-gnu, GTK+ Version >> 2.10.6) of 2007-04-20 on escher) I see two behaviors: >> >> 1. Evalling the above sexp in *scratch* with C-j or in any buffer with >> M-: results in what the OP reported: "produces a blank frame while the >> popup dialog is active, i.e., (redisplay t) fails to wait for >> redisplay to finish." >> >> 2. Evalling the sexp with C-x C-e in any buffer results in what RMS >> reported. > > I believe this is because x-popup-dialog is handled with a GTK dialog > when you build under GTK, instead of using the Emacs redisplay engine. The redisplay engine don't handle any dialogs, Gtk+, Motif or otherwise. > So the behaviors are slightly different. I don't think this > "problem"---if it's really a problem---is serious, and it certainly > shouldn't block the Emacs 22 release. I can't reproduce it with or without Gtk+, *scratch* or not. I suspect it is a timing issue in X. I don't think redisplay guarantees that all redisplay related events has been received and handeled by Emacs before it returns. My guess is that it just makes the needed X calls and then returns. For some reason or another, the dialog blocks the handling of other X events. Can the OP try to move the dialog around a bit and see if the frame below it is redrawn at all? Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-23 19:14 ` Jan Djärv @ 2007-04-23 22:12 ` Stephen Berman 2007-04-23 22:50 ` YAMAMOTO Mitsuharu 2007-04-24 14:08 ` Stefan Monnier 1 sibling, 1 reply; 41+ messages in thread From: Stephen Berman @ 2007-04-23 22:12 UTC (permalink / raw) To: emacs-devel On Mon, 23 Apr 2007 21:14:35 +0200 Jan Djärv <jan.h.d@swipnet.se> wrote: > I can't reproduce it with or without Gtk+, *scratch* or not. I > suspect it is a timing issue in X. I don't think redisplay guarantees > that all redisplay related events has been received and handeled by > Emacs before it returns. My guess is that it just makes the needed X > calls and then returns. For some reason or another, the dialog blocks > the handling of other X events. Can the OP try to move the dialog > around a bit and see if the frame below it is redrawn at all? I'm not the OP but I followed up with the observation of different behaviors depending on how the sexp is evalled. When I first tested, I got consistent results, but after reading your post I tried it again, both with -Q and with my initializations, and now found the results to be inconsistent, i.e., sometimes I got a fully redrawn frame and sometimes a blank frame (though when it was blank, moving the dialog frame did not cause redrawing of the blank frame), regardless of how I evalled the sexp. I guess this supports your suspicion about timing. Steve Berman ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-23 22:12 ` Stephen Berman @ 2007-04-23 22:50 ` YAMAMOTO Mitsuharu 2007-04-24 1:10 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-04-23 22:50 UTC (permalink / raw) To: emacs-devel >>>>> On Tue, 24 Apr 2007 00:12:04 +0200, Stephen Berman <Stephen.Berman@gmx.net> said: > When I first tested, I got consistent results, but after reading > your post I tried it again, both with -Q and with my > initializations, and now found the results to be inconsistent, i.e., > sometimes I got a fully redrawn frame and sometimes a blank frame > (though when it was blank, moving the dialog frame did not cause > redrawing of the blank frame), regardless of how I evalled the sexp. Recently I observed a possibly related issue while experimenting with "compositing windows" on Mac Carbon port. Compositing window mode means all the drawing operations must be done in response to "expose" (kEventControlDraw) events, and other drawing operations are converted to making dirty the drawn area instead of real drawings. To make things work, expose_frame must correctly draw the contents most of the time. But with the experiment of compositing windows, I observe that is not always the case even if !FRAME_GARBARGED_P(f) && updated_window != NULL. It seems to fail to do so after the current matrix is updated with try_window_reusing_current_matrix under a certain condition, but I haven't figured it out yet. I guess the problem with redrawing frames under dialog are related with the above issue and only GTK+-build users notice this because it clears the exposed area before calling expose_frame (compositing window on Mac also does so automatically). YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-23 22:50 ` YAMAMOTO Mitsuharu @ 2007-04-24 1:10 ` YAMAMOTO Mitsuharu 2007-04-26 20:58 ` Stephen Berman 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-04-24 1:10 UTC (permalink / raw) To: emacs-devel >>>>> On Tue, 24 Apr 2007 07:50:17 +0900 (JST), YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> said: > To make things work, expose_frame must correctly draw the contents > most of the time. But with the experiment of compositing windows, I > observe that is not always the case even if !FRAME_GARBARGED_P(f) && > updated_window != NULL. Sorry, I meant "if !FRAME_GARBAGED_P (f) && updated_window == NULL". > I guess the problem with redrawing frames under dialog are related > with the above issue and only GTK+-build users notice this because > it clears the exposed area before calling expose_frame (compositing > window on Mac also does so automatically). Stephen, could try the following patch? I don't think this is a right fix, but at least we can check if we are sharing the same issue. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp Index: src/xdisp.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/xdisp.c,v retrieving revision 1.1148 diff -c -p -r1.1148 xdisp.c *** src/xdisp.c 16 Apr 2007 15:12:24 -0000 1.1148 --- src/xdisp.c 24 Apr 2007 00:54:59 -0000 *************** expose_window (w, fr) *** 23531,23542 **** /* Update lines intersecting rectangle R. */ first_overlapping_row = last_overlapping_row = NULL; for (row = w->current_matrix->rows; ! row->enabled_p; ++row) { int y0 = row->y; int y1 = MATRIX_ROW_BOTTOM_Y (row); if ((y0 >= r.y && y0 < r.y + r.height) || (y1 > r.y && y1 < r.y + r.height) || (r.y >= y0 && r.y < y1) --- 23531,23545 ---- /* Update lines intersecting rectangle R. */ first_overlapping_row = last_overlapping_row = NULL; for (row = w->current_matrix->rows; ! row < w->current_matrix->rows + w->current_matrix->nrows; ++row) { int y0 = row->y; int y1 = MATRIX_ROW_BOTTOM_Y (row); + if (!row->enabled_p) + continue; + if ((y0 >= r.y && y0 < r.y + r.height) || (y1 > r.y && y1 < r.y + r.height) || (r.y >= y0 && r.y < y1) ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-24 1:10 ` YAMAMOTO Mitsuharu @ 2007-04-26 20:58 ` Stephen Berman 2007-04-27 8:57 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: Stephen Berman @ 2007-04-26 20:58 UTC (permalink / raw) To: emacs-devel On Tue, 24 Apr 2007 10:10:09 +0900 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> wrote: > Stephen, could try the following patch? I don't think this is a right > fix, but at least we can check if we are sharing the same issue. I applied your patch and rebuilt Emacs, and I still see the blank frame, though, as I mentioned in my previous followup, I don't see the effect as consistently as I had thought and reported in my original followup. Now I'll try the patch that Jan Djärv posted. Steve Berman ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-26 20:58 ` Stephen Berman @ 2007-04-27 8:57 ` YAMAMOTO Mitsuharu 2007-04-28 4:06 ` Richard Stallman 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-04-27 8:57 UTC (permalink / raw) To: emacs-devel >>>>> On Thu, 26 Apr 2007 22:58:30 +0200, Stephen Berman <Stephen.Berman@gmx.net> said: >> Stephen, could try the following patch? I don't think this is a >> right fix, but at least we can check if we are sharing the same >> issue. > I applied your patch and rebuilt Emacs, and I still see the blank > frame, though, as I mentioned in my previous followup, I don't see > the effect as consistently as I had thought and reported in my > original followup. Thanks for testing. >>>>> On Tue, 24 Apr 2007 07:50:17 +0900 (JST), YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> said: > To make things work, expose_frame must correctly draw the contents > most of the time. But with the experiment of compositing windows, I > observe that is not always the case even if !FRAME_GARBARGED_P(f) && > updated_window != NULL. It seems to fail to do so after the current > matrix is updated with try_window_reusing_current_matrix under a > certain condition, but I haven't figured it out yet. Though my issue above has turned out to be unrelated to the dialog one, I think I figured out the problematic case for my issue. In try_window_reusing_current_matrix (the scroll-down case), `it.vpos' rows in the current matrix are disabled. But the scroll-down height in rows is stored in `nrows_scrolled' and they differ by 1 when the header line is present. As a result, the first row of the reused part is erroneously disabled and the rows below it don't get redrawn by Expose events. The following patch seems to work for me. Could someone check it and comment on whether it should be installed before the release or not? YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp Index: src/xdisp.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/xdisp.c,v retrieving revision 1.1149 diff -c -p -r1.1149 xdisp.c *** src/xdisp.c 24 Apr 2007 01:32:41 -0000 1.1149 --- src/xdisp.c 27 Apr 2007 08:37:31 -0000 *************** try_window_reusing_current_matrix (w) *** 13811,13817 **** nrows_scrolled); /* Disable lines that must be updated. */ ! for (i = 0; i < it.vpos; ++i) (start_row + i)->enabled_p = 0; /* Re-compute Y positions. */ --- 13811,13817 ---- nrows_scrolled); /* Disable lines that must be updated. */ ! for (i = 0; i < nrows_scrolled; ++i) (start_row + i)->enabled_p = 0; /* Re-compute Y positions. */ ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-27 8:57 ` YAMAMOTO Mitsuharu @ 2007-04-28 4:06 ` Richard Stallman 2007-04-29 7:35 ` YAMAMOTO Mitsuharu 2007-04-29 7:51 ` David Kastrup 0 siblings, 2 replies; 41+ messages in thread From: Richard Stallman @ 2007-04-28 4:06 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: emacs-devel Your fix is almost certainly an improvement. Unless someone sees a gross flaw in it, please install it tomorrow. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-28 4:06 ` Richard Stallman @ 2007-04-29 7:35 ` YAMAMOTO Mitsuharu 2007-04-29 21:41 ` Richard Stallman 2007-04-29 7:51 ` David Kastrup 1 sibling, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-04-29 7:35 UTC (permalink / raw) To: rms; +Cc: emacs-devel >>>>> On Sat, 28 Apr 2007 00:06:50 -0400, Richard Stallman <rms@gnu.org> said: > Your fix is almost certainly an improvement. Unless someone sees a > gross flaw in it, please install it tomorrow. Done. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-29 7:35 ` YAMAMOTO Mitsuharu @ 2007-04-29 21:41 ` Richard Stallman 2007-05-01 8:30 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: Richard Stallman @ 2007-04-29 21:41 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: emacs-devel Is this item fixed now? ** rgm@gnu.org, Apr 24: [Stephen.Berman@gmx.net: Re: redisplay] Gives test case for problem that a dialog box blocks redisplay. http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00951.html ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-29 21:41 ` Richard Stallman @ 2007-05-01 8:30 ` YAMAMOTO Mitsuharu 2007-05-02 0:12 ` Richard Stallman 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-05-01 8:30 UTC (permalink / raw) To: rms; +Cc: emacs-devel >>>>> On Sun, 29 Apr 2007 17:41:07 -0400, Richard Stallman <rms@gnu.org> said: > Is this item fixed now? > ** rgm@gnu.org, Apr 24: [Stephen.Berman@gmx.net: Re: redisplay] > Gives test case for problem that a dialog box blocks redisplay. > http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00951.html According to the reports below, Jan's patch, which is already installed to both trunk and branch, gave good results. http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01264.html http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01327.html I've just made the corresponding changes to macmenu.c. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-05-01 8:30 ` YAMAMOTO Mitsuharu @ 2007-05-02 0:12 ` Richard Stallman 0 siblings, 0 replies; 41+ messages in thread From: Richard Stallman @ 2007-05-02 0:12 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: emacs-devel I deleted that item. Thanks. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-28 4:06 ` Richard Stallman 2007-04-29 7:35 ` YAMAMOTO Mitsuharu @ 2007-04-29 7:51 ` David Kastrup 2007-04-29 9:25 ` Nick Roberts 2007-04-29 21:41 ` Richard Stallman 1 sibling, 2 replies; 41+ messages in thread From: David Kastrup @ 2007-04-29 7:51 UTC (permalink / raw) To: rms; +Cc: YAMAMOTO Mitsuharu, emacs-devel Richard Stallman <rms@gnu.org> writes: > Your fix is almost certainly an improvement. Unless someone sees > a gross flaw in it, please install it tomorrow. I see a gross flaw in installing "almost certain improvements" in a central area of Emacs when we are trying to pin down a final release. I have a really hard time believing this. The way it looks, the only chance we have for releasing 22.1 is to have yourself cut off from Email. I am unsubscribing from the list until the release is over. I can't stand this any longer. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-29 7:51 ` David Kastrup @ 2007-04-29 9:25 ` Nick Roberts 2007-04-29 21:41 ` Richard Stallman 1 sibling, 0 replies; 41+ messages in thread From: Nick Roberts @ 2007-04-29 9:25 UTC (permalink / raw) To: David Kastrup; +Cc: rms, YAMAMOTO Mitsuharu, emacs-devel > > Your fix is almost certainly an improvement. Unless someone sees > > a gross flaw in it, please install it tomorrow. > > I see a gross flaw in installing "almost certain improvements" in a > central area of Emacs when we are trying to pin down a final release. I guess freedom doesn't mean being able to make someone do what they don't want to. It appears to me that the release process, having gone on for three years now, is a more of a means to get bugs fixed than aimed at a release in itself. But while Richard can control the release, Emacs is free software, so he can't control the distribution and, indeed, some distros are starting to include snapshots of Emacs 22. The cat is, or soon will be, out of the bag. >... > I am unsubscribing from the list until the release is over. I can't > stand this any longer. Hello? Are you still there? -- Nick http://www.inet.net.nz/~nickrob ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-29 7:51 ` David Kastrup 2007-04-29 9:25 ` Nick Roberts @ 2007-04-29 21:41 ` Richard Stallman 2007-04-29 22:14 ` David Kastrup 1 sibling, 1 reply; 41+ messages in thread From: Richard Stallman @ 2007-04-29 21:41 UTC (permalink / raw) To: David Kastrup; +Cc: mituharu, emacs-devel I see a gross flaw in installing "almost certain improvements" in a central area of Emacs when we are trying to pin down a final release. The improvement in question consists of at least partly fixing a bug. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-29 21:41 ` Richard Stallman @ 2007-04-29 22:14 ` David Kastrup 2007-05-01 0:23 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: David Kastrup @ 2007-04-29 22:14 UTC (permalink / raw) To: rms; +Cc: mituharu, emacs-devel Richard Stallman <rms@gnu.org> writes: > I see a gross flaw in installing "almost certain improvements" > in a central area of Emacs when we are trying to pin down a > final release. > > The improvement in question consists of at least partly fixing a bug. You don't understand what prerelease testing is about. The goal is not to get a bugfree version of Emacs released. Whoever thinks this possible is lunatic. The goal is to release a version of Emacs which has not introduced severe regressions in a time frame where they could have escaped noticing. Every change, including bug fixes, in particular in general areas, carries with it the danger of introducing _exactly_ those kind of heavy regressions. The ChangeLog files are _full_ of reverted fixes which turned out to do something wrong. If we go on fixing bugs that are not a direct consequence of very recent changes, we will never get to the state where we can be sure not to have release-critical bugs introduced without notice. The bugs you found necessary fixing in the last few weeks are _much_ _much_ more harmless than having to use Emacs 21 instead of Emacs 22. Emacs 22 will _never_ be in a bugfree state before the release. Nor will it become bugfree afterwards. But at least afterwards we can make overall progress. In contrast to the problem of the delayed release, you are playing with toy problems. Problems that will pop up for years and years to come. It is not sane to delay the release because of that: a release is appropriate when there is a definite improvement over the last release without major regressions. This has been the case for years, actually. There is no sense in instead of improvement demanding perfection. People experienced with software releases have told you this time and again. You chose to scorn them for their frustration about you ignoring established procedures and conventional wisdom. Do you really not see what you are doing? For how long are you going to sabotage the attempts of the developers to get Emacs 22.1 released? -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-29 22:14 ` David Kastrup @ 2007-05-01 0:23 ` YAMAMOTO Mitsuharu 0 siblings, 0 replies; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-05-01 0:23 UTC (permalink / raw) To: David Kastrup; +Cc: rms, emacs-devel >>>>> On Mon, 30 Apr 2007 00:14:12 +0200, David Kastrup <dak@gnu.org> said: > Every change, including bug fixes, in particular in general areas, > carries with it the danger of introducing _exactly_ those kind of > heavy regressions. The ChangeLog files are _full_ of reverted fixes > which turned out to do something wrong. If you wanted to say so, you shouldn't have brought it up against my patch. Its validity was too obvious to apply your principle above. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-23 19:14 ` Jan Djärv 2007-04-23 22:12 ` Stephen Berman @ 2007-04-24 14:08 ` Stefan Monnier 2007-04-24 14:49 ` Jan Djärv 2007-04-24 18:27 ` Glenn Morris 1 sibling, 2 replies; 41+ messages in thread From: Stefan Monnier @ 2007-04-24 14:08 UTC (permalink / raw) To: Jan Djärv; +Cc: Chong Yidong, rms, emacs-devel > I can't reproduce it with or without Gtk+, *scratch* or not. I suspect it > is a timing issue in X. I don't think redisplay guarantees that all > redisplay related events has been received and handeled by Emacs before it > returns. Even if it does an XSync? In any case, I have regularly seen similar problems when leaving Emacs: if I have processes running, Emacs displays a *processes* list, and because of my pop-up-frames (and/or special-display-regexps) settings, it does it by first popping up a new frame displaying this *processes* buffer, and then pops up a dialog asking me whether I really want to quit. The problem is that the *processes* frame is generally blank at that point. Stefan ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-24 14:08 ` Stefan Monnier @ 2007-04-24 14:49 ` Jan Djärv 2007-04-24 18:27 ` Glenn Morris 1 sibling, 0 replies; 41+ messages in thread From: Jan Djärv @ 2007-04-24 14:49 UTC (permalink / raw) To: Stefan Monnier; +Cc: Chong Yidong, rms, emacs-devel Stefan Monnier skrev: >> I can't reproduce it with or without Gtk+, *scratch* or not. I suspect it >> is a timing issue in X. I don't think redisplay guarantees that all >> redisplay related events has been received and handeled by Emacs before it >> returns. > > Even if it does an XSync? XSync only guarantees that events have been sent to the server and replies have been received into Xlib. There might be stuff Emacs have left to do still. But I don't know redisplay that well to be sure. XSync is our bet bet though. > > In any case, I have regularly seen similar problems when leaving Emacs: if > I have processes running, Emacs displays a *processes* list, and because of my > pop-up-frames (and/or special-display-regexps) settings, it does it by first > popping up a new frame displaying this *processes* buffer, and then pops up > a dialog asking me whether I really want to quit. > The problem is that the *processes* frame is generally blank at that point. Hmm, I'll try to reproduce this some more. Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-24 14:08 ` Stefan Monnier 2007-04-24 14:49 ` Jan Djärv @ 2007-04-24 18:27 ` Glenn Morris 2007-04-25 8:47 ` Jan Djärv 1 sibling, 1 reply; 41+ messages in thread From: Glenn Morris @ 2007-04-24 18:27 UTC (permalink / raw) To: Stefan Monnier; +Cc: Chong Yidong, Jan Djärv, rms, emacs-devel Stefan Monnier wrote: > In any case, I have regularly seen similar problems when leaving > Emacs: if I have processes running, Emacs displays a *processes* > list, and because of my pop-up-frames (and/or > special-display-regexps) settings, it does it by first popping up a > new frame displaying this *processes* buffer, and then pops up a > dialog asking me whether I really want to quit. The problem is that > the *processes* frame is generally blank at that point. I've seen something which sounds like this as well. I see it reproducibly with: emacs -Q (setq special-display-regexps '(".*-diff\\*")) (add-to-list 'minor-mode-map-alist `(vc-mode keymap (menu-bar keymap (VC menu-item "VC" ,vc-menu-map)))) Then I visit a file under version control, make some changes, then select VC->Revert to Base Version from the menu-bar. A frame with the diffs gets popped up, as well as a dialogue box saying "Discard Changes? Yes No". The diff frame is empty of mode-line and buffer contents. This is with: x86_64-unknown-linux-gnu, X toolkit Windowing system distributor `The X.Org Foundation', version 11.0.60802000 --with-x-toolkit=athena --without-toolkit-scroll-bars ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-24 18:27 ` Glenn Morris @ 2007-04-25 8:47 ` Jan Djärv 2007-04-25 14:36 ` Stefan Monnier 0 siblings, 1 reply; 41+ messages in thread From: Jan Djärv @ 2007-04-25 8:47 UTC (permalink / raw) To: Glenn Morris; +Cc: Chong Yidong, emacs-devel, Stefan Monnier, rms Glenn Morris skrev: > Stefan Monnier wrote: > >> In any case, I have regularly seen similar problems when leaving >> Emacs: if I have processes running, Emacs displays a *processes* >> list, and because of my pop-up-frames (and/or >> special-display-regexps) settings, it does it by first popping up a >> new frame displaying this *processes* buffer, and then pops up a >> dialog asking me whether I really want to quit. The problem is that >> the *processes* frame is generally blank at that point. > > I've seen something which sounds like this as well. I see it > reproducibly with: > > emacs -Q > (setq special-display-regexps '(".*-diff\\*")) > (add-to-list 'minor-mode-map-alist > `(vc-mode keymap > (menu-bar keymap > (VC menu-item "VC" ,vc-menu-map)))) > > Then I visit a file under version control, make some changes, then > select VC->Revert to Base Version from the menu-bar. A frame with the > diffs gets popped up, as well as a dialogue box saying "Discard > Changes? Yes No". The diff frame is empty of mode-line and buffer > contents. > Thanks, now I see it. There is a race in here. I can see that redisplay on the new frame have not happened before the dialog pops up. When the dialog is up, redisplay is inhibited in xdisp.c, redisplay_internal. Sometimes the frame will get redisplayed properly, only to be cleared almost at once by an Expose event. This expose event happens in the middle of an ongoing redisplay, so a new redisplay is not started. Directly when the ongoing redisplay has finished, the dialog is popped up, and no redisplay is made. There are several possible solutions to this. 1. SYNC_INPUT. That way we won't get expose events in the middle of an ongoing redisplay. 2. Restart redisplay if an redisplay-related event arrives in the middle of an ongoing redisplay. 3. Use double buffering. That would get rid of the clearing of the frame. Unfortunately I don't see a quick fix for 22.1. Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 8:47 ` Jan Djärv @ 2007-04-25 14:36 ` Stefan Monnier 2007-04-25 14:50 ` Jan Djärv 0 siblings, 1 reply; 41+ messages in thread From: Stefan Monnier @ 2007-04-25 14:36 UTC (permalink / raw) To: Jan Djärv; +Cc: Glenn Morris, Chong Yidong, rms, emacs-devel > 1. SYNC_INPUT. That way we won't get expose events in the middle of an > ongoing redisplay. Hmm... I've been running with SYNC_INPUT for a long time now, and I'm pretty sure that I still see those problems. So maybe SYNC_INPUT would allow to write a solution, but it's not a solution in itself. Stefan ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 14:36 ` Stefan Monnier @ 2007-04-25 14:50 ` Jan Djärv 2007-04-25 18:30 ` Jan Djärv 0 siblings, 1 reply; 41+ messages in thread From: Jan Djärv @ 2007-04-25 14:50 UTC (permalink / raw) To: Stefan Monnier; +Cc: Glenn Morris, Chong Yidong, rms, emacs-devel Stefan Monnier skrev: >> 1. SYNC_INPUT. That way we won't get expose events in the middle of an >> ongoing redisplay. > > Hmm... I've been running with SYNC_INPUT for a long time now, and I'm pretty > sure that I still see those problems. So maybe SYNC_INPUT would allow to > write a solution, but it's not a solution in itself. Yes, you are right. It would also require to run redisplay directly on the Expose event. Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 14:50 ` Jan Djärv @ 2007-04-25 18:30 ` Jan Djärv 2007-04-25 19:34 ` Stefan Monnier ` (4 more replies) 0 siblings, 5 replies; 41+ messages in thread From: Jan Djärv @ 2007-04-25 18:30 UTC (permalink / raw) To: Jan Djärv Cc: Glenn Morris, Chong Yidong, emacs-devel, Stefan Monnier, rms Jan Djärv skrev: > > > Stefan Monnier skrev: >>> 1. SYNC_INPUT. That way we won't get expose events in the middle of an >>> ongoing redisplay. >> >> Hmm... I've been running with SYNC_INPUT for a long time now, and I'm >> pretty >> sure that I still see those problems. So maybe SYNC_INPUT would allow to >> write a solution, but it's not a solution in itself. > > Yes, you are right. It would also require to run redisplay directly on > the Expose event. > After some experimenting it seems that this patch fixes it. Note that a call to redisplay() does not fix the bug. I don't know why. But a full redisplay before every dialog maybe is too much? diff -w -c src/xmenu.c.~1.317.~ src/xmenu.c Index: src/xmenu.c *** src/xmenu.c.~1.317.~ 2007-01-21 11:33:57.000000000 +0100 --- src/xmenu.c 2007-04-25 20:27:02.000000000 +0200 *************** *** 3333,3338 **** --- 3333,3340 ---- /* No selection has been chosen yet. */ menu_item_selection = 0; + Fredisplay (Qt); + /* Actually create and show the dialog. */ create_and_show_dialog (f, first_wv); Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 18:30 ` Jan Djärv @ 2007-04-25 19:34 ` Stefan Monnier 2007-04-25 19:44 ` YAMAMOTO Mitsuharu ` (3 subsequent siblings) 4 siblings, 0 replies; 41+ messages in thread From: Stefan Monnier @ 2007-04-25 19:34 UTC (permalink / raw) To: Jan Djärv; +Cc: Glenn Morris, Chong Yidong, rms, emacs-devel > After some experimenting it seems that this patch fixes it. Note that > a call to redisplay() does not fix the bug. I don't know why. But a full > redisplay before every dialog maybe is too much? Am I wrong in thinking that Fredisplay(Qt) does not redraw every single frame, but just does a normal redisplay (i.e. update the out-of-date elements of the display), with the exception that it will complete the redisplay even if there's input pending? I.e. if the display is already up-to-date, Fredisplay(Qt) is a no-op? If so, and it works, then your patch looks fine to me. Stefan > diff -w -c src/xmenu.c.~1.317.~ src/xmenu.c > Index: src/xmenu.c > *** src/xmenu.c.~1.317.~ 2007-01-21 11:33:57.000000000 +0100 > --- src/xmenu.c 2007-04-25 20:27:02.000000000 +0200 > *************** > *** 3333,3338 **** > --- 3333,3340 ---- > /* No selection has been chosen yet. */ > menu_item_selection = 0; > + Fredisplay (Qt); > + > /* Actually create and show the dialog. */ > create_and_show_dialog (f, first_wv); > Jan D. > _______________________________________________ > Emacs-devel mailing list > Emacs-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 18:30 ` Jan Djärv 2007-04-25 19:34 ` Stefan Monnier @ 2007-04-25 19:44 ` YAMAMOTO Mitsuharu 2007-04-26 5:58 ` Jan Djärv 2007-04-26 3:08 ` Glenn Morris ` (2 subsequent siblings) 4 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-04-25 19:44 UTC (permalink / raw) To: jan.h.d; +Cc: rgm, cyd, monnier, rms, emacs-devel >>>>> On Wed, 25 Apr 2007 20:30:08 +0200, Jan Djärv <jan.h.d@swipnet.se> said: >> Yes, you are right. It would also require to run redisplay >> directly on the Expose event. But Lisp evaluations might occur during redisplay (unless inhibit-eval-during-redisplay is non-nil), and thus it's not safe to do so in general. > After some experimenting it seems that this patch fixes it. Note > that a call to redisplay() does not fix the bug. I don't know why. I think that's because redisplay is paused by a pending Expose event if redisplay-dont-pause is nil (`Fredisplay (Qt)' temporarily binds it to t). I observed similar undrawn area with "compositing window mode" mentioned in *1 when redisplay-dont-pause is nil and without the patch in *2. *1: http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01003.html *2: http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01013.html YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 19:44 ` YAMAMOTO Mitsuharu @ 2007-04-26 5:58 ` Jan Djärv 2007-04-26 8:35 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: Jan Djärv @ 2007-04-26 5:58 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: rgm, cyd, emacs-devel, monnier, rms YAMAMOTO Mitsuharu skrev: >>>>>> On Wed, 25 Apr 2007 20:30:08 +0200, Jan Djärv <jan.h.d@swipnet.se> said: > >>> Yes, you are right. It would also require to run redisplay >>> directly on the Expose event. > > But Lisp evaluations might occur during redisplay (unless > inhibit-eval-during-redisplay is non-nil), and thus it's not safe to > do so in general. When SYNC_INPUT is on we are not handling X events in the signal handler anymore. Isn't Lisp evaluations safe then? Why not? Reentrance-problems? Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-26 5:58 ` Jan Djärv @ 2007-04-26 8:35 ` YAMAMOTO Mitsuharu 0 siblings, 0 replies; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2007-04-26 8:35 UTC (permalink / raw) To: Jan Djärv; +Cc: rgm, cyd, emacs-devel, monnier, rms >>>>> On Thu, 26 Apr 2007 07:58:26 +0200, Jan Djärv <jan.h.d@swipnet.se> said: >>>> Yes, you are right. It would also require to run redisplay >>>> directly on the Expose event. >> >> But Lisp evaluations might occur during redisplay (unless >> inhibit-eval-during-redisplay is non-nil), and thus it's not safe >> to do so in general. > When SYNC_INPUT is on we are not handling X events in the signal > handler anymore. Isn't Lisp evaluations safe then? Why not? > Reentrance-problems? I was thinking about SYNC_INPUT and redisplay triggered by an Expose event separately. Actually, as I said in http://lists.gnu.org/archive/html/emacs-devel/2005-04/msg00365.html, I'd really appreciate it if evaluations during read_socket_hook become possible. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 18:30 ` Jan Djärv 2007-04-25 19:34 ` Stefan Monnier 2007-04-25 19:44 ` YAMAMOTO Mitsuharu @ 2007-04-26 3:08 ` Glenn Morris 2007-04-26 20:59 ` Stephen Berman 2009-03-16 1:37 ` YAMAMOTO Mitsuharu 4 siblings, 0 replies; 41+ messages in thread From: Glenn Morris @ 2007-04-26 3:08 UTC (permalink / raw) To: Jan Djärv; +Cc: Chong Yidong, emacs-devel, Stefan Monnier, rms Jan Djärv wrote: > After some experimenting it seems that this patch fixes it. Note > that a call to redisplay() does not fix the bug. I don't know why. > But a full redisplay before every dialog maybe is too much? This seems to fix it for me [1]; but I was never particularly bothered by this issue (which I've been seeing for some time), so personally I'm happy for Emacs 22 to be released with this still extant, to give you more time to test a solution. [1] One time out of many tests I thought I saw the problem again, but I could never repeat it and may well have been mistaken. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 18:30 ` Jan Djärv ` (2 preceding siblings ...) 2007-04-26 3:08 ` Glenn Morris @ 2007-04-26 20:59 ` Stephen Berman 2007-04-27 5:58 ` Jan Djärv 2009-03-16 1:37 ` YAMAMOTO Mitsuharu 4 siblings, 1 reply; 41+ messages in thread From: Stephen Berman @ 2007-04-26 20:59 UTC (permalink / raw) To: emacs-devel On Wed, 25 Apr 2007 20:30:08 +0200 Jan Djärv <jan.h.d@swipnet.se> wrote: > After some experimenting it seems that this patch fixes it. Note that a call > to redisplay() does not fix the bug. I don't know why. But a full redisplay > before every dialog maybe is too much? I rebuilt with this patch and haven't seen the blank frame problem yet, so it looks like it fixes the problem; thanks. (Ediff failed to apply the patch for some reason, so I just inserted the line by hand.) Steve Berman ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-26 20:59 ` Stephen Berman @ 2007-04-27 5:58 ` Jan Djärv 0 siblings, 0 replies; 41+ messages in thread From: Jan Djärv @ 2007-04-27 5:58 UTC (permalink / raw) To: Stephen Berman; +Cc: emacs-devel Stephen Berman skrev: > On Wed, 25 Apr 2007 20:30:08 +0200 Jan Djärv <jan.h.d@swipnet.se> wrote: > >> After some experimenting it seems that this patch fixes it. Note that a call >> to redisplay() does not fix the bug. I don't know why. But a full redisplay >> before every dialog maybe is too much? > > I rebuilt with this patch and haven't seen the blank frame problem > yet, so it looks like it fixes the problem; thanks. (Ediff failed to > apply the patch for some reason, so I just inserted the line by hand.) > Thunderbird sometimes makes a mess of whitespace in cut and pasted text. Jan D. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2007-04-25 18:30 ` Jan Djärv ` (3 preceding siblings ...) 2007-04-26 20:59 ` Stephen Berman @ 2009-03-16 1:37 ` YAMAMOTO Mitsuharu 2009-03-16 12:16 ` David Reitter 4 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2009-03-16 1:37 UTC (permalink / raw) To: emacs-devel [Revisiting an old change] >>>>> On Wed, 25 Apr 2007 20:30:08 +0200, Jan Djärv <jan.h.d@swipnet.se> said: > After some experimenting it seems that this patch fixes it. Note > that a call to redisplay() does not fix the bug. I don't know why. > But a full redisplay before every dialog maybe is too much? > diff -w -c src/xmenu.c.~1.317.~ src/xmenu.c > Index: src/xmenu.c > *** src/xmenu.c.~1.317.~ 2007-01-21 11:33:57.000000000 +0100 > --- src/xmenu.c 2007-04-25 20:27:02.000000000 +0200 > *************** > *** 3333,3338 **** > --- 3333,3340 ---- > /* No selection has been chosen yet. */ > menu_item_selection = 0; > + Fredisplay (Qt); > + > /* Actually create and show the dialog. */ > create_and_show_dialog (f, first_wv); Fredisplay runs timers and may cause string data relocation by GC. Just before the call to Fredisplay, a widget value is created and it points to some string data, which are to be used as button labels after the Fredisplay call. So this may cause corruption of dialog button labels. I've never seen such corruption actually, but I think that may happen in principle unless I'm missing something. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-16 1:37 ` YAMAMOTO Mitsuharu @ 2009-03-16 12:16 ` David Reitter 2009-03-16 15:18 ` Chong Yidong 0 siblings, 1 reply; 41+ messages in thread From: David Reitter @ 2009-03-16 12:16 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 2816 bytes --] On Mar 15, 2009, at 9:37 PM, YAMAMOTO Mitsuharu wrote: > [Revisiting an old change] > >>>>>> On Wed, 25 Apr 2007 20:30:08 +0200, Jan Djärv >>>>>> <jan.h.d@swipnet.se> said: > >> After some experimenting it seems that this patch fixes it. Note >> that a call to redisplay() does not fix the bug. I don't know why. >> But a full redisplay before every dialog maybe is too much? > >> diff -w -c src/xmenu.c.~1.317.~ src/xmenu.c >> Index: src/xmenu.c >> *** src/xmenu.c.~1.317.~ 2007-01-21 11:33:57.000000000 +0100 >> --- src/xmenu.c 2007-04-25 20:27:02.000000000 +0200 >> *************** >> *** 3333,3338 **** >> --- 3333,3340 ---- >> /* No selection has been chosen yet. */ >> menu_item_selection = 0; > >> + Fredisplay (Qt); >> + >> /* Actually create and show the dialog. */ >> create_and_show_dialog (f, first_wv); > > Fredisplay runs timers and may cause string data relocation by GC. > Just before the call to Fredisplay, a widget value is created and it > points to some string data, which are to be used as button labels > after the Fredisplay call. So this may cause corruption of dialog > button labels. I've never seen such corruption actually, but I think > that may happen in principle unless I'm missing something. I absolutely see such corruption in the Carbon port, which creates the dialog in a similar fashion. This was in connection with a header line that uses an :eval expression, and a modified map-y-or-n-p that switches buffers to show the right one. As you say, the strings get destroyed, but that was relatively easy to fix by doing the redisplay a bit earlier. *** src/macmenu.c 30 Aug 2008 00:10:18 -0400 1.56.2.7 --- src/macmenu.c 09 Feb 2009 13:21:20 -0500 *************** *** 1882,1888 **** return Qnil; } ! /* Create a tree of widget_value objects representing the text label and buttons. */ { Lisp_Object pane_name, prefix; --- 1882,1893 ---- return Qnil; } ! /* Force a redisplay before showing the dialog. If a frame is created ! just before showing the dialog, its contents may not have been fully ! drawn. */ ! Fredisplay (Qt); ! ! /* Create a tree of widget_value objects representing the text label and buttons. */ { Lisp_Object pane_name, prefix; *************** *** 1985,1994 **** /* No selection has been chosen yet. */ menu_item_selection = 0; - /* Force a redisplay before showing the dialog. If a frame is created - just before showing the dialog, its contents may not have been fully - drawn. */ - Fredisplay (Qt); /* Actually create the dialog. */ #if TARGET_API_MAC_CARBON --- 1990,1995 ---- [-- Attachment #2: smime.p7s --] [-- Type: application/pkcs7-signature, Size: 2193 bytes --] ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-16 12:16 ` David Reitter @ 2009-03-16 15:18 ` Chong Yidong 2009-03-17 2:43 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: Chong Yidong @ 2009-03-16 15:18 UTC (permalink / raw) To: David Reitter; +Cc: Jan Djärv, YAMAMOTO Mitsuharu, emacs-devel David Reitter <david.reitter@gmail.com> writes: > I absolutely see such corruption in the Carbon port, which creates the > dialog in a similar fashion. This was in connection with a header > line that uses an :eval expression, and a modified map-y-or-n-p that > switches buffers to show the right one. As you say, the strings get > destroyed, but that was relatively easy to fix by doing the redisplay > a bit earlier. This does not work properly on X. With that change, there are frame exposure problems using the recipe from http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01201.html (i.e., when the dialog box is moved, the underlying frame is not drawn properly.) However, I have not had time to debug further. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-16 15:18 ` Chong Yidong @ 2009-03-17 2:43 ` YAMAMOTO Mitsuharu 2009-03-17 3:59 ` Chong Yidong 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2009-03-17 2:43 UTC (permalink / raw) To: Chong Yidong; +Cc: David Reitter, Jan Djärv, emacs-devel >>>>> On Mon, 16 Mar 2009 11:18:44 -0400, Chong Yidong <cyd@stupidchicken.com> said: >> I absolutely see such corruption in the Carbon port, which creates >> the dialog in a similar fashion. This was in connection with a >> header line that uses an :eval expression, and a modified >> map-y-or-n-p that switches buffers to show the right one. As you >> say, the strings get destroyed, but that was relatively easy to fix >> by doing the redisplay a bit earlier. Ah, I didn't have to say about timers because redisplay can do Lisp evaluations in the first place. Actually I found this potentially problematic case when I was reading the code related to timers. > This does not work properly on X. With that change, there are frame > exposure problems using the recipe from > http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01201.html > (i.e., when the dialog box is moved, the underlying frame is not > drawn properly.) However, I have not had time to debug further. Just to be sure, that doesn't happen if Fredisplay is called from the original position? Actually I also thought that it was sufficient to move the Fredisplay call a bit earlier. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-17 2:43 ` YAMAMOTO Mitsuharu @ 2009-03-17 3:59 ` Chong Yidong 2009-03-17 4:13 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: Chong Yidong @ 2009-03-17 3:59 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: David Reitter, Jan Djärv, emacs-devel YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> writes: >> This does not work properly on X. With that change, there are frame >> exposure problems using the recipe from > >> http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01201.html > >> (i.e., when the dialog box is moved, the underlying frame is not >> drawn properly.) However, I have not had time to debug further. > > Just to be sure, that doesn't happen if Fredisplay is called from the > original position? Correct. The current version works properly; moving the Fredisplay call earlier leads to uncorrect display. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-17 3:59 ` Chong Yidong @ 2009-03-17 4:13 ` YAMAMOTO Mitsuharu 2009-03-17 9:06 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2009-03-17 4:13 UTC (permalink / raw) To: Chong Yidong; +Cc: David Reitter, Jan Djärv, emacs-devel >>>>> On Mon, 16 Mar 2009 23:59:40 -0400, Chong Yidong <cyd@stupidchicken.com> said: >>> This does not work properly on X. With that change, there are >>> frame exposure problems using the recipe from >> >>> http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01201.html >> >>> (i.e., when the dialog box is moved, the underlying frame is not >>> drawn properly.) However, I have not had time to debug further. >> >> Just to be sure, that doesn't happen if Fredisplay is called from >> the original position? > Correct. The current version works properly; moving the Fredisplay > call earlier leads to uncorrect display. Perhaps `menu_items' or something like that is corrupted by the Fredisplay call? Could you try the following patch? YAMAMOTO Mitsuharu mituharu@math.s.chiab-u.ac.jp Index: src/xmenu.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/xmenu.c,v retrieving revision 1.339 diff -c -p -r1.339 xmenu.c *** src/xmenu.c 8 Jan 2009 03:16:12 -0000 1.339 --- src/xmenu.c 17 Mar 2009 04:10:10 -0000 *************** for instance using the window manager, t *** 604,609 **** --- 604,617 ---- if (! FRAME_X_P (f) && ! FRAME_MSDOS_P (f)) error ("Can not put X dialog on this terminal"); + /* Force a redisplay before showing the dialog. If a frame is created + just before showing the dialog, its contents may not have been fully + drawn, as this depends on timing of events from the X server. Redisplay + is not done when a dialog is shown. If redisplay could be done in the + X event loop (i.e. the X event loop does not run in a signal handler) + this would not be needed. */ + Fredisplay (Qt); + #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) /* Display a menu with these alternatives in the middle of frame F. */ *************** xdialog_show (f, keymaps, title, header, *** 2448,2461 **** /* No selection has been chosen yet. */ menu_item_selection = 0; - /* Force a redisplay before showing the dialog. If a frame is created - just before showing the dialog, its contents may not have been fully - drawn, as this depends on timing of events from the X server. Redisplay - is not done when a dialog is shown. If redisplay could be done in the - X event loop (i.e. the X event loop does not run in a signal handler) - this would not be needed. */ - Fredisplay (Qt); - /* Actually create and show the dialog. */ create_and_show_dialog (f, first_wv); --- 2456,2461 ---- ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-17 4:13 ` YAMAMOTO Mitsuharu @ 2009-03-17 9:06 ` YAMAMOTO Mitsuharu 2009-03-17 15:13 ` Chong Yidong 0 siblings, 1 reply; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2009-03-17 9:06 UTC (permalink / raw) To: Chong Yidong; +Cc: David Reitter, Jan Djärv, emacs-devel >>>>> On Tue, 17 Mar 2009 13:13:43 +0900, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> said: >>>> This does not work properly on X. With that change, there are >>>> frame exposure problems using the recipe from >>> >>>> http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01201.html >>> >>>> (i.e., when the dialog box is moved, the underlying frame is not >>>> drawn properly.) However, I have not had time to debug further. >>> >>> Just to be sure, that doesn't happen if Fredisplay is called from >>> the original position? >> Correct. The current version works properly; moving the Fredisplay >> call earlier leads to uncorrect display. > Perhaps `menu_items' or something like that is corrupted by the > Fredisplay call? Could you try the following patch? I tried it myself with Ubuntu 8.10, GTK+ (as I could not reproduce the redraw-failure with X11 on Mac OS X, Xaw). It sometimes failed in redrawing with each of three Fredisplay call positions, including the original one. So I think this is a separate issue. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-17 9:06 ` YAMAMOTO Mitsuharu @ 2009-03-17 15:13 ` Chong Yidong 2009-03-18 8:56 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 41+ messages in thread From: Chong Yidong @ 2009-03-17 15:13 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: David Reitter, Jan Djärv, emacs-devel YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> writes: > I tried it myself with Ubuntu 8.10, GTK+ (as I could not reproduce the > redraw-failure with X11 on Mac OS X, Xaw). It sometimes failed in > redrawing with each of three Fredisplay call positions, including the > original one. So I think this is a separate issue. The failure seems to happen more often with the earlier Fredisplay call position. This is not surprising: the Fredisplay call is an attempt to update the display of the frames, which depends on X server timings that Emacs cannot affect directly. Since the goal is to perform the update just before opening the dialog, calling Fredisplay earlier makes this hack less reliable. Your analysis, however, makes it clear that this hack is problematic. However, I don't see any good solution right now. So, please go ahead and move the Fredisplay call to an earlier, safe position. ^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Stephen.Berman@gmx.net: Re: redisplay] 2009-03-17 15:13 ` Chong Yidong @ 2009-03-18 8:56 ` YAMAMOTO Mitsuharu 0 siblings, 0 replies; 41+ messages in thread From: YAMAMOTO Mitsuharu @ 2009-03-18 8:56 UTC (permalink / raw) To: Chong Yidong; +Cc: David Reitter, Jan Djärv, emacs-devel >>>>> On Tue, 17 Mar 2009 11:13:02 -0400, Chong Yidong <cyd@stupidchicken.com> said: > The failure seems to happen more often with the earlier Fredisplay > call position. This is not surprising: the Fredisplay call is an > attempt to update the display of the frames, which depends on X > server timings that Emacs cannot affect directly. Since the goal is > to perform the update just before opening the dialog, calling > Fredisplay earlier makes this hack less reliable. > Your analysis, however, makes it clear that this hack is > problematic. However, I don't see any good solution right now. So, > please go ahead and move the Fredisplay call to an earlier, safe > position. Done. Also, I traced both good and bad cases and observed the following: Good case (exposed area is redrawn) * For the "*vc-diff*" frame, xg_frame_resized is called twice before the Fredisplay call. * The height of the "*vc-diff*" window becomes 12. Bad case (exposed are is not redrawn) * For the "*vc-diff*" frame, xg_frame_resized is called once before and once after the Fredisplay call. (The second one does SET_FRAME_GARBAGED and that prevents subsequent expose_frame calls from redrawing the contents until the next redisplay.) * The height of the "*vc-diff*" window becomes 10. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 41+ messages in thread
end of thread, other threads:[~2009-03-18 8:56 UTC | newest] Thread overview: 41+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-04-23 3:48 [Stephen.Berman@gmx.net: Re: redisplay] Richard Stallman 2007-04-23 15:07 ` Chong Yidong 2007-04-23 19:14 ` Jan Djärv 2007-04-23 22:12 ` Stephen Berman 2007-04-23 22:50 ` YAMAMOTO Mitsuharu 2007-04-24 1:10 ` YAMAMOTO Mitsuharu 2007-04-26 20:58 ` Stephen Berman 2007-04-27 8:57 ` YAMAMOTO Mitsuharu 2007-04-28 4:06 ` Richard Stallman 2007-04-29 7:35 ` YAMAMOTO Mitsuharu 2007-04-29 21:41 ` Richard Stallman 2007-05-01 8:30 ` YAMAMOTO Mitsuharu 2007-05-02 0:12 ` Richard Stallman 2007-04-29 7:51 ` David Kastrup 2007-04-29 9:25 ` Nick Roberts 2007-04-29 21:41 ` Richard Stallman 2007-04-29 22:14 ` David Kastrup 2007-05-01 0:23 ` YAMAMOTO Mitsuharu 2007-04-24 14:08 ` Stefan Monnier 2007-04-24 14:49 ` Jan Djärv 2007-04-24 18:27 ` Glenn Morris 2007-04-25 8:47 ` Jan Djärv 2007-04-25 14:36 ` Stefan Monnier 2007-04-25 14:50 ` Jan Djärv 2007-04-25 18:30 ` Jan Djärv 2007-04-25 19:34 ` Stefan Monnier 2007-04-25 19:44 ` YAMAMOTO Mitsuharu 2007-04-26 5:58 ` Jan Djärv 2007-04-26 8:35 ` YAMAMOTO Mitsuharu 2007-04-26 3:08 ` Glenn Morris 2007-04-26 20:59 ` Stephen Berman 2007-04-27 5:58 ` Jan Djärv 2009-03-16 1:37 ` YAMAMOTO Mitsuharu 2009-03-16 12:16 ` David Reitter 2009-03-16 15:18 ` Chong Yidong 2009-03-17 2:43 ` YAMAMOTO Mitsuharu 2009-03-17 3:59 ` Chong Yidong 2009-03-17 4:13 ` YAMAMOTO Mitsuharu 2009-03-17 9:06 ` YAMAMOTO Mitsuharu 2009-03-17 15:13 ` Chong Yidong 2009-03-18 8:56 ` YAMAMOTO Mitsuharu
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).