Nasty user mouse/keyboard move & resizing bugs from pointer warping
- From: Elijah Newren <newren gmail com>
- To: metacity-devel-list gnome org
- Subject: Nasty user mouse/keyboard move & resizing bugs from pointer warping
- Date: Mon, 24 Oct 2005 15:20:12 -0600
Hi,
I've been looking at the following bugs:
bug 124582 - (Mouse/keyboard) snap resizing erroneously snaps wrong
directions too
bug 122670 - Jerky/random resizing of windows via keyboard
bug 154706 - bouncing weirdness at screen edge with keyboard move or
resize
All three of them are caused by warping the pointer (well, plus some
other mouse-related stuff that could easily be fixed up), and although
154706 can be fixed and the other two made far less severe (i.e. so
that they are only annoying problems instead of
nearly-make-it-unusable problems) within the current framework, they
can't be fully fixed without doing something different.
The problem is that warping the pointer causes various events,
MotionNotify in particular. We update moves and resizes in response
to these "mouse movements" (despite being fabricated) and it breaks
stuff. Although we can fix up the display->grab_* vars quite a bit so
that most MotionNotify events won't cause weirdness, we will
eventually get a MotionNotify event corresponding to some by-then
ancient pointer warp when several other resizes have already occurred.
We have four options, as far as I can tell:
(1) Decide that the approximate fix-ups are good enough (check out
the constraints_experiments branch if you want to play around with
it, but be warned that there are other important regressions and
bugs in that branch).
(2) Stop warping the pointer (possibly hide it and show a fake
pointer instead)
(3) Find a way to warp the pointer in a way that doesn't generate
mouse events (i.e. not with XWarpPointer() as we currently do)
(4) Make keyboard and mouse moving/resizing orthogonal--after the
user move/resize operation has started (e.g. due to pressing
Alt+F7 or Alt+F8), allow either keyboard or mouse events to
trigger updates, but as soon as one kind of event has happened
ignore all events of the other kind (except maybe stuff to end
the grab_op, such as hitting the Escape key or clicking).
Thoughts, opinions, ideas?
Cheers,
Elijah
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]