> Looks like FvwmButtons is ignoring more LeaveNotify events than it
> should.
>

I don't know if this is how it should be fixed, but looking for an
existing subwindow of the XCrossingEvent seems to work well enough.

Se the attached patch.


/Simon Griph
Index: modules/ChangeLog
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/ChangeLog,v
retrieving revision 1.1261
diff -u -r1.1261 ChangeLog
--- modules/ChangeLog   22 Jul 2007 17:54:54 -0000      1.1261
+++ modules/ChangeLog   22 Jul 2007 20:44:03 -0000
@@ -1,5 +1,12 @@
 2007-07-22  Simon Griph  <simon(at)griph(dot)se>
 
+       * FvwmButtons/FvwmButtons.c (Loop):
+       (reallyLeaveWindow):
+       don't ignore LeaveNotify when the pointer moves
+       from a swallowed window to an overlaping window.
+
+2007-07-22  Simon Griph  <simon(at)griph(dot)se>
+
        * FvwmButtons/FvwmButtons.c (handle_new_position):
        make container specific ActiveColorset work without
        ActiveIcon/ActiveTitle.
Index: modules/FvwmButtons/FvwmButtons.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/FvwmButtons/FvwmButtons.c,v
retrieving revision 1.206
diff -u -r1.206 FvwmButtons.c
--- modules/FvwmButtons/FvwmButtons.c   22 Jul 2007 17:54:54 -0000      1.206
+++ modules/FvwmButtons/FvwmButtons.c   22 Jul 2007 20:44:05 -0000
@@ -879,30 +879,6 @@
        return 0;
 }
 
-/* We get LeaveNotify events when the mouse enters a swallowed window of
-   FvwmButtons, but we're not interested in these situations. */
-static Bool reallyLeaveWindow(
-       const int x, const int y, const Window win, const button_info *b)
-{
-       if (x < 0 || x >= Width || y < 0 || y >= Height)
-       {
-               return True;
-       }
-
-       if (b == NULL)
-       {
-               b = select_button(UberButton, x, y);
-       }
-
-       /* TODO: fix situation when mouse enters window overlapping
-          with a b_Swallow button. */
-       if (b->flags.b_Swallow)
-       {
-               return False;
-       }
-       return True;
-}
-
 static button_info *handle_new_position(
        button_info *b, int pos_x, int pos_y)
 {
@@ -1260,9 +1236,19 @@
                break;
 
        case LeaveNotify:
-       {
-               if (reallyLeaveWindow(Event.xcrossing.x, Event.xcrossing.y,
-                       Event.xcrossing.window, NULL))
+               if (
+                       Event.xcrossing.x < 0 || Event.xcrossing.x >= Width ||
+                       Event.xcrossing.y < 0 || Event.xcrossing.y >= Height ||
+
+                       /* We get LeaveNotify events when the mouse enters
+                          a swallowed window of FvwmButtons, but we're not
+                          interested in these situations. */
+                       !select_button(UberButton, x, y)->flags.b_Swallow ||
+
+                       /* But we're interested in those situations when
+                          the mouse enters a window which overlaps with
+                          the swallowed window. */
+                       Event.xcrossing.subwindow != NULL)
                {
                        if (ActiveButton)
                        {
@@ -1276,7 +1262,7 @@
                        }
                }
                break;
-       }
+
       case KeyPress:
        XLookupString(&Event.xkey, buffer, 10, &keysym, 0);
        if (

Reply via email to