hrev45199 adds 1 changeset to branch 'master' old head: 65b9235d19ff2d85e3a7a20c0661e8813d9a7da0 new head: 5a0b5a5d521e8d4b3e106f98198d0c27132a9ddc overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=5a0b5a5+%5E65b9235 ---------------------------------------------------------------------------- 5a0b5a5: Update the mouse cursor in a couple more cases [ John Scipione <jscipione@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev45199 Commit: 5a0b5a5d521e8d4b3e106f98198d0c27132a9ddc URL: http://cgit.haiku-os.org/haiku/commit/?id=5a0b5a5 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jan 25 06:02:35 2013 UTC ---------------------------------------------------------------------------- 1 file changed, 51 insertions(+), 8 deletions(-) .../app/decorator/DefaultWindowBehaviour.cpp | 59 +++++++++++++++++--- ---------------------------------------------------------------------------- diff --git a/src/servers/app/decorator/DefaultWindowBehaviour.cpp b/src/servers/app/decorator/DefaultWindowBehaviour.cpp index b1f13f5..7166aff 100644 --- a/src/servers/app/decorator/DefaultWindowBehaviour.cpp +++ b/src/servers/app/decorator/DefaultWindowBehaviour.cpp @@ -265,21 +265,37 @@ struct DefaultWindowBehaviour::DragState : MouseTrackingState { virtual void MouseUp(BMessage* message, BPoint where) { - if (fBehavior._IsWindowModifier(message->FindInt32("modifiers"))) { + int32 modifiers = message->FindInt32("modifiers"); + + if (fBehavior._IsWindowModifier(modifiers)) { // If the window modifiers are held return to the window // management state. fBehavior._NextState(new(std::nothrow) ManageWindowState( fBehavior, where)); - } else + } else { + if ((fWindow->Flags() & B_NOT_RESIZABLE) == 0 + && fBehavior._IsControlModifier(modifiers)) { + fBehavior._SetBorderResizeCursor(where); + } else + fBehavior._ResetCursor(); + fBehavior._NextState(NULL); + } } virtual void ModifiersChanged(BPoint where, int32 modifiers) { // Exit if user lifted window management modifiers fBehavior.fLastModifiers = modifiers; - if (!fBehavior._IsWindowModifier(modifiers)) + if (!fBehavior._IsWindowModifier(modifiers)) { + if ((fWindow->Flags() & B_NOT_RESIZABLE) == 0 + && fBehavior._IsControlModifier(modifiers)) { + fBehavior._SetBorderResizeCursor(where); + } else + fBehavior._ResetCursor(); + fBehavior._NextState(NULL); + } } virtual void MouseMovedAction(BPoint& delta, bigtime_t now) @@ -465,21 +481,36 @@ struct DefaultWindowBehaviour::ResizeBorderState : MouseTrackingState { virtual void MouseUp(BMessage* message, BPoint where) { - if (fBehavior._IsWindowModifier(message->FindInt32("modifiers"))) { + int32 modifiers = message->FindInt32("modifiers"); + if (fBehavior._IsWindowModifier(modifiers)) { // If the window modifiers are still held return to window // management state. fBehavior._NextState(new(std::nothrow) ManageWindowState( fBehavior, where, fHorizontal, fVertical)); - } else + } else { + if ((fWindow->Flags() & B_NOT_RESIZABLE) == 0 + && fBehavior._IsControlModifier(modifiers)) { + fBehavior._SetBorderResizeCursor(where); + } else + fBehavior._ResetCursor(); + fBehavior._NextState(NULL); + } } virtual void ModifiersChanged(BPoint where, int32 modifiers) { // Exit if user lifted window management modifiers fBehavior.fLastModifiers = modifiers; - if (!fBehavior._IsWindowModifier(modifiers)) + if (!fBehavior._IsWindowModifier(modifiers)) { + if ((fWindow->Flags() & B_NOT_RESIZABLE) == 0 + && fBehavior._IsControlModifier(modifiers)) { + fBehavior._SetBorderResizeCursor(where); + } else + fBehavior._ResetCursor(); + fBehavior._NextState(NULL); + } } virtual void MouseMovedAction(BPoint& delta, bigtime_t now) @@ -1006,11 +1037,12 @@ DefaultWindowBehaviour::MouseMoved(BMessage* message, BPoint where, if (fState != NULL) { fState->MouseMoved(message, where, isFake); } else { - if (_IsWindowModifier(message->FindInt32("modifiers"))) { + int32 modifiers = message->FindInt32("modifiers"); + if (_IsWindowModifier(modifiers)) { // Enter the window management state. _NextState(new(std::nothrow) ManageWindowState(*this, where)); } else if ((fWindow->Flags() & B_NOT_RESIZABLE) == 0 - && _IsControlModifier(message->FindInt32("modifiers"))) { + && _IsControlModifier(modifiers)) { _SetBorderResizeCursor(where); } else _ResetCursor(); @@ -1033,6 +1065,17 @@ DefaultWindowBehaviour::MouseUp(BMessage* message, BPoint where) { if (fState != NULL) fState->MouseUp(message, where); + else { + int32 modifiers = message->FindInt32("modifiers"); + if (_IsWindowModifier(modifiers)) { + // Enter the window management state. + _NextState(new(std::nothrow) ManageWindowState(*this, where)); + } else if ((fWindow->Flags() & B_NOT_RESIZABLE) == 0 + && _IsControlModifier(modifiers)) { + _SetBorderResizeCursor(where); + } else + _ResetCursor(); + } }