An attempt at fixing a bug involving DGA and mouse buttons

Peter Hutterer peter.hutterer at who-t.net
Mon Jan 7 18:01:15 PST 2013


On Tue, Jan 08, 2013 at 12:18:16AM +0200, Ville Syrjälä wrote:
> On Sat, Aug 25, 2012 at 04:47:42PM -0500, Steven Elliott wrote:
> > On Fri, 2012-08-24 at 12:29 +1000, Peter Hutterer wrote:
> > > we can't drop this block, it is central to button handling with multiple
> > > devices. right now, if you hold a button on the mouse and the touchpad, the
> > > logical button will only be released once _both_ buttons are up. this is
> > > behaviour we had since 1.7 (at least), I don't really want to change it.
> > > 
> > > A better fix is what Ville suggested, that sounds like the right thing to
> > > do.
> > 
> > The attached patch does that.  It no longer removes the block of code in
> > question.  It moves only the 
> >     if (!IsMaster(keybd))
> >        return;
> > from inside DGAHandleEvent() to inside DGAProcessKeyboardEvent() and
> > DGAProcessPointerEvent() after the call to UpdateDeviceState() in those
> > functions like Ville suggested.  
> > 
> > I've attached an updated patch which fixes the problem for me.  This
> > time I generated the patch with the latest from git with
> > git-format-patch in the interest of following the patch submission
> > guidelines a bit more than I did last time.
> 
> Hmm. What happened to this patch? Looks like it never got applied to
> master.

heh, good timing. I just picked this up yesterday again and started 
fixing it. Patches here:
http://patchwork.freedesktop.org/patch/12794/
http://patchwork.freedesktop.org/patch/12795/

Bug is now filed as https://bugs.freedesktop.org/show_bug.cgi?id=59100 btw.

Cheers,
   Peter

> 
> > 
> > -- 
> > ------------------------------------------------------------------------
> > |  Steven Elliott  |  http://selliott.org  |  selliott4 at austin.rr.com  |
> > ------------------------------------------------------------------------
> 
> > From a31fb95821d0308dd6882eb67429d39e851e29b4 Mon Sep 17 00:00:00 2001
> > From: Steven Elliott <selliott4 at austin.rr.com>
> > Date: Sat, 25 Aug 2012 15:44:33 -0500
> > Subject: [PATCH] Fixes a problem where mouse buttons get stuck
> >  down when DGA is engaged (has a handler).
> > 
> > ---
> >  hw/xfree86/common/xf86DGA.c |   10 +++++++---
> >  1 files changed, 7 insertions(+), 3 deletions(-)
> > 
> > diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
> > index a441dee..1af8d2e 100644
> > --- a/hw/xfree86/common/xf86DGA.c
> > +++ b/hw/xfree86/common/xf86DGA.c
> > @@ -1033,6 +1033,9 @@ DGAProcessKeyboardEvent(ScreenPtr pScreen, DGAEvent * event, DeviceIntPtr keybd)
> >  
> >      UpdateDeviceState(keybd, &ev);
> >  
> > +    if (!IsMaster(keybd))
> > +	return;
> > +
> >      /*
> >       * Deliver the DGA event
> >       */
> > @@ -1074,6 +1077,7 @@ DGAProcessPointerEvent(ScreenPtr pScreen, DGAEvent * event, DeviceIntPtr mouse)
> >      DeviceEvent ev = {
> >          .header = ET_Internal,
> >          .length = sizeof(ev),
> > +        .detail.key = event->detail,
> >          .type = event->subtype,
> >          .corestate = butc ? butc->state : 0
> >      };
> > @@ -1083,6 +1087,9 @@ DGAProcessPointerEvent(ScreenPtr pScreen, DGAEvent * event, DeviceIntPtr mouse)
> >  
> >      UpdateDeviceState(mouse, &ev);
> >  
> > +    if (!IsMaster(mouse))
> > +	return;
> > +
> >      /*
> >       * Deliver the DGA event
> >       */
> > @@ -1190,9 +1197,6 @@ DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
> >      if (!pScreenPriv)
> >          return;
> >  
> > -    if (!IsMaster(device))
> > -        return;
> > -
> >      switch (event->subtype) {
> >      case KeyPress:
> >      case KeyRelease:
> > -- 
> > 1.7.7.6
> > 
> 
> > _______________________________________________
> > xorg-devel at lists.x.org: X.Org development
> > Archives: http://lists.x.org/archives/xorg-devel
> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 
> 
> -- 
> Ville Syrjälä
> syrjala at sci.fi
> http://www.sci.fi/~syrjala/


More information about the xorg-devel mailing list