Browse code

Properly handle motion-notify-event (from lodatom).

When using POINTER_MOTION_HINT_MASK, only the first motion-notify-event
is fired, and then following events are suppressed until a button is
pressed or gtk.gtk.Window.get_pointer() is called. The previous version
did not call get_pointer(), so on some systems, the event only fired
once, and the effect was that panning and the mouse-over effect did not
work.

Fixes issue #24.

Jose.R.Fonseca authored on 30/09/2009 14:49:12
Showing 1 changed files

  • xdot.py index 4493ce5..4e0554a 100755
... ...
@@ -1264,11 +1264,15 @@ class DragAction(object):
1264 1264
         self.start()
1265 1265
 
1266 1266
     def on_motion_notify(self, event):
1267
-        deltax = self.prevmousex - event.x
1268
-        deltay = self.prevmousey - event.y
1267
+        if event.is_hint:
1268
+            x, y, state = event.window.get_pointer()
1269
+        else:
1270
+            x, y, state = event.x, event.y, event.state
1271
+        deltax = self.prevmousex - x
1272
+        deltay = self.prevmousey - y
1269 1273
         self.drag(deltax, deltay)
1270
-        self.prevmousex = event.x
1271
-        self.prevmousey = event.y
1274
+        self.prevmousex = x
1275
+        self.prevmousey = y
1272 1276
 
1273 1277
     def on_button_release(self, event):
1274 1278
         self.stopmousex = event.x
... ...
@@ -1294,10 +1298,14 @@ class DragAction(object):
1294 1298
 class NullAction(DragAction):
1295 1299
 
1296 1300
     def on_motion_notify(self, event):
1301
+        if event.is_hint:
1302
+            x, y, state = event.window.get_pointer()
1303
+        else:
1304
+            x, y, state = event.x, event.y, event.state
1297 1305
         dot_widget = self.dot_widget
1298
-        item = dot_widget.get_url(event.x, event.y)
1306
+        item = dot_widget.get_url(x, y)
1299 1307
         if item is None:
1300
-            item = dot_widget.get_jump(event.x, event.y)
1308
+            item = dot_widget.get_jump(x, y)
1301 1309
         if item is not None:
1302 1310
             dot_widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
1303 1311
             dot_widget.set_highlight(item.highlight)