emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Simplification to mouse-avoidance-mode (patch) + redisplay bug?


From: Jan Djärv
Subject: Re: Simplification to mouse-avoidance-mode (patch) + redisplay bug?
Date: Fri, 12 May 2006 09:07:46 +0200
User-agent: Thunderbird 1.5.0.2 (X11/20060501)





                                      It is actually undefined how
many MotionNotify you will get when moiving the mouse, but you are
guaranteed to get one MotionNotify when the mouse movement stops.

The problem is that the MotionNotify event that you get is not the
final mouse position.

Then there is abug somewhere. It could be in X but it could also be in Emacs event handling, i.e. we are not reading events even if they are in the X input queue.


A third thing to check is if the XWarpPointer requests are queued or
not.  You can add a call to XFlush after XWarpPointer and see if that
improves the situation.

It actually makes the situation worse -- now the final mouse shape
is wrong also when I type slowly, i.e. when I don't hit a key after
the mouse cursor starts moving.

I hope you added x_flush, not XFlush. I see now that XFlush is defined to be empty in xterm.c. If an XSync after WarpPointer doesn't get you all events then there is a bug in X.


I tried, but could not reproduce the situation where the cursor shape
is wrong.  I'm sure it is timing related, i.e. events not sent or
received when expected to.

So, it is probably a bug in the (old) version of Xfree that I'm using,
and it looks like the bug is fixed in later versions.

Are you running with SYNC_INPUT or not?



I tried to add an explicit call to note_mouse_highlight after the
call to XWarpPointer, and it definitely has a positive effect,
but even with that change, the pointer shape ends up wrong in
some cases.

I'm not sure how important it is to fix this, but there is a patch which works for me -- of course a similar change
is probably needed in x_set_mouse_pixel_position.


This patch has flaws, there may be several calls to XWarpPointer before we see any MotionNotify events.

        Jan D.

*** xterm.c     10 May 2006 16:58:38 +0200      1.910
--- xterm.c     11 May 2006 11:52:27 +0200      
***************
*** 226,231 ****
--- 226,233 ----
static unsigned long ignore_next_mouse_click_timeout; + static int ignore_next_motion_event; + /* Mouse movement. Formerly, we used PointerMotionHintMask (in standard_event_mask)
***************
*** 6543,6548 ****
--- 6545,6556 ----
case MotionNotify:
        {
+       if (ignore_next_motion_event)
+         {
+           ignore_next_motion_event = 0;
+           goto OTHER;
+         }
+ previous_help_echo_string = help_echo_string;
          help_echo_string = Qnil;
***************
*** 8453,8458 ****
--- 8461,8471 ----
XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f),
                0, 0, 0, 0, pix_x, pix_y);
+ + last_mouse_motion_event.x = pix_x;
+   last_mouse_motion_event.y = pix_y;
+   note_mouse_movement (f, &last_mouse_motion_event);
+   ignore_next_motion_event = 1;
    UNBLOCK_INPUT;
  }
***************
*** 10795,10800 ****
--- 10808,10814 ----
    last_tool_bar_item = -1;
    any_help_event_p = 0;
    ignore_next_mouse_click_timeout = 0;
+   ignore_next_motion_event = 0;
  #ifdef HAVE_X_SM
    x_session_initialized = 0;
  #endif

--
Kim F. Storm <address@hidden> http://www.cua.dk



_______________________________________________
Emacs-devel mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-devel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]