Fix. Do not update cursor pos when switching display on toolbar when 'Show monitors on toolbar'
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
d16db77b52
commit
99ed1b729e
@ -2698,7 +2698,7 @@ Future<List<Rect>> getScreenRectList() async {
|
|||||||
: await getScreenListNotWayland();
|
: await getScreenListNotWayland();
|
||||||
}
|
}
|
||||||
|
|
||||||
openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi) {
|
openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi, bool updateCursorPos) {
|
||||||
final displays = i == kAllDisplayValue
|
final displays = i == kAllDisplayValue
|
||||||
? List.generate(pi.displays.length, (index) => index)
|
? List.generate(pi.displays.length, (index) => index)
|
||||||
: [i];
|
: [i];
|
||||||
@ -2707,7 +2707,7 @@ openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi) {
|
|||||||
sessionId: ffi.sessionId,
|
sessionId: ffi.sessionId,
|
||||||
value: Int32List.fromList(displays),
|
value: Int32List.fromList(displays),
|
||||||
);
|
);
|
||||||
ffi.ffiModel.switchToNewDisplay(i, ffi.sessionId, ffi.id);
|
ffi.ffiModel.switchToNewDisplay(i, ffi.sessionId, ffi.id, updateCursorPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open new tab or window to show this monitor.
|
// 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,18 @@ class _MonitorMenu extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
onPressed(int i, PeerInfo pi) {
|
onPressed(int i, PeerInfo pi, bool isMulti) {
|
||||||
_menuDismissCallback(ffi);
|
if (!isMulti) {
|
||||||
|
// If show monitors in toolbar(`buildMultiMonitorMenu()`), then the menu will dismiss automatically.
|
||||||
|
_menuDismissCallback(ffi);
|
||||||
|
}
|
||||||
RxInt display = CurrentDisplayState.find(id);
|
RxInt display = CurrentDisplayState.find(id);
|
||||||
if (display.value != i) {
|
if (display.value != i) {
|
||||||
if (isChooseDisplayToOpenInNewWindow(pi, ffi.sessionId)) {
|
if (isChooseDisplayToOpenInNewWindow(pi, ffi.sessionId)) {
|
||||||
openMonitorInNewTabOrWindow(i, ffi.id, pi);
|
openMonitorInNewTabOrWindow(i, ffi.id, pi);
|
||||||
} else {
|
} else {
|
||||||
openMonitorInTheSameTab(i, ffi, pi);
|
final updateCursorPos = !isMulti;
|
||||||
|
openMonitorInTheSameTab(i, ffi, pi, updateCursorPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -787,7 +787,7 @@ void showOptions(
|
|||||||
children.add(InkWell(
|
children.add(InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (i == cur) return;
|
if (i == cur) return;
|
||||||
openMonitorInTheSameTab(i, gFFI, pi);
|
openMonitorInTheSameTab(i, gFFI, pi, false);
|
||||||
gFFI.dialogManager.dismissAll();
|
gFFI.dialogManager.dismissAll();
|
||||||
},
|
},
|
||||||
child: Ink(
|
child: Ink(
|
||||||
|
@ -415,18 +415,21 @@ class FfiModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateCurDisplay(SessionID sessionId) {
|
updateCurDisplay(SessionID sessionId, {updateCursorPos = true}) {
|
||||||
final newRect = displaysRect();
|
final newRect = displaysRect();
|
||||||
if (newRect == null) {
|
if (newRect == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (newRect != _rect) {
|
if (newRect != _rect) {
|
||||||
if (newRect.left != _rect?.left || newRect.top != _rect?.top) {
|
if (updateCursorPos) {
|
||||||
parent.target?.cursorModel
|
if (newRect.left != _rect?.left || newRect.top != _rect?.top) {
|
||||||
.updateDisplayOrigin(newRect.left, newRect.top);
|
parent.target?.cursorModel
|
||||||
|
.updateDisplayOrigin(newRect.left, newRect.top);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_rect = newRect;
|
_rect = newRect;
|
||||||
parent.target?.canvasModel.updateViewStyle();
|
parent.target?.canvasModel
|
||||||
|
.updateViewStyle(refreshMousePos: updateCursorPos);
|
||||||
_updateSessionWidthHeight(sessionId);
|
_updateSessionWidthHeight(sessionId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -912,7 +915,7 @@ class FfiModel with ChangeNotifier {
|
|||||||
if (_pi.isSupportMultiUiSession) {
|
if (_pi.isSupportMultiUiSession) {
|
||||||
// If the peer supports multi-ui-session, no switch display message will be send back.
|
// If the peer supports multi-ui-session, no switch display message will be send back.
|
||||||
// We need to update the display manually.
|
// We need to update the display manually.
|
||||||
switchToNewDisplay(newDisplay, sessionId, peerId);
|
switchToNewDisplay(newDisplay, sessionId, peerId, true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msgBox(sessionId, 'nocancel-error', 'Prompt', 'No Displays', '',
|
msgBox(sessionId, 'nocancel-error', 'Prompt', 'No Displays', '',
|
||||||
@ -952,12 +955,17 @@ class FfiModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Directly switch to the new display without waiting for the response.
|
// 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,
|
||||||
|
) {
|
||||||
// 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.
|
// 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();
|
parent.target?.recordingModel.onClose();
|
||||||
// no need to wait for the response
|
// no need to wait for the response
|
||||||
pi.currentDisplay = display;
|
pi.currentDisplay = display;
|
||||||
updateCurDisplay(sessionId);
|
updateCurDisplay(sessionId, updateCursorPos: updateCursorPos);
|
||||||
try {
|
try {
|
||||||
CurrentDisplayState.find(peerId).value = display;
|
CurrentDisplayState.find(peerId).value = display;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -1242,7 +1250,7 @@ class CanvasModel with ChangeNotifier {
|
|||||||
? windowBorderWidth + kDragToResizeAreaPadding.bottom
|
? windowBorderWidth + kDragToResizeAreaPadding.bottom
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
updateViewStyle() async {
|
updateViewStyle({refreshMousePos = true}) async {
|
||||||
Size getSize() {
|
Size getSize() {
|
||||||
final size = MediaQueryData.fromWindow(ui.window).size;
|
final size = MediaQueryData.fromWindow(ui.window).size;
|
||||||
// If minimized, w or h may be negative here.
|
// If minimized, w or h may be negative here.
|
||||||
@ -1283,7 +1291,9 @@ class CanvasModel with ChangeNotifier {
|
|||||||
_y = (size.height - displayHeight * _scale) / 2;
|
_y = (size.height - displayHeight * _scale) / 2;
|
||||||
_imageOverflow.value = _x < 0 || y < 0;
|
_imageOverflow.value = _x < 0 || y < 0;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
parent.target?.inputModel.refreshMousePos();
|
if (refreshMousePos) {
|
||||||
|
parent.target?.inputModel.refreshMousePos();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateScrollStyle() async {
|
updateScrollStyle() async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user