MouseDown(): Also check whether the buttons pressed have changed since the
last click and reset the click count, if so. Fixes a regression introduced in r39602 (left-click after right-click was recognized as double-click). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39609 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -491,6 +491,7 @@ DefaultWindowBehaviour::DefaultWindowBehaviour(Window* window)
|
|||||||
fDesktop(window->Desktop()),
|
fDesktop(window->Desktop()),
|
||||||
fState(NULL),
|
fState(NULL),
|
||||||
fLastModifiers(0),
|
fLastModifiers(0),
|
||||||
|
fLastMouseButtons(0),
|
||||||
fResetClickCount(0)
|
fResetClickCount(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -506,21 +507,26 @@ bool
|
|||||||
DefaultWindowBehaviour::MouseDown(BMessage* message, BPoint where)
|
DefaultWindowBehaviour::MouseDown(BMessage* message, BPoint where)
|
||||||
{
|
{
|
||||||
// Get the click count and reset it, if the modifiers changed in the
|
// Get the click count and reset it, if the modifiers changed in the
|
||||||
// meantime.
|
// meantime. Do the same when this is not the button we've seen before.
|
||||||
// TODO: This should be done in a better place (e.g. the input server). It
|
// TODO: At least the modifier check should be done in a better place
|
||||||
// should also reset clicks after mouse movement (which we don't do here
|
// (e.g. the input server). It should also reset clicks after mouse
|
||||||
// either -- though that's probably acceptable).
|
// movement (which we don't do here either -- though that's probably
|
||||||
|
// acceptable).
|
||||||
int32 clickCount = message->FindInt32("clicks");
|
int32 clickCount = message->FindInt32("clicks");
|
||||||
int32 modifiers = message->FindInt32("modifiers");
|
int32 modifiers = message->FindInt32("modifiers");
|
||||||
|
int32 buttons = message->FindInt32("buttons");
|
||||||
|
|
||||||
if (clickCount <= 1) {
|
if (clickCount <= 1) {
|
||||||
fResetClickCount = 0;
|
fResetClickCount = 0;
|
||||||
} else if (modifiers != fLastModifiers
|
} else if (modifiers != fLastModifiers || buttons != fLastMouseButtons
|
||||||
|| clickCount - fResetClickCount < 1) {
|
|| clickCount - fResetClickCount < 1) {
|
||||||
fResetClickCount = clickCount - 1;
|
fResetClickCount = clickCount - 1;
|
||||||
clickCount = 1;
|
clickCount = 1;
|
||||||
} else
|
} else
|
||||||
clickCount -= fResetClickCount;
|
clickCount -= fResetClickCount;
|
||||||
|
|
||||||
fLastModifiers = modifiers;
|
fLastModifiers = modifiers;
|
||||||
|
fLastMouseButtons = buttons;
|
||||||
|
|
||||||
// if a state is active, let it do the job
|
// if a state is active, let it do the job
|
||||||
if (fState != NULL)
|
if (fState != NULL)
|
||||||
@@ -554,7 +560,6 @@ DefaultWindowBehaviour::MouseDown(BMessage* message, BPoint where)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// translate the region into an action
|
// translate the region into an action
|
||||||
int32 buttons = message->FindInt32("buttons");
|
|
||||||
bool leftButton = (buttons & B_PRIMARY_MOUSE_BUTTON) != 0;
|
bool leftButton = (buttons & B_PRIMARY_MOUSE_BUTTON) != 0;
|
||||||
bool rightButton = (buttons & B_SECONDARY_MOUSE_BUTTON) != 0;
|
bool rightButton = (buttons & B_SECONDARY_MOUSE_BUTTON) != 0;
|
||||||
uint32 flags = fWindow->Flags();
|
uint32 flags = fWindow->Flags();
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ protected:
|
|||||||
Desktop* fDesktop;
|
Desktop* fDesktop;
|
||||||
State* fState;
|
State* fState;
|
||||||
int32 fLastModifiers;
|
int32 fLastModifiers;
|
||||||
|
int32 fLastMouseButtons;
|
||||||
int32 fResetClickCount;
|
int32 fResetClickCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user