Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(macOS): Hide traffic lights in band and dock sizes #182

Merged
merged 2 commits into from
Dec 5, 2024

Conversation

XMLHexagram
Copy link
Collaborator

@XMLHexagram XMLHexagram commented Dec 5, 2024

Summary by Sourcery

Add functionality to hide macOS window control buttons in band and dock sizes, and refactor the MacOSWindowControlButtonManager to use a shared instance for managing button visibility and positioning.

New Features:

  • Introduce functionality to hide and show macOS window control buttons based on device type.

Enhancements:

  • Refactor MacOSWindowControlButtonManager to use a shared instance for managing window control buttons.

Copy link

sourcery-ai bot commented Dec 5, 2024

Reviewer's Guide by Sourcery

This PR implements functionality to hide and show macOS window traffic light buttons (close, minimize, zoom) based on different window sizes. The implementation includes refactoring the MacOSWindowControlButtonManager to use a singleton pattern and adding new methods to control button visibility through platform channels.

Sequence diagram for macOS window button visibility control

sequenceDiagram
    actor User
    participant App as MainFlutterWindow
    participant Manager as MacOSWindowControlButtonManager
    participant Positioner as WindowButtonPositioner

    User->>App: Resize window
    App->>Manager: Check activeBreakpoint
    alt activeBreakpoint is band or dock
        Manager->>Manager: setHide()
        Manager->>App: Invoke set_hide
        App->>Positioner: setHide()
    else activeBreakpoint is not band or dock
        Manager->>Manager: setShow()
        Manager->>App: Invoke set_show
        App->>Positioner: setShow()
    end
Loading

Updated class diagram for MacOSWindowControlButtonManager

classDiagram
    class MacOSWindowControlButtonManager {
        -MethodChannel platform
        +MacOSWindowControlButtonManager shared
        +MacOSWindowControlButtonManager _()
        +setVertical() void
        +setHide() void
        +setShow() void
    }
Loading

File-Level Changes

Change Details Files
Refactored MacOSWindowControlButtonManager to use singleton pattern and instance methods
  • Introduced shared singleton instance
  • Converted static methods to instance methods
  • Changed platform channel from static to instance variable
lib/utils/macos_window_control_button_manager.dart
lib/main.dart
Added new functionality to hide/show window control buttons
  • Added setHide() and setShow() methods to control button visibility
  • Implemented native Swift code to toggle button visibility
  • Added method channel handlers for hide/show operations
lib/utils/macos_window_control_button_manager.dart
macos/Runner/MainFlutterWindow.swift
Implemented automatic hiding of traffic lights based on window size
  • Added logic to hide buttons in band and dock sizes
  • Added logic to show buttons in other window sizes
lib/widgets/title_bar/window_frame_for_macos.dart

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time. You can also use
    this command to specify where the summary should be inserted.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @XMLHexagram - I've reviewed your changes and they look great!

Here's what I looked at during the review
  • 🟡 General issues: 1 issue found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

static Future<void> setVertical() async {
MacOSWindowControlButtonManager._();

var platform = MethodChannel('not.ci.rune/window_control_button');
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Consider making the platform channel final to prevent accidental modification

Instance variables that represent system resources like platform channels should generally be immutable to prevent potential issues.

Suggested change
var platform = MethodChannel('not.ci.rune/window_control_button');
final platform = MethodChannel('not.ci.rune/window_control_button');

@Losses Losses merged commit 15c98b5 into master Dec 5, 2024
2 checks passed
@Losses Losses deleted the macos_hide_traffic_lights branch December 7, 2024 03:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants