Skip to content

fix: Fix stage hidden action In Mac Arm #2133

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

Merged
merged 1 commit into from
May 5, 2025
Merged

Conversation

DreamAwakenFateBroke
Copy link
Collaborator

@DreamAwakenFateBroke DreamAwakenFateBroke commented May 5, 2025

Fixes #

Proposed Changes

  1. ...
  2. ...
  3. ...

Readiness Checklist

Author/Contributor

  • If documentation is needed for this change, has that been included in this pull request

Reviewing Maintainer

  • Label as either enhancement, bug, documentation or dependencies
  • Verify design and implementation

Summary by Sourcery

Fix stage hidden action compatibility issues on Mac Arm architecture

Bug Fixes:

  • Resolved issues with screenshot and screen color picker functionality on Mac systems
  • Added thread-safe closing mechanism for screenshot stage
  • Disabled specific UI features that were incompatible with Mac OS

Enhancements:

  • Improved stage closing logic with a volatile flag
  • Added platform-specific UI adjustments for Mac OS

Summary by CodeRabbit

  • 新功能

    • 针对 macOS 系统,部分截图和取色相关设置项默认不可见,且对应选项被禁用。
  • 修复

    • 优化了截图窗口关闭流程,防止多次重复关闭导致的问题,提升稳定性。
  • 优化

    • 截图窗口在关闭时对主窗口的恢复操作更加流畅,保证界面体验。

Close #878

Signed-off-by: IfGuestInDream <ifGuestInDream@163.com>
Copy link

vercel bot commented May 5, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
javafx-tool ✅ Ready (Inspect) Visit Preview 💬 Add feedback May 5, 2025 3:25am

Copy link

Thank you for following naming conventions! 😻

Copy link

quine-bot bot commented May 5, 2025

👋 Figuring out if a PR is useful is hard, hopefully this will help.

  • @DreamAwakenFateBroke has been on GitHub since 2022 and in that time has had 48 public PRs merged
  • Don't you recognize them? They've been here before 🎉
  • Here's a good example of their work: javafxTool (Javafx scaffolding, built on JDK17 + JavaFX21 + controlsfx 11.x.x + Maven)
  • From looking at their profile, they seem to be good with Java and FreeMarker.

Their most recently public accepted PR is: #2132

Copy link

coderabbitai bot commented May 5, 2025

Walkthrough

此次变更主要针对 macOS 系统,扩展了对截图和取色器窗口可见性设置的特殊处理。在首选项视图和系统设置控制器中,新增了对这两个相关设置的可见性和可用性控制。此外,针对截图窗口的关闭流程,引入了并发保护机制,防止多次关闭操作,并确保 UI 恢复操作在 JavaFX 主线程中异步执行。

Changes

文件/模块 变更摘要
core/src/main/java/com/tlcsdm/core/javafx/controller/PreferencesView.java 在 macOS 下,初始化时将 supScreenshotHideWindowsupScreenColorPickerHideWindow 的可见性设为 false。
core/src/main/java/com/tlcsdm/core/javafx/controller/SystemSettingController.java 在 macOS 下,新增禁用 screenshotHideWindowCheckBoxscreenColorPickerHideWindowCheckBox 两个控件。
core/src/main/java/com/tlcsdm/core/javafx/stage/ScreenshotStage.java 新增 volatile 字段 isClosing,防止 endScreenshot() 并发调用,恢复主窗口透明度等操作改为异步执行。

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant PreferencesView
    participant SystemSettingController
    participant ScreenshotStage
    participant JavaFXThread

    User->>PreferencesView: 初始化
    PreferencesView->>PreferencesView: 检测 macOS
    PreferencesView->>PreferencesView: 设置 supScreenshotHideWindow/supScreenColorPickerHideWindow 可见性为 false

    User->>SystemSettingController: 初始化/操作
    SystemSettingController->>SystemSettingController: 检测 macOS
    SystemSettingController->>SystemSettingController: 禁用相关 CheckBox

    User->>ScreenshotStage: 结束截图操作
    ScreenshotStage->>ScreenshotStage: 检查 isClosing
    alt isClosing=false
        ScreenshotStage->>ScreenshotStage: 设置 isClosing=true
        ScreenshotStage->>JavaFXThread: Platform.runLater 恢复主窗口状态
        JavaFXThread-->>ScreenshotStage: 恢复完成
        ScreenshotStage->>ScreenshotStage: 设置 isClosing=false
    else isClosing=true
        ScreenshotStage->>ScreenshotStage: 直接返回
    end
Loading

Possibly related PRs

Suggested labels

bug, core, size/S

Suggested reviewers

  • unknowIfGuestInDream

Poem

兔子跳跃在 Mac 上,
隐藏窗口不再忙。
取色截图皆受控,
并发守护不慌张。
代码轻盈如春风,
体验更上一层楼! 🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 707afeb and c6c9285.

📒 Files selected for processing (3)
  • core/src/main/java/com/tlcsdm/core/javafx/controller/PreferencesView.java (1 hunks)
  • core/src/main/java/com/tlcsdm/core/javafx/controller/SystemSettingController.java (1 hunks)
  • core/src/main/java/com/tlcsdm/core/javafx/stage/ScreenshotStage.java (6 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (9)
  • GitHub Check: build (21, windows-latest, false)
  • GitHub Check: qodana
  • GitHub Check: build (17, macos-latest, false)
  • GitHub Check: build (21, macos-latest, false)
  • GitHub Check: build (21, ubuntu-latest, false)
  • GitHub Check: build (17, windows-latest, false)
  • GitHub Check: build (17, ubuntu-latest, false)
  • GitHub Check: StepSecurity Harden-Runner
  • GitHub Check: Summary
🔇 Additional comments (6)
core/src/main/java/com/tlcsdm/core/javafx/controller/PreferencesView.java (1)

95-96: 在 macOS 上禁用截图和取色器窗口隐藏选项

为 Mac 系统特别处理截图和取色器相关的可见性设置,与 SystemSettingController 中的更改保持一致,确保这些选项在 macOS 上不可用。

core/src/main/java/com/tlcsdm/core/javafx/controller/SystemSettingController.java (1)

72-73: 在 macOS 上禁用截图和取色器窗口隐藏选项

在 Mac 系统上禁用截图和取色器窗口隐藏选项的 UI 控件,与 PreferencesView 中的更改保持一致,确保这些选项在 macOS 上不可用。

core/src/main/java/com/tlcsdm/core/javafx/stage/ScreenshotStage.java (4)

85-85: 添加并发保护标志

添加 volatile 标志变量用于防止 endScreenshot 方法的并发或重入调用,提高代码健壮性。


335-339: 增加并发保护机制

通过检查并设置 isClosing 标志,防止 endScreenshot 方法被多次并发调用,提高截图功能的稳定性,特别是在 Mac ARM 环境下。


341-345: 确保 UI 操作在 JavaFX 应用线程上执行

使用 Platform.runLater() 包装 UI 操作,确保恢复主窗口透明度和前置操作在 JavaFX 应用线程上异步执行,这是 JavaFX 的最佳实践。


347-347: 重置并发保护标志

在截图结束后重置 isClosing 标志,确保下次可以正常进行截图操作。

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

sourcery-ai bot commented May 5, 2025

Reviewer's Guide

This pull request addresses an issue with the main window remaining hidden after using screenshot or color picker tools on Mac ARM systems. The fix involves refining the stage closing logic in ScreenshotStage using a flag and Platform.runLater for UI updates, and disabling the problematic 'hide main window' feature specifically on macOS.

File-Level Changes

Change Details Files
Refactored stage closing logic to prevent issues on specific platforms.
  • Introduced a isClosing flag to prevent concurrent closing operations.
  • Used Platform.runLater to update the primary stage's opacity and bring it to the front, avoiding potential threading issues.
  • Removed unused commented-out code related to cursor image setting.
core/src/main/java/com/tlcsdm/core/javafx/stage/ScreenshotStage.java
Disabled the 'hide main window' feature for screenshot and color picker on macOS.
  • Set the default value for 'hide window' preferences (supScreenshotHideWindow, supScreenColorPickerHideWindow) to false on macOS.
  • Disabled the corresponding checkboxes (screenshotHideWindowCheckBox, screenColorPickerHideWindowCheckBox) in the system settings UI on macOS.
core/src/main/java/com/tlcsdm/core/javafx/controller/PreferencesView.java
core/src/main/java/com/tlcsdm/core/javafx/controller/SystemSettingController.java

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. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the 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 exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

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

@github-actions github-actions bot added the core label May 5, 2025
Copy link
Contributor

mergify bot commented May 5, 2025

Thanks for opening this pull request!
Please check out the Contributing Guidelines.

@mergify mergify bot added the bug Something isn't working label May 5, 2025
Copy link

sonarqubecloud bot commented May 5, 2025

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 @DreamAwakenFateBroke - I've reviewed your changes - here's some feedback:

  • This PR disables the window hiding feature on macOS; explore if fixing the hiding mechanism directly on macOS is a viable alternative.
  • Platform-specific checks for macOS have been added in multiple places; consider centralizing this logic if more platform-dependent behavior is expected.
Here's what I looked at during the review
  • 🟢 General issues: all looks good
  • 🟢 Security: all looks good
  • 🟢 Testing: 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.

Copy link
Contributor

github-actions bot commented May 5, 2025

Qodana Community for JVM

It seems all right 👌

No new problems were found according to the checks applied

💡 Qodana analysis was run in the pull request mode: only the changed files were checked
☁️ View the detailed Qodana report

Contact Qodana team

Contact us at qodana-support@jetbrains.com

GitHub
Explore the GitHub Discussions forum for JetBrains Qodana. Discuss code, ask questions & collaborate with the developer community.

@unknowIfGuestInDream unknowIfGuestInDream merged commit e504a59 into master May 5, 2025
36 checks passed
@unknowIfGuestInDream unknowIfGuestInDream deleted the pr-878 branch May 5, 2025 03:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working core size/M
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants