diff --git a/commands.c b/commands.c
index 2e1d66c..01e7878 100644
--- a/commands.c
+++ b/commands.c
@@ -322,19 +322,17 @@ bool ci_scroll_to_edge(arg_t dir)
 
 bool ci_drag(arg_t _)
 {
-	int i, x, y;
+	int x, y;
 	float px, py;
-	unsigned int ui;
 	XEvent e;
-	Window w;
 
-	if ((int)(img.w * img.zoom) < win.w && (int)(img.h * img.zoom) < win.h)
-		return false;
-	if (!XQueryPointer(win.env.dpy, win.xwin, &w, &w, &i, &i, &x, &y, &ui))
+	if ((int)(img.w * img.zoom) <= win.w && (int)(img.h * img.zoom) <= win.h)
 		return false;
 	
 	win_set_cursor(&win, CURSOR_DRAG);
 
+	win_cursor_pos(&win, &x, &y);
+
 	for (;;) {
 		px = MIN(MAX(0.0, x - win.w*0.1), win.w*0.8) / (win.w*0.8)
 		   * (win.w - img.w * img.zoom);
diff --git a/window.c b/window.c
index 72b94b2..be2c9fa 100644
--- a/window.c
+++ b/window.c
@@ -470,3 +470,14 @@ void win_set_cursor(win_t *win, cursor_t cursor)
 		XFlush(win->env.dpy);
 	}
 }
+
+void win_cursor_pos(win_t *win, int *x, int *y)
+{
+	int i;
+	unsigned int ui;
+	Window w;
+
+	if (!XQueryPointer(win->env.dpy, win->xwin, &w, &w, &i, &i, x, y, &ui))
+		*x = *y = 0;
+}
+
diff --git a/window.h b/window.h
index f5f9df0..1bf62ec 100644
--- a/window.h
+++ b/window.h
@@ -106,5 +106,6 @@ int win_textwidth(const win_env_t*, const char*, unsigned int, bool);
 
 void win_set_title(win_t*, const char*);
 void win_set_cursor(win_t*, cursor_t);
+void win_cursor_pos(win_t*, int*, int*);
 
 #endif /* WINDOW_H */