feature: HTPC mode startup argument (#358)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2025-06-01 15:30:34 +02:00 committed by GitHub
parent a8795cf0c9
commit 69a5e3db7a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 416 additions and 151 deletions

View file

@ -4,7 +4,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:window_manager/window_manager.dart';
import 'package:fladder/providers/arguments_provider.dart';
import 'package:fladder/util/adaptive_layout/adaptive_layout.dart';
import 'package:fladder/widgets/full_screen_helpers/full_screen_wrapper.dart';
class DefaultTitleBar extends ConsumerStatefulWidget {
final String? label;
@ -33,6 +35,7 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
@override
Widget build(BuildContext context) {
if (ref.watch(argumentsStateProvider.select((value) => value.htpcMode))) return const SizedBox.shrink();
final brightness = widget.brightness ?? Theme.of(context).brightness;
final iconColor = Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.65);
return MouseRegion(
@ -77,11 +80,9 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
children: [
FutureBuilder<List<bool>>(future: Future.microtask(() async {
final isMinimized = await windowManager.isMinimized();
final isFullScreen = await windowManager.isFullScreen();
return [isMinimized, isFullScreen];
return [isMinimized];
}), builder: (context, snapshot) {
final isMinimized = snapshot.data?.firstOrNull ?? false;
final fullScreen = snapshot.data?.lastOrNull ?? false;
return IconButton(
style: IconButton.styleFrom(
hoverColor: brightness == Brightness.light
@ -89,9 +90,7 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
: Colors.white.withValues(alpha: 0.2),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(2))),
onPressed: () async {
if (fullScreen) {
await windowManager.setFullScreen(false);
}
fullScreenHelper.closeFullScreen(ref);
if (isMinimized) {
windowManager.restore();
} else {
@ -111,12 +110,10 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
FutureBuilder<List<bool>>(
future: Future.microtask(() async {
final isMaximized = await windowManager.isMaximized();
final isFullScreen = await windowManager.isFullScreen();
return [isMaximized, isFullScreen];
return [isMaximized];
}),
builder: (BuildContext context, AsyncSnapshot<List<bool>> snapshot) {
final maximized = snapshot.data?.firstOrNull ?? false;
final fullScreen = snapshot.data?.lastOrNull ?? false;
return IconButton(
style: IconButton.styleFrom(
hoverColor: brightness == Brightness.light
@ -125,15 +122,12 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(2)),
),
onPressed: () async {
if (fullScreen && maximized) {
await windowManager.setFullScreen(false);
fullScreenHelper.closeFullScreen(ref);
if (maximized) {
await windowManager.unmaximize();
return;
}
if (fullScreen) {
await windowManager.setFullScreen(false);
} else if (!maximized) {
if (!maximized) {
await windowManager.maximize();
} else {
await windowManager.unmaximize();