From a2080bef8a6de50deaa63e2b9eb53a8cc6308d7a Mon Sep 17 00:00:00 2001 From: Joakim Verona Date: Fri, 10 Sep 2010 12:22:44 +0200 Subject: verified hypothesis that the stuck-xiwdgets-when-scrolling happens due to emacs redisplay optimizations. inhibit optimization completely for now, until some better solution is found. --- src/xdisp.c | 5 +++++ src/xterm.c | 2 +- src/xwidget.c | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/xdisp.c b/src/xdisp.c index 7274c129d2c..6fed6287496 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -14691,6 +14691,11 @@ try_window_reusing_current_matrix (struct window *w) struct glyph_row *start_row; int start_vpos, min_y, max_y; + return 0; + //xwidgets doesnt like blit scrolling and stuff, try this for now + //should be optimized, perhaps by just inhibiting optimizations of windows containing xwidgets. + + #if GLYPH_DEBUG if (inhibit_try_window_reusing) return 0; diff --git a/src/xterm.c b/src/xterm.c index 4790b75f923..41d7ffd73fc 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -10384,7 +10384,7 @@ static struct redisplay_interface x_redisplay_interface = x_write_glyphs, x_insert_glyphs, x_clear_end_of_line, - x_scroll_run, + x_scroll_run, //maybe xwidgets dont work too well with scrolling by blitting x_after_update_window_line, x_update_window_begin, x_update_window_end, diff --git a/src/xwidget.c b/src/xwidget.c index 78e2e718c0b..ac00ebeff7b 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -354,10 +354,15 @@ x_draw_xwidget_glyph_string (struct glyph_string *s) BUG it seems this method for some reason is called with bad s->x and s->y sometimes. When this happens the xwidget doesnt move on screen as it should. + This maybe might perhaps be because of x_scroll_run. Maybe emacs decide to scroll the screen by blitting sometime, + for reasons unknown. then maybe emacs doesnt try to actualy call the paint routines, which means this here code will never + run so the xwidget wont know it has been moved. hmm. + BUG the phantoming code doesnt work very well when the live xwidget is off screen. you will get weirdo display artefacts. Composition ought to solve this, since that means the live window is always available in an off-screen buffer. My current attempt at composition doesnt work properly however. + */ int box_line_hwidth = eabs (s->face->box_line_width); -- cgit v1.2.1