diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 9b1e3f03ed..82c2fc7915 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -9,6 +9,7 @@ * Andrej Spielmann * Brecht Machiels * Clemens Zeidler + * Ingo Weinhold */ @@ -605,14 +606,32 @@ Desktop::SetCursor(ServerCursor* newCursor) if (newCursor == NULL) newCursor = fCursorManager.GetCursor(B_CURSOR_ID_SYSTEM_DEFAULT); - HWInterface()->SetCursor(newCursor); + if (newCursor == fCursor) + return; + + fCursor = newCursor; + + if (fManagementCursor.Get() == NULL) + HWInterface()->SetCursor(newCursor); } ServerCursorReference Desktop::Cursor() const { - return HWInterface()->Cursor(); + return fCursor; +} + + +void +Desktop::SetManagementCursor(ServerCursor* newCursor) +{ + if (newCursor == fManagementCursor) + return; + + fManagementCursor = newCursor; + + HWInterface()->SetCursor(newCursor != NULL ? newCursor : fCursor.Get()); } diff --git a/src/servers/app/Desktop.h b/src/servers/app/Desktop.h index e6182b0f5f..077c60d0fe 100644 --- a/src/servers/app/Desktop.h +++ b/src/servers/app/Desktop.h @@ -91,6 +91,8 @@ public: void SetCursor(ServerCursor* cursor); ServerCursorReference Cursor() const; + void SetManagementCursor(ServerCursor* newCursor); + void SetLastMouseState(const BPoint& position, int32 buttons, Window* windowUnderMouse); // for use by the mouse filter only @@ -330,6 +332,8 @@ private: BLocker fWorkspacesLock; CursorManager fCursorManager; + ServerCursorReference fCursor; + ServerCursorReference fManagementCursor; MultiLocker fWindowLock;