* One more fix needed for right click dragging. Ignore right mouse up if a drag
or long click happened between the initial mouse down and the present mouse up. Tried to avoid this solution by other means but wasn't working in a corner case, at least it's clear what's the code is doing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41934 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -221,6 +221,7 @@ BPoseView::BPoseView(Model *model, BRect bounds, uint32 viewMode, uint32 resizeM
|
|||||||
fSelectionPivotPose(NULL),
|
fSelectionPivotPose(NULL),
|
||||||
fRealPivotPose(NULL),
|
fRealPivotPose(NULL),
|
||||||
fKeyRunner(NULL),
|
fKeyRunner(NULL),
|
||||||
|
fTrackRightMouseUp(false),
|
||||||
fSelectionVisible(true),
|
fSelectionVisible(true),
|
||||||
fMultipleSelection(true),
|
fMultipleSelection(true),
|
||||||
fDragEnabled(true),
|
fDragEnabled(true),
|
||||||
@@ -6744,6 +6745,8 @@ BPoseView::MouseMoved(BPoint mouseLoc, uint32 moveCode, const BMessage *message)
|
|||||||
void
|
void
|
||||||
BPoseView::MouseDragged(const BMessage *message)
|
BPoseView::MouseDragged(const BMessage *message)
|
||||||
{
|
{
|
||||||
|
fTrackRightMouseUp = false;
|
||||||
|
|
||||||
BPoint where;
|
BPoint where;
|
||||||
uint32 buttons = 0;
|
uint32 buttons = 0;
|
||||||
if (message->FindPoint("be:view_where", &where) != B_OK
|
if (message->FindPoint("be:view_where", &where) != B_OK
|
||||||
@@ -6764,6 +6767,8 @@ BPoseView::MouseDragged(const BMessage *message)
|
|||||||
void
|
void
|
||||||
BPoseView::MouseLongDown(const BMessage *message)
|
BPoseView::MouseLongDown(const BMessage *message)
|
||||||
{
|
{
|
||||||
|
fTrackRightMouseUp = false;
|
||||||
|
|
||||||
BPoint where;
|
BPoint where;
|
||||||
if (message->FindPoint("where", &where) != B_OK)
|
if (message->FindPoint("where", &where) != B_OK)
|
||||||
return;
|
return;
|
||||||
@@ -6813,6 +6818,9 @@ BPoseView::MouseDown(BPoint where)
|
|||||||
uint32 buttons = (uint32)window->CurrentMessage()->FindInt32("buttons");
|
uint32 buttons = (uint32)window->CurrentMessage()->FindInt32("buttons");
|
||||||
uint32 modifs = modifiers();
|
uint32 modifs = modifiers();
|
||||||
|
|
||||||
|
if (buttons == B_SECONDARY_MOUSE_BUTTON)
|
||||||
|
fTrackRightMouseUp = true;
|
||||||
|
|
||||||
bool extendSelection = (modifs & B_COMMAND_KEY) && fMultipleSelection;
|
bool extendSelection = (modifs & B_COMMAND_KEY) && fMultipleSelection;
|
||||||
|
|
||||||
CommitActivePose();
|
CommitActivePose();
|
||||||
@@ -6869,7 +6877,7 @@ BPoseView::MouseUp(BPoint where)
|
|||||||
|
|
||||||
// Showing the pose context menu is done on mouse up (or long click)
|
// Showing the pose context menu is done on mouse up (or long click)
|
||||||
// to make right button dragging possible
|
// to make right button dragging possible
|
||||||
if (pose != NULL && pose == fLastClickedPose
|
if (pose != NULL && fTrackRightMouseUp
|
||||||
&& (lastButtons == B_SECONDARY_MOUSE_BUTTON
|
&& (lastButtons == B_SECONDARY_MOUSE_BUTTON
|
||||||
|| (modifiers() & B_CONTROL_KEY) != 0)) {
|
|| (modifiers() & B_CONTROL_KEY) != 0)) {
|
||||||
if (!pose->IsSelected()) {
|
if (!pose->IsSelected()) {
|
||||||
@@ -6880,6 +6888,7 @@ BPoseView::MouseUp(BPoint where)
|
|||||||
}
|
}
|
||||||
ShowContextMenu(where);
|
ShowContextMenu(where);
|
||||||
}
|
}
|
||||||
|
fTrackRightMouseUp = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -690,6 +690,7 @@ class BPoseView : public BView {
|
|||||||
const BPose *fSelectionPivotPose;
|
const BPose *fSelectionPivotPose;
|
||||||
const BPose *fRealPivotPose;
|
const BPose *fRealPivotPose;
|
||||||
BMessageRunner *fKeyRunner;
|
BMessageRunner *fKeyRunner;
|
||||||
|
bool fTrackRightMouseUp;
|
||||||
|
|
||||||
struct SelectionRectInfo {
|
struct SelectionRectInfo {
|
||||||
SelectionRectInfo()
|
SelectionRectInfo()
|
||||||
|
|||||||
Reference in New Issue
Block a user