From 94a5c94b6e663d5df1feb9d200bd7bc53404fc9a Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Fri, 9 Jan 2026 08:29:16 +0100 Subject: [PATCH] CtrlCore: Attemt at fixing xwayland cursor --- uppsrc/CtrlCore/GtkWnd.cpp | 2 ++ upptst/CursorImage/CursorImage.upp | 9 +++++++++ upptst/CursorImage/main.cpp | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 upptst/CursorImage/CursorImage.upp create mode 100644 upptst/CursorImage/main.cpp diff --git a/uppsrc/CtrlCore/GtkWnd.cpp b/uppsrc/CtrlCore/GtkWnd.cpp index d54b68c44..d27606d60 100644 --- a/uppsrc/CtrlCore/GtkWnd.cpp +++ b/uppsrc/CtrlCore/GtkWnd.cpp @@ -109,6 +109,8 @@ void Ctrl::SetMouseCursor(const Image& image) #endif } if(c && topctrl->IsOpen()) { + static GdkCursor *blank_cursor = gdk_cursor_new_for_display(gdk_display_get_default(), GDK_BLANK_CURSOR); + gdk_window_set_cursor(topctrl->gdk(), blank_cursor); // should help in [x]wayland gdk_window_set_cursor(topctrl->gdk(), c); g_object_unref(c); if(IsXWayland()) // xwayland is broken, need some paint to change the cursor... diff --git a/upptst/CursorImage/CursorImage.upp b/upptst/CursorImage/CursorImage.upp new file mode 100644 index 000000000..5c4f53e15 --- /dev/null +++ b/upptst/CursorImage/CursorImage.upp @@ -0,0 +1,9 @@ +uses + CtrlLib; + +file + main.cpp; + +mainconfig + "" = "GUI"; + diff --git a/upptst/CursorImage/main.cpp b/upptst/CursorImage/main.cpp new file mode 100644 index 000000000..133f6ab1a --- /dev/null +++ b/upptst/CursorImage/main.cpp @@ -0,0 +1,21 @@ +#include + +using namespace Upp; + +struct MyApp : TopWindow { + void Paint(Draw& w) override { + w.DrawRect(GetSize(), White()); + } + + Image CursorImage(Point p, dword keyflags) override { + if(p.x < GetSize().cx / 2) + return Image::Hand(); + else + return CtrlImg::HelpCursor0(); + } +}; + +GUI_APP_MAIN +{ + MyApp().Run(); +}