mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-07-16 04:45:02 +03:00
Feature: Add monitor-switch buttons to remote toolbars (#15314)
* Feature: add monitor-switch buttons to remote toolbars Add a one-click "switch to next monitor" control to both desktop toolbars: - Main toolbar: always shown when the remote has more than one monitor, styled to match the existing blue icon buttons (white screen, black number). - Minimized (draggable show/hide) toolbar: off by default, toggled via a new "Show monitor switch on minimized toolbar" checkbox in the Display menu and persisted as a local option. Signed-off-by: StealUrKill <35749471+StealUrKill@users.noreply.github.com> * Update remote_toolbar.dart * refact: unify monitor-switch button icons, share tooltip Addressing the review feedback on the monitor-switch toolbar buttons: - Add assets/display_switcher.svg and use it for both the main and minimized buttons. This replaces the hand-drawn glyph (Containers + magic numbers) on the main toolbar. The icon scales with DPI/theme and the two toolbars stay visually consistent. - Flip the minimized button's label to white for contrast, since the new icon has a solid screen. - Move the tooltip string into a shared _MonitorCycle.tooltip getter so both buttons use one source of truth. - Use const Offstage() for consistency with the surrounding returns. Signed-off-by: StealUrKill <35749471+StealUrKill@users.noreply.github.com> * Improve monitor-switch settings and toolbar behavior - Nest the minimized-toolbar option under the main one in settings only show when the main option is enabled. - Only show the minimized switch button on the collapsed toolbar handle, so it no longer duplicates the main switch while the toolbar is expanded. Signed-off-by: StealUrKill <35749471+StealUrKill@users.noreply.github.com> --------- Signed-off-by: StealUrKill <35749471+StealUrKill@users.noreply.github.com> Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
This commit is contained in:
@@ -407,6 +407,7 @@ class _GeneralState extends State<_General> {
|
||||
final RxBool serviceStop =
|
||||
isWeb ? RxBool(false) : Get.find<RxBool>(tag: 'stop-service');
|
||||
RxBool serviceBtnEnabled = true.obs;
|
||||
final GlobalKey _minToolbarOptionKey = GlobalKey();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -605,6 +606,47 @@ class _GeneralState extends State<_General> {
|
||||
},
|
||||
));
|
||||
}
|
||||
children.add(_OptionCheckBox(
|
||||
context,
|
||||
'Show monitor switch button on the main toolbar',
|
||||
kOptionAllowMonitorSwitchMainToolbar,
|
||||
isServer: false,
|
||||
update: (enabled) async {
|
||||
if (!enabled) {
|
||||
await mainSetLocalBoolOption(
|
||||
kOptionAllowMonitorSwitchMinToolbar, false);
|
||||
}
|
||||
if (mounted) setState(() {});
|
||||
reloadAllWindows();
|
||||
if (enabled) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final ctx = _minToolbarOptionKey.currentContext;
|
||||
if (ctx != null) {
|
||||
Scrollable.ensureVisible(
|
||||
ctx,
|
||||
alignment: 0.5,
|
||||
duration: const Duration(milliseconds: 250),
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
));
|
||||
if (mainGetLocalBoolOptionSync(kOptionAllowMonitorSwitchMainToolbar)) {
|
||||
children.add(KeyedSubtree(
|
||||
key: _minToolbarOptionKey,
|
||||
child: _OptionCheckBox(
|
||||
context,
|
||||
'Show on the minimized toolbar',
|
||||
kOptionAllowMonitorSwitchMinToolbar,
|
||||
isServer: false,
|
||||
update: (_) {
|
||||
reloadAllWindows();
|
||||
},
|
||||
).marginOnly(left: _kCheckBoxLeftMargin * 3),
|
||||
));
|
||||
}
|
||||
return _Card(title: 'Other', children: children);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user