Adds show cursor on mouse move + hide after 200ms.

This commit is contained in:
Johns 2012-04-14 21:58:14 +02:00
parent 5b765f02bd
commit 2ffcb874bb
2 changed files with 20 additions and 1 deletions

View File

@ -1,6 +1,7 @@
User johns
Date:
Adds show cursor on pointer move and hide after 200ms.
Adds Hot-key support for auto-crop enable/disable/toggle.
Adds detached start mode.
Fix bug: VDPAU looses preemption callback.

20
video.c
View File

@ -284,6 +284,7 @@ static Display *XlibDisplay; ///< Xlib X11 display
static xcb_connection_t *Connection; ///< xcb connection
static xcb_colormap_t VideoColormap; ///< video colormap
static xcb_window_t VideoWindow; ///< video window
static uint32_t VideoBlankTick; ///< blank cursor timer
static xcb_cursor_t VideoBlankCursor; ///< empty invisible cursor
static int VideoWindowX; ///< video output window x coordinate
@ -8692,6 +8693,7 @@ static void VideoEvent(void)
XEvent event;
KeySym keysym;
char buf[32];
uint32_t values[1];
XNextEvent(XlibDisplay, &event);
switch (event.type) {
@ -8708,6 +8710,7 @@ static void VideoEvent(void)
// µwm workaround
xcb_change_window_attributes(Connection, VideoWindow,
XCB_CW_CURSOR, &VideoBlankCursor);
VideoBlankTick = 0;
break;
case Expose:
//Debug(3, "video/event: Expose\n");
@ -8734,6 +8737,12 @@ static void VideoEvent(void)
break;
case KeyRelease:
break;
case MotionNotify:
values[0] = XCB_NONE;
xcb_change_window_attributes(Connection, VideoWindow,
XCB_CW_CURSOR, values);
VideoBlankTick = GetMsTicks();
break;
default:
#if 0
if (XShmGetEventBase(XlibDisplay) + ShmCompletion == event.type) {
@ -8750,6 +8759,13 @@ static void VideoEvent(void)
///
void VideoPollEvent(void)
{
// hide cursor, after xx ms
if (VideoBlankTick && VideoWindow != XCB_NONE
&& VideoBlankTick + 200 < GetMsTicks()) {
xcb_change_window_attributes(Connection, VideoWindow, XCB_CW_CURSOR,
&VideoBlankCursor);
VideoBlankTick = 0;
}
while (XlibDisplay && XPending(XlibDisplay)) {
VideoEvent();
}
@ -9400,7 +9416,8 @@ static void VideoCreateWindow(xcb_window_t parent, xcb_visualid_t visual,
values[2] =
XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE |
XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_STRUCTURE_NOTIFY;
XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE |
XCB_EVENT_MASK_STRUCTURE_NOTIFY;
values[3] = VideoColormap;
VideoWindow = xcb_generate_id(Connection);
xcb_create_window(Connection, depth, VideoWindow, parent, VideoWindowX,
@ -9482,6 +9499,7 @@ static void VideoCreateWindow(xcb_window_t parent, xcb_visualid_t visual,
xcb_change_window_attributes(Connection, VideoWindow, XCB_CW_CURSOR,
values);
VideoBlankCursor = cursor;
VideoBlankTick = 0;
// FIXME: free cursor/pixmap needed?
}