+static Boolean get_player_window(XtPointer data) {
+ Player *p = data;
+ MainWindow *win = GetMainWindow();
+
+ Widget player_wid = win->player_widget;
+ Window root, parent;
+ Window *child;
+ unsigned int nchild;
+ XQueryTree(XtDisplay(player_wid), XtWindow(player_wid), &root, &parent, &child, &nchild);
+ if(nchild > 0) {
+ p->window = child[0];
+ XFree(child);
+
+ SetPlayerWindow(p->window);
+ XSelectInput(XtDisplay(win->player_widget), p->window, PointerMotionMask);
+ }
+
+ return 0;
+}
+
+#define CURSOR_AUTOHIDE_THRESHOLD_SEC 4
+
+static Boolean hide_cursor(XtPointer data) {
+ MainWindow *win = data;
+ WindowHidePlayerCursor(win);
+ return 0;
+}
+
+static void check_hide_cursor(Player *p) {
+ MainWindow *win = GetMainWindow();
+ if(win->cursorhidden) return;
+
+ if(p->playback_time - win->motion_playback_time > CURSOR_AUTOHIDE_THRESHOLD_SEC) {
+ AppExecProc(hide_cursor, win);
+ }
+}
+