aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commands.c10
-rw-r--r--window.c11
-rw-r--r--window.h1
3 files changed, 16 insertions, 6 deletions
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 */