diff --git a/internal/driver/glfw/window.go b/internal/driver/glfw/window.go index 0c61b955d6..c40b2a679e 100644 --- a/internal/driver/glfw/window.go +++ b/internal/driver/glfw/window.go @@ -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 @@ -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 diff --git a/internal/driver/glfw/window_test.go b/internal/driver/glfw/window_test.go index 9b267e0ff5..c42c8548be 100644 --- a/internal/driver/glfw/window_test.go +++ b/internal/driver/glfw/window_test.go @@ -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()