Skip to content

Commit

Permalink
Prevent dragging with secondary mouse button
Browse files Browse the repository at this point in the history
  • Loading branch information
s77rt committed May 19, 2021
1 parent 1d30e6b commit 91b8274
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
4 changes: 2 additions & 2 deletions internal/driver/glfw/window.go
Expand Up @@ -628,7 +628,7 @@ func (w *window) mouseMoved(viewport *glfw.Window, xpos float64, ypos float64) {
}
}

if mouseButton != 0 && !mouseDragStarted {
if mouseButton != 0 && mouseButton != desktop.MouseButtonSecondary && !mouseDragStarted {
obj, pos, _ := w.findObjectAtPositionMatching(w.canvas, previousPos, func(object fyne.CanvasObject) bool {
_, ok := object.(fyne.Draggable)
return ok
Expand Down Expand Up @@ -687,7 +687,7 @@ func (w *window) mouseMoved(viewport *glfw.Window, xpos float64, ypos float64) {
mouseDraggedOffset := w.mouseDraggedOffset
mouseDragPos := w.mouseDragPos
w.mouseLock.RUnlock()
if mouseDragged != nil && mouseButton > 0 {
if mouseDragged != nil && mouseButton > 0 && mouseButton != desktop.MouseButtonSecondary {
draggedObjDelta := mouseDraggedObjStart.Subtract(mouseDragged.(fyne.CanvasObject).Position())
ev := new(fyne.DragEvent)
ev.AbsolutePosition = mousePos
Expand Down
24 changes: 24 additions & 0 deletions internal/driver/glfw/window_test.go
Expand Up @@ -325,6 +325,30 @@ func TestWindow_HandleDragging(t *testing.T) {
assert.Nil(t, d1.popDragEvent())
assert.Nil(t, d2.popDragEvent())

// no drag event on secondary mouseDown
w.mouseClicked(w.viewport, glfw.MouseButton2, glfw.Press, 0)
w.WaitForEvents()
assert.Nil(t, d1.popDragEvent())
assert.Nil(t, d2.popDragEvent())

// no drag start and no drag event with pressed secondary mouse button
w.mouseMoved(w.viewport, 8, 8)
w.WaitForEvents()
assert.Nil(t, d1.popDragEvent())
assert.Nil(t, d2.popDragEvent())

// no drag end event on secondary mouseUp
w.mouseClicked(w.viewport, glfw.MouseButton2, glfw.Release, 0)
w.WaitForEvents()
assert.Nil(t, d1.popDragEndEvent())
assert.Nil(t, d2.popDragEndEvent())

// no drag event in simple move
w.mouseMoved(w.viewport, 9, 9)
w.WaitForEvents()
assert.Nil(t, d1.popDragEvent())
assert.Nil(t, d2.popDragEvent())

// no drag event on mouseDown
w.mouseClicked(w.viewport, glfw.MouseButton1, glfw.Press, 0)
w.WaitForEvents()
Expand Down

0 comments on commit 91b8274

Please sign in to comment.