diff --git a/gui-wx/wxview.cpp b/gui-wx/wxview.cpp index 60951ea4..9084dbb0 100644 --- a/gui-wx/wxview.cpp +++ b/gui-wx/wxview.cpp @@ -2801,6 +2801,13 @@ void PatternView::OnMouseDown(wxMouseEvent& event) int button = event.GetButton(); int modifiers = GetMouseModifiers(event); + // ignore if a mouse button is already down + if (mouseisdown) return; + + // flag that a mouse button is down + mouseisdown = true; + whichbuttondown = button; + if (waitingforclick && button == wxMOUSE_BTN_LEFT) { // save paste location pastex = x; @@ -2870,6 +2877,13 @@ void PatternView::OnMouseDown(wxMouseEvent& event) void PatternView::OnMouseUp(wxMouseEvent& event) { + // if the button released was not the first held down then ignore + int button = event.GetButton(); + if (button != whichbuttondown) return; + + // same button released so process + mouseisdown = false; + if (drawingcells || selectingcells || movingview || clickedcontrol > NO_CONTROL) { StopDraggingMouse(); } else if (mainptr->draw_pending) { @@ -3273,6 +3287,7 @@ PatternView::PatternView(wxWindow* parent, wxCoord x, wxCoord y, int wd, int ht, selectingcells = false; // not selecting cells movingview = false; // not moving view waitingforclick = false; // not waiting for user to click + mouseisdown = false; // mouse button is not down nopattupdate = false; // enable pattern updates showcontrols = false; // not showing translucent controls oldcursor = NULL; // for toggling cursor via shift key diff --git a/gui-wx/wxview.h b/gui-wx/wxview.h index c0851239..86410fcd 100755 --- a/gui-wx/wxview.h +++ b/gui-wx/wxview.h @@ -102,6 +102,8 @@ public: bool movingview; // moving view due to dragging mouse? bool nopattupdate; // disable pattern updates? bool showcontrols; // draw translucent controls? + bool mouseisdown; // mouse button held down? + int whichbuttondown; // which mouse button is down wxRect controlsrect; // location of translucent controls wxRect pasterect; // area to be pasted wxCursor* oldcursor; // non-NULL if shift key has toggled cursor