@@ -100,69 +100,95 @@ ApplicationWindow {
100100        acceptedButtons:  Qt .LeftButton  |  Qt .RightButton 
101101        hoverEnabled:  true 
102102
103+         //  Drag state
104+         property bool isPressed:  false 
105+         property bool dragStarted:  false 
106+         property bool wasDragged:  false 
107+         property point pressPos:  Qt .point (0 , 0 )
103108        property int dragStartX:  0 
104109        property int dragStartY:  0 
105110        property int windowStartX:  0 
106111        property int windowStartY:  0 
107-         property bool wasDragged:  false 
108- 
109-         Timer {
110-             id:  resetDragTimer
111-             interval:  300 
112-             repeat:  false 
113-             onTriggered:  dragArea .wasDragged  =  false 
114-         }
112+         property int dragThreshold:  8  //  pixels
115113
114+         //  Tooltip logic
116115        Timer {
117116            id:  tooltipTimer
118117            interval:  500 
119118            repeat:  false 
120119            onTriggered:  showTooltip ()
121120        }
122- 
123-         onEntered:  tooltipTimer .start ()
124-         onExited:  {
121+         //  Ignore wayland for tooltip now. (REASON: tooltip position is over widget in buttom side of screen)
122+         onEntered:   if  (platformName !==  " wayland" 
123+             tooltipTimer .start ()
124+                     }
125+         onExited:  { if  (platformName !==  " wayland" 
125126            tooltipTimer .stop ()
126127            hideTooltip ()
128+             }
129+         }
130+ 
131+         //  Drag reset timer
132+         Timer {
133+             id:  resetDragTimer
134+             interval:  300 
135+             repeat:  false 
136+             onTriggered:  dragArea .wasDragged  =  false 
127137        }
128138
129139        Item { id:  globalMapper; anchors .fill :  parent; visible:  false  }
130140
131141        onPressed :  function (mouse ) {
132142            if  (mouse .button  ===  Qt .LeftButton ) {
133-                 wasDragged =  false ;
134-                 if  (platformName ===  " wayland" 
135-                     widgetWindow .startSystemMove ()
136-                     wasDragged =  true ; //  Assume a drag will happen
137-                 } else  { //  X11 and other platforms
138-                     //  Use the direct screen coordinates from the mouse event for reliability.
139-                     var  globalPos =  globalMapper .mapToGlobal (Qt .point (mouse .x , mouse .y ))
140-                                         dragStartX =  globalPos .x 
141-                                         dragStartY =  globalPos .y 
142-                                         windowStartX =  widgetWindow .x 
143-                                         windowStartY =  widgetWindow .y 
144- 
143+                 isPressed =  true 
144+                 dragStarted =  false 
145+                 wasDragged =  false 
146+                 pressPos =  Qt .point (mouse .x , mouse .y )
147+ 
148+                 if  (platformName !==  " wayland" 
149+                     var  globalPos =  globalMapper .mapToGlobal (pressPos)
150+                     dragStartX =  globalPos .x 
151+                     dragStartY =  globalPos .y 
152+                     windowStartX =  widgetWindow .x 
153+                     windowStartY =  widgetWindow .y 
145154                }
146155            }
147156        }
148157
149158        onPositionChanged :  function (mouse ) {
150-             if  (platformName !==  " wayland" &&  (mouse .buttons  &  Qt .LeftButton )) {
151-                 var  globalPos =  globalMapper .mapToGlobal (Qt .point (mouse .x , mouse .y ))
152-                                widgetWindow .x  =  windowStartX +  (globalPos .x  -  dragStartX)
153-                                widgetWindow .y  =  windowStartY +  (globalPos .y  -  dragStartY)
159+             if  (! isPressed)
160+                 return 
154161
162+             var  dx =  mouse .x  -  pressPos .x 
163+             var  dy =  mouse .y  -  pressPos .y 
164+             var  distance =  Math .sqrt (dx *  dx +  dy *  dy)
165+ 
166+             if  (! dragStarted &&  distance >  dragThreshold) {
167+                 dragStarted =  true 
155168                wasDragged =  true 
169+ 
170+                 if  (platformName ===  " wayland" 
171+                     widgetWindow .startSystemMove ()
172+                 }
173+             }
174+ 
175+             if  (dragStarted &&  platformName !==  " wayland" 
176+                 var  globalPos =  globalMapper .mapToGlobal (Qt .point (mouse .x , mouse .y ))
177+                 widgetWindow .x  =  windowStartX +  (globalPos .x  -  dragStartX)
178+                 widgetWindow .y  =  windowStartY +  (globalPos .y  -  dragStartY)
156179                resetDragTimer .stop ()
157180            }
158181        }
159182
160183        onReleased :  function (mouse ) {
161-             if  (mouse .button  ===  Qt .LeftButton  &&  wasDragged) {
162-                 if  (mouse .button  ===  Qt .LeftButton  &&  wasDragged) {
163-                                 appSettings .setValue (" widgetPositionX" widgetWindow .x )
164-                                 appSettings .setValue (" widgetPositionY" widgetWindow .y )
165-                                 resetDragTimer .start ()
184+             if  (mouse .button  ===  Qt .LeftButton ) {
185+                 isPressed =  false 
186+                 dragStarted =  false 
187+ 
188+                 if  (wasDragged) {
189+                     appSettings .setValue (" widgetPositionX" widgetWindow .x )
190+                     appSettings .setValue (" widgetPositionY" widgetWindow .y )
191+                     resetDragTimer .start ()
166192                }
167193            }
168194        }
0 commit comments