Bug 179397 - x11-servers/xorg-server: I used mouse focus in open-motif and shift-click3 to iconify xterms, doing so causes cursor to disappear and mouse is unusable!
Summary: x11-servers/xorg-server: I used mouse focus in open-motif and shift-click3 to...
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-x11 (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-06-07 11:40 UTC by web
Modified: 2013-06-26 21:10 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description web 2013-06-07 11:40:00 UTC
I have just wiped all my ports on a 9.1-STABLE system which was
built about a month ago.  My previous ports were all built around
May 23rd.  Due to some odd problems (FF21 crashed, libreoffice would
not start, etc.) I decided to rebuild all my ports.
  
Today I have built enough ports to be able to run Xorg and open-motif.
About 260 ports are built without error.  I launch a number of xterm
windows in which I work with mouse and keyboard.  Once I reach this
minimum level of ports building, I can transition from virtual TTYs
to xterm windows as I build out the rest of my ports (target number
is between 800 and 900).
  
I was shocked and stunned when I began to move my mouse and arrange
my xterm windows, some iconified and some not, that my mouse cursor
disappeared!  Also, my three mouse buttons did not work.  The keyboard
continued to work, so I suspect some change in the xf86-input-mouse
port from 1.7.1_1 to 1.19.0 has occurred.  I was happily using 1.7.1_1
as recently as yesterday (before this upgrade effort) where my mouse
worked flawlessly.  BTW, the mouse works just fine in the virtual TTYs
where I am now composing this message.
  
I can provide more detail if needed, but at present I cannot use my system
with the X Window System (Xorg and friends) at all.  This limits me to using
only command line (non-graphical) commands and applications which is limiting.

After I wiped all my ports (including removing the "work" dirctories), I ran:
  
   # cd /usr/ports
   # svn update /usr/ports
  
I am aware of a recent entry in /usr/ports/UPDATING about changes to the
Xorg family of ports, but for normal (standard) use, it said I should not
expect any problems.  This is clearly not the case!  In building Xorg
today, I ran these commands:

   # cd /usr/ports/x11/xorg
   # make install

In the past, for the past six or seven years, this has always worked for
me.  I follow this with a build of x11-toolkits/open-motif which has not
changed version for some time.  Therefor, I do not think open-motif is at
fault today.  I use mouse focus within Mwm, so you can understand what I
mean when I say my system is not usable at present.  Please advise!  :-)

Fix: 

??
How-To-Repeat: using Xorg (xorg-7.7) and related ports, using open-motif-2.3.4 configure
mouse focus (or pointer focus) in Mwm, configure this line in .mwmrc:

   Shift   <Btn3Click>     window          f.minimize

launch the X Windows system and create/invoke a couple of xterm windows,
at this point the mouse should work, the pointer should be visible, etc.

move the mouse pointer into an open and visible xterm window, hold the
Shift key down on the keyboard, and click on the third mouse button

at this point the mouse cursor/pointer disappears, all three mouse
buttons are inactive and the only recourse is to exit the Xorg session
using the Ctrl-Alt-BS sequence
Comment 1 web 2013-06-10 16:51:35 UTC
According to FreeBSD-gnats-submit@FreeBSD.org on Fri, 06/07/13 at 06:40:
> Thank you very much for your problem report.
> It has the internal identification `www/179397'.
> The individual assigned to look at your
> report is: freebsd-www. 
> 
> You can access the state of your problem report at any time
> via this link:
> 
> http://www.freebsd.org/cgi/query-pr.cgi?pr=179397
> 
> >Category:       www
> >Responsible:    freebsd-www
> >Synopsis:       I used mouse focus in open-motif and shift-click3 to iconify xterms, doing so causes cursor to disappear and mouse is unusable!
> >Arrival-Date:   Fri Jun 07 10:40:00 UTC 2013

I may be one of the few people left who use x11-toolkits/open-motif on
the FreeBSD desktop, but be that as it may, there is a bug that needs
to be fixed in the /usr/ports/x11-servers/xorg-server/files/ directory.

In May 2013 this directory included this file:

  -rw-r--r--  1 root  wheel  3487 May  2 13:08 extra-dix_events.c

I upgraded my ports on a nearly identical system on May 23 and
again on June 5th of 2013:

unix% ll /usr/ports/x11-servers/xorg-server/files/
total 40
drwxr-xr-x  2 root  wheel  1024 Jun  5 11:20 .
drwxr-xr-x  4 root  wheel   512 Jun  5 12:06 ..
-rw-r--r--  1 root  wheel   402 Jun  5 11:20 extra-Xserver-hw-xfree86-os-support-bsd-sparc64_video.c
-rw-r--r--  1 root  wheel   350 Jun  5 11:20 extra-Xserver-os-xprintf.c
-rw-r--r--  1 root  wheel  5536 May 23 12:19 extra-arch-ia64
-rw-r--r--  1 root  wheel   438 May 23 12:19 extra-arch-powerpc
-rw-r--r--  1 root  wheel  2467 Jun  5 11:20 extra-clang
-rw-r--r--  1 root  wheel   799 May 23 12:19 extra-include_eventstr.h
-rw-r--r--  1 root  wheel   493 Jun  5 11:20 extra-new-arch-i386
-rw-r--r--  1 root  wheel   511 Jun  5 11:20 extra-old-arch-i386
-rw-r--r--  1 root  wheel   645 Jun  5 11:20 extra-os-utils.c
-rw-r--r--  1 root  wheel   320 Jun  5 11:20 extra-servermd.h
-rw-r--r--  1 root  wheel   384 May 23 12:19 patch-Xserver-hw-xfree86-common-xf86Config.c
-rw-r--r--  1 root  wheel   469 May 23 12:19 patch-Xserver-hw-xfree86-os-support-bsd-i386_video.c
-rw-r--r--  1 root  wheel   471 May 23 12:19 patch-xorgconf.cpp
-rw-r--r--  1 root  wheel   155 May 23 12:19 pkg-deinstall.in
-rw-r--r--  1 root  wheel   551 May 23 12:19 pkg-install.in

The lack of the extra-dix_events.c patch file caused using my three
button USB mouse with x11-toolkits/open-motif to fail.  Note: all ports
were rebuilt on Jun 5th after running "svn update /usr/ports" from within
/usr/ports.

Once the mouse failed, all I could do was CTRL-ALT-BS and revert to
virtual terminals - not a very good desktop substitute.

It turns out that the last patch segment of extra-dix_events.c was omitted
(along with the entire patch file itself):

   @@ -3632,7 +3583,8 @@ CheckPassiveGrabsOnWindow(
             {
                 FixUpEventFromWindow(device, xE, grab->window, None, TRUE);

   -             TryClientEvents(rClient(grab), device, xE, count, mask,
   +             TryClientEvents(rClient(grab), device, xE, count,
   +                                    GetEventFilter(device, xE),
                                        GetEventFilter(device, xE), grab);
             }

The lack of this last patch segment was the cause of my problems with mwm
(part of the x11-toolkits/open-motif port) but it did not impact other
window managers such as FVWM which may be why this patch was overlooked.

Regards,

web...

-- 
William Bulley                     Email: web@umich.edu

72 characters width template ----------------------------------------->|
Comment 2 Mark Linimon freebsd_committer freebsd_triage 2013-06-17 00:34:30 UTC
Responsible Changed
From-To: freebsd-www->freebsd-x11

recategorize and reassign.
Comment 3 dfilter service freebsd_committer freebsd_triage 2013-06-26 21:00:47 UTC
Author: zeising
Date: Wed Jun 26 20:00:39 2013
New Revision: 321811
URL: http://svnweb.freebsd.org/changeset/ports/321811

Log:
  Readd the dix_events.c patch that was removed with the xorg update.
  There have been some reports of problems with pointer focus and other
  related issues in Mwm and open-motif without this patch.
  Bump portrevision for old xorg.
  
  PR:		ports/179397
  Submitted by:	William Bulley <web@umich.edu>

Added:
  head/x11-servers/xorg-server/files/extra-dix_events.c
     - copied unchanged from r319054, head/x11-servers/xorg-server/files/extra-dix_events.c
Modified:
  head/x11-servers/xorg-server/Makefile

Modified: head/x11-servers/xorg-server/Makefile
==============================================================================
--- head/x11-servers/xorg-server/Makefile	Wed Jun 26 19:25:10 2013	(r321810)
+++ head/x11-servers/xorg-server/Makefile	Wed Jun 26 20:00:39 2013	(r321811)
@@ -27,14 +27,15 @@ PLIST_SUB+=	OLD="@comment " NEW=""
 EXTRA_PATCHES+=	${FILESDIR}/extra-clang
 .else
 XORG_VERSION=	1.7.7
-XORG_REVISION=	7
+XORG_REVISION=	8
 PLIST_SUB+=	OLD="" NEW="@comment "
 EXTRA_PATCHES+=	${FILESDIR}/extra-Xext-xace.c \
 		${FILESDIR}/extra-Xserver-hw-xfree86-os-support-bsd-sparc64_video.c \
 		${FILESDIR}/extra-Xserver-os-xprintf.c \
 		${FILESDIR}/extra-include_eventstr.h \
 		${FILESDIR}/extra-os-utils.c \
-		${FILESDIR}/extra-servermd.h
+		${FILESDIR}/extra-servermd.h \
+		${FILESDIR}/extra-dix_events.c
 .endif
 
 USE_BZIP2=	yes

Copied: head/x11-servers/xorg-server/files/extra-dix_events.c (from r319054, head/x11-servers/xorg-server/files/extra-dix_events.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-servers/xorg-server/files/extra-dix_events.c	Wed Jun 26 20:00:39 2013	(r321811, copy of r319054, head/x11-servers/xorg-server/files/extra-dix_events.c)
@@ -0,0 +1,89 @@
+--- dix/events.c.orig	2010-05-04 02:47:57.000000000 +0200
++++ dix/events.c	2012-04-24 12:59:22.000000000 +0200
+@@ -3440,7 +3440,6 @@ CheckPassiveGrabsOnWindow(
+     {
+ 	DeviceIntPtr	gdev;
+ 	XkbSrvInfoPtr	xkbi = NULL;
+-	Mask		mask = 0;
+ 
+ 	gdev= grab->modifierDevice;
+         if (grab->grabtype == GRABTYPE_CORE)
+@@ -3555,9 +3554,6 @@ CheckPassiveGrabsOnWindow(
+                 }
+                 xE = &core;
+                 count = 1;
+-                mask = grab->eventMask;
+-                if (grab->ownerEvents)
+-                    mask |= pWin->eventMask;
+             } else if (match & XI2_MATCH)
+             {
+                 rc = EventToXI2((InternalEvent*)event, &xE);
+@@ -3569,34 +3565,6 @@ CheckPassiveGrabsOnWindow(
+                     continue;
+                 }
+                 count = 1;
+-
+-                /* FIXME: EventToXI2 returns NULL for enter events, so
+-                 * dereferencing the event is bad. Internal event types are
+-                 * aligned with core events, so the else clause is valid.
+-                 * long-term we should use internal events for enter/focus
+-                 * as well */
+-                if (xE)
+-                    mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8];
+-                else if (event->type == XI_Enter || event->type == XI_FocusIn)
+-                    mask = grab->xi2mask[device->id][event->type/8];
+-
+-                if (grab->ownerEvents && wOtherInputMasks(grab->window))
+-                {
+-                    InputClientsPtr icp =
+-                        wOtherInputMasks(grab->window)->inputClients;
+-
+-                    while(icp)
+-                    {
+-                        if (rClient(icp) == rClient(grab))
+-                        {
+-                            int evtype = (xE) ? ((xGenericEvent*)xE)->evtype : event->type;
+-                            mask |= icp->xi2mask[device->id][evtype/8];
+-                            break;
+-                        }
+-
+-                        icp = icp->next;
+-                    }
+-                }
+             } else
+             {
+                 rc = EventToXI((InternalEvent*)event, &xE, &count);
+@@ -3607,23 +3575,6 @@ CheckPassiveGrabsOnWindow(
+                                 "(%d, %d).\n", device->name, event->type, rc);
+                     continue;
+                 }
+-                mask = grab->eventMask;
+-                if (grab->ownerEvents && wOtherInputMasks(grab->window))
+-                {
+-                    InputClientsPtr icp =
+-                        wOtherInputMasks(grab->window)->inputClients;
+-
+-                    while(icp)
+-                    {
+-                        if (rClient(icp) == rClient(grab))
+-                        {
+-                            mask |= icp->mask[device->id];
+-                            break;
+-                        }
+-
+-                        icp = icp->next;
+-                    }
+-                }
+             }
+ 
+ 	    (*grabinfo->ActivateGrab)(device, grab, currentTime, TRUE);
+@@ -3632,7 +3583,8 @@ CheckPassiveGrabsOnWindow(
+             {
+                 FixUpEventFromWindow(device, xE, grab->window, None, TRUE);
+ 
+-                TryClientEvents(rClient(grab), device, xE, count, mask,
++                TryClientEvents(rClient(grab), device, xE, count,
++                                       GetEventFilter(device, xE),
+                                        GetEventFilter(device, xE), grab);
+             }
+ 
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 4 Niclas Zeising freebsd_committer freebsd_triage 2013-06-26 21:01:35 UTC
State Changed
From-To: open->closed

I readded the patch, thanks for the report!