diff --git a/Base/home/anon/WindowManager.ini b/Base/home/anon/WindowManager.ini index 3d9bc70bb1..320767ba04 100644 --- a/Base/home/anon/WindowManager.ini +++ b/Base/home/anon/WindowManager.ini @@ -12,6 +12,7 @@ IBeam=/res/cursors/i-beam.png Disallowed=/res/cursors/disallowed.png Move=/res/cursors/move.png Hand=/res/cursors/hand.png +Drag=/res/cursors/drag.png [Colors] Background=50,50,50 diff --git a/Base/res/cursors/drag.png b/Base/res/cursors/drag.png new file mode 100644 index 0000000000..b89032b473 Binary files /dev/null and b/Base/res/cursors/drag.png differ diff --git a/Servers/WindowServer/WSCursor.cpp b/Servers/WindowServer/WSCursor.cpp index 54b0f327d4..ab7739b0bf 100644 --- a/Servers/WindowServer/WSCursor.cpp +++ b/Servers/WindowServer/WSCursor.cpp @@ -40,6 +40,8 @@ RefPtr WSCursor::create(WSStandardCursor standard_cursor) return WSWindowManager::the().resize_diagonally_bltr_cursor(); case WSStandardCursor::Hand: return WSWindowManager::the().hand_cursor(); + case WSStandardCursor::Drag: + return WSWindowManager::the().drag_cursor(); } ASSERT_NOT_REACHED(); } diff --git a/Servers/WindowServer/WSCursor.h b/Servers/WindowServer/WSCursor.h index 1c0ebcbb9d..3dae5b741e 100644 --- a/Servers/WindowServer/WSCursor.h +++ b/Servers/WindowServer/WSCursor.h @@ -11,6 +11,7 @@ enum class WSStandardCursor { ResizeDiagonalTLBR, ResizeDiagonalBLTR, Hand, + Drag, }; class WSCursor : public RefCounted { diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index e6b2a86449..825b89f247 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -185,6 +185,7 @@ void WSWindowManager::reload_config(bool set_screen) m_i_beam_cursor = get_cursor("IBeam"); m_disallowed_cursor = get_cursor("Disallowed"); m_move_cursor = get_cursor("Move"); + m_drag_cursor = get_cursor("Drag"); m_background_color = m_wm_config->read_color_entry("Colors", "Background", Color::Red); @@ -1103,6 +1104,9 @@ void WSWindowManager::notify_client_changed_app_menubar(WSClientConnection& clie const WSCursor& WSWindowManager::active_cursor() const { + if (m_dnd_client) + return *m_drag_cursor; + if (m_drag_window) return *m_move_cursor; diff --git a/Servers/WindowServer/WSWindowManager.h b/Servers/WindowServer/WSWindowManager.h index eba7e8a44b..61e55b09f4 100644 --- a/Servers/WindowServer/WSWindowManager.h +++ b/Servers/WindowServer/WSWindowManager.h @@ -103,6 +103,7 @@ public: const WSCursor& i_beam_cursor() const { return *m_i_beam_cursor; } const WSCursor& disallowed_cursor() const { return *m_disallowed_cursor; } const WSCursor& move_cursor() const { return *m_move_cursor; } + const WSCursor& drag_cursor() const { return *m_drag_cursor; } void invalidate(const WSWindow&); void invalidate(const WSWindow&, const Rect&); @@ -196,6 +197,7 @@ private: RefPtr m_i_beam_cursor; RefPtr m_disallowed_cursor; RefPtr m_move_cursor; + RefPtr m_drag_cursor; Color m_background_color; Color m_active_window_border_color;