Merge pull request #6591 from fufesou/fix/6453
Fix. Do not update cursor pos when switching display on toolbar when "Show monitors on toolbar"
This commit is contained in:
		
						commit
						b6f870ac5f
					
				| @ -2698,7 +2698,7 @@ Future<List<Rect>> getScreenRectList() async { | ||||
|       : await getScreenListNotWayland(); | ||||
| } | ||||
| 
 | ||||
| openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi) { | ||||
| openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi, {bool updateCursorPos = true}) { | ||||
|   final displays = i == kAllDisplayValue | ||||
|       ? List.generate(pi.displays.length, (index) => index) | ||||
|       : [i]; | ||||
| @ -2707,7 +2707,7 @@ openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi) { | ||||
|     sessionId: ffi.sessionId, | ||||
|     value: Int32List.fromList(displays), | ||||
|   ); | ||||
|   ffi.ffiModel.switchToNewDisplay(i, ffi.sessionId, ffi.id); | ||||
|   ffi.ffiModel.switchToNewDisplay(i, ffi.sessionId, ffi.id, updateCursorPos: updateCursorPos); | ||||
| } | ||||
| 
 | ||||
| // Open new tab or window to show this monitor. | ||||
|  | ||||
| @ -730,7 +730,7 @@ class _MonitorMenu extends StatelessWidget { | ||||
|                       ], | ||||
|                     ), | ||||
|                   ), | ||||
|             onPressed: () => onPressed(i, pi), | ||||
|             onPressed: () => onPressed(i, pi, isMulti), | ||||
|           ); | ||||
|         }); | ||||
| 
 | ||||
| @ -810,14 +810,17 @@ class _MonitorMenu extends StatelessWidget { | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   onPressed(int i, PeerInfo pi) { | ||||
|     _menuDismissCallback(ffi); | ||||
|   onPressed(int i, PeerInfo pi, bool isMulti) { | ||||
|     if (!isMulti) { | ||||
|       // If show monitors in toolbar(`buildMultiMonitorMenu()`), then the menu will dismiss automatically. | ||||
|       _menuDismissCallback(ffi); | ||||
|     } | ||||
|     RxInt display = CurrentDisplayState.find(id); | ||||
|     if (display.value != i) { | ||||
|       if (isChooseDisplayToOpenInNewWindow(pi, ffi.sessionId)) { | ||||
|         openMonitorInNewTabOrWindow(i, ffi.id, pi); | ||||
|       } else { | ||||
|         openMonitorInTheSameTab(i, ffi, pi); | ||||
|         openMonitorInTheSameTab(i, ffi, pi, updateCursorPos: !isMulti); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @ -415,18 +415,21 @@ class FfiModel with ChangeNotifier { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   updateCurDisplay(SessionID sessionId) { | ||||
|   updateCurDisplay(SessionID sessionId, {updateCursorPos = true}) { | ||||
|     final newRect = displaysRect(); | ||||
|     if (newRect == null) { | ||||
|       return; | ||||
|     } | ||||
|     if (newRect != _rect) { | ||||
|       if (newRect.left != _rect?.left || newRect.top != _rect?.top) { | ||||
|         parent.target?.cursorModel | ||||
|             .updateDisplayOrigin(newRect.left, newRect.top); | ||||
|       if (updateCursorPos) { | ||||
|         if (newRect.left != _rect?.left || newRect.top != _rect?.top) { | ||||
|           parent.target?.cursorModel | ||||
|               .updateDisplayOrigin(newRect.left, newRect.top); | ||||
|         } | ||||
|       } | ||||
|       _rect = newRect; | ||||
|       parent.target?.canvasModel.updateViewStyle(); | ||||
|       parent.target?.canvasModel | ||||
|           .updateViewStyle(refreshMousePos: updateCursorPos); | ||||
|       _updateSessionWidthHeight(sessionId); | ||||
|     } | ||||
|   } | ||||
| @ -952,12 +955,13 @@ class FfiModel with ChangeNotifier { | ||||
|   } | ||||
| 
 | ||||
|   // Directly switch to the new display without waiting for the response. | ||||
|   switchToNewDisplay(int display, SessionID sessionId, String peerId) { | ||||
|   switchToNewDisplay(int display, SessionID sessionId, String peerId, | ||||
|       {bool updateCursorPos = true}) { | ||||
|     // VideoHandler creation is upon when video frames are received, so either caching commands(don't know next width/height) or stopping recording when switching displays. | ||||
|     parent.target?.recordingModel.onClose(); | ||||
|     // no need to wait for the response | ||||
|     pi.currentDisplay = display; | ||||
|     updateCurDisplay(sessionId); | ||||
|     updateCurDisplay(sessionId, updateCursorPos: updateCursorPos); | ||||
|     try { | ||||
|       CurrentDisplayState.find(peerId).value = display; | ||||
|     } catch (e) { | ||||
| @ -1242,7 +1246,7 @@ class CanvasModel with ChangeNotifier { | ||||
|       ? windowBorderWidth + kDragToResizeAreaPadding.bottom | ||||
|       : 0; | ||||
| 
 | ||||
|   updateViewStyle() async { | ||||
|   updateViewStyle({refreshMousePos = true}) async { | ||||
|     Size getSize() { | ||||
|       final size = MediaQueryData.fromWindow(ui.window).size; | ||||
|       // If minimized, w or h may be negative here. | ||||
| @ -1283,7 +1287,9 @@ class CanvasModel with ChangeNotifier { | ||||
|     _y = (size.height - displayHeight * _scale) / 2; | ||||
|     _imageOverflow.value = _x < 0 || y < 0; | ||||
|     notifyListeners(); | ||||
|     parent.target?.inputModel.refreshMousePos(); | ||||
|     if (refreshMousePos) { | ||||
|       parent.target?.inputModel.refreshMousePos(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   updateScrollStyle() async { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user