//
// Copyright © Jon TURNEY 2012
//
// This file is part of XtoW.
//
// XtoW is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// XtoW is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with XtoW. If not, see .
//
#include
#include
#include
#include "global.h"
#include "debug.h"
#include "wincursor.h"
// we keep a handle to the current cursor around, so we can set it again on WM_SETCURSOR
static HCURSOR hCursor;
void InitCursor(void)
{
UpdateCursor();
}
void
UpdateCursor(void)
{
xcb_xfixes_get_cursor_image_cookie_t cookie = xcb_xfixes_get_cursor_image(xcwm_context_get_connection(context));
xcb_xfixes_get_cursor_image_reply_t* reply = xcb_xfixes_get_cursor_image_reply(xcwm_context_get_connection(context), cookie, NULL);
DEBUG("Got cursor image, serial %d\n", reply->cursor_serial);
WMUTIL_CURSOR cursor;
memset(&cursor, 0, sizeof(cursor));
cursor.width = reply->width;
cursor.height = reply->height;
cursor.xhot = reply->xhot;
cursor.yhot = reply->yhot;
cursor.argb = xcb_xfixes_get_cursor_image_cursor_image(reply);
hCursor = winXCursorToHCURSOR(&cursor);
// XXX: We should only change the cursor if the cursor is within one of our windows...
// it's hard to notice this as a problem, as windows don't normally try to change the cursor except in response to something being clicked...
HCURSOR hPreviousCursor = SetCursor(hCursor);
DEBUG("cursor 0x%08x, previous cursor 0x%08x\n", hCursor, hPreviousCursor);
DestroyCursor(hPreviousCursor);
free(reply);
}
HCURSOR winGetCursor(void)
{
return hCursor;
}