if(!win->player || win->player->window == 0) return;
- WindowPlayerWidgetEvent(win, event);
+ WindowHandlePlayerEvent(win, event);
if(pass) {
// redirect key events to the player window
}
}
-void WindowPlayerWidgetEvent(MainWindow *win, XEvent *event) {
+#define IGNORE_MOTION_THRESHOLD_MS 1000
+#define MOTION_POS_THRESHOLD_PIX 5
+
+void WindowHandlePlayerEvent(MainWindow *win, XEvent *event) {
+ // event handler for intercepted player mouse events
+ // win->player is not NULL
+
int etype = event->type;
if(etype == MotionNotify) {
-
+ Time cur_motion_time = event->xmotion.time;
+ int x = event->xmotion.x;
+ int y = event->xmotion.y;
+ if(win->cursorhidden && cur_motion_time - win->player_event_time < IGNORE_MOTION_THRESHOLD_MS) {
+ int diff_x = abs(x - win->mouse_x_orig);
+ int diff_y = abs(y - win->mouse_y_orig);
+ if(diff_x > MOTION_POS_THRESHOLD_PIX || diff_y > MOTION_POS_THRESHOLD_PIX) {
+ WindowShowPlayerCursor(win);
+ }
+ } else {
+ win->mouse_x_orig = x;
+ win->mouse_y_orig = y;
+ }
+ win->player_event_time = cur_motion_time;
+ win->motion_playback_time = win->player->playback_time;
} else if(etype == ButtonPress) {
-
+ win->player_event_time = event->xbutton.time;
} else if(etype == ButtonRelease) {
-
+ win->player_event_time = event->xbutton.time;
}
}
PlayerDestroy(win->player);
}
win->player = NULL;
+ WindowShowPlayerCursor(win);
}
void WindowHidePlayerCursor(MainWindow *win) {
if(!win->cursorhidden && win->player && win->player->window != 0) {
- //XDefineCursor(XtDisplay(win->player_widget), XtWindow(win->player_widget), blank_cursor);
+ XDefineCursor(XtDisplay(win->player_widget), XtWindow(win->player_widget), blank_cursor);
win->cursorhidden = True;
XFlush(XtDisplay(win->player_widget));
}