Don't edge-warp with the cursor based on a monitor that does not contain the pointer...
[dana/openbox.git] / openbox / moveresize.c
index 2f68395..1625ccf 100644 (file)
@@ -21,6 +21,7 @@
 #include "framerender.h"
 #include "screen.h"
 #include "client.h"
+#include "focus.h"
 #include "frame.h"
 #include "openbox.h"
 #include "resist.h"
@@ -63,8 +64,8 @@ static ObDirection edge_warp_dir = -1;
 static gboolean edge_warp_odd = FALSE;
 static guint edge_warp_timer = 0;
 static ObDirection key_resize_edge = -1;
-#ifdef SYNC
 static guint waiting_for_sync;
+#ifdef SYNC
 static guint sync_timer = 0;
 #endif
 
@@ -262,6 +263,7 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr)
     cur_h = start_ch;
 
     moveresize_in_progress = TRUE;
+    waiting_for_sync = 0;
 
 #ifdef SYNC
     if (config_resize_redraw && !moving && obt_display_extension_sync &&
@@ -300,8 +302,6 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr)
                                             XSyncCADelta |
                                             XSyncCAEvents,
                                             &aa);
-
-        waiting_for_sync = 0;
     }
 #endif
 }
@@ -630,6 +630,10 @@ static void do_edge_warp(gint x, gint y)
 
     for (i = 0; i < screen_num_monitors; ++i) {
         const Rect *a = screen_physical_area_monitor(i);
+
+        if (!RECT_CONTAINS(*a, x, y))
+            continue;
+
         if (x == RECT_LEFT(*a)) dir = OB_DIRECTION_WEST;
         if (x == RECT_RIGHT(*a)) dir = OB_DIRECTION_EAST;
         if (y == RECT_TOP(*a)) dir = OB_DIRECTION_NORTH;
@@ -1084,5 +1088,9 @@ gboolean moveresize_event(XEvent *e)
         used = TRUE;
     }
 #endif
+
+    if (used && moveresize_client == focus_client)
+        event_update_user_time();
+
     return used;
 }