GeezerVison is showing github.com — Fix UI display issues and improve macOS Tahoe/Sequoia support by arsarsars1 · Pull Request #1827 · MonitorControl/MonitorControl
Conversation
arsarsars1
commented
Dec 27, 2025
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
Overview
This PR addresses UI display issues and improves macOS Tahoe (15.x) / Sequoia compatibility, with follow-up fixes for OSD behavior, keyboard volume capture, and HUD lifecycle.
Changes Made
UI Fixes
-
Menu Bar Slider
- Redesigned layout: icon above slider (column style), left-aligned with the slider
- Increased view height for spacing; fixed icon/slider overlap
- Menu SF Symbols use palette configuration on macOS 12+ to avoid white “matting” around filled glyphs (e.g. brightness sun icon)
-
Preferences — Displays Tab
- Fixed truncated display friendly name field (taller field, better alignment with larger fonts)
-
Preferences — About Tab
- Fixed truncated application name label
-
Preferences — Keyboard Tab
- Accessibility troubleshooting UI (Help, Reset Accessibility via
tccutil where applicable)
- Volume control: new option Standard keys (force capture) — always captures volume/mute media keys even when the default output device supports native macOS volume (same intent as community PR Add "Standard keys (force capture)" option to volume control dropdown #1846; included here to ship with Tahoe work)
- Volume control popup widened slightly to fit the new menu title
macOS Tahoe / Sequoia / 26 Support
-
Custom HUD for broken native OSD
- On macOS 26+,
OSDUtils uses a custom HUD (CustomHUD.swift) instead of private OSDManager where native OSD no longer shows reliable percentage/updates (per project README note on Tahoe)
- Fade-out uses
RunLoop common mode so the timer still fires during nested run-loop activity
- Removed unused SwiftUI import from
CustomHUD.swift
-
HUD lifecycle
DisplayManager.clearDisplays() calls CustomHUDManager.cleanupDisplay per display so HUD windows/timers are not left behind after display reconnect or reconfigure
-
Slider
- Fixed percentage label updates (removed tautological
percentageBox guard)
Files Touched (high level)
MonitorControl/Support/CustomHUD.swift — custom OSD UI
MonitorControl/Support/OSDUtils.swift — route to custom HUD on macOS 26+
MonitorControl/Support/SliderHandler.swift — menu slider layout & symbol rendering; percentage label fix
MonitorControl/Support/DisplayManager.swift — HUD cleanup when clearing displays
MonitorControl/Support/MediaKeyTapManager.swift — KeyboardVolume.mediaForce handling
MonitorControl/Enums/PrefKey.swift — mediaForce case
MonitorControl/Support/AppDelegate.swift, OnboardingViewController.swift — accessibility prompts include force-capture volume mode
MonitorControl/UI/Base.lproj/Main.storyboard, MonitorControl/UI/en.lproj/Main.strings — new volume menu item + layout
MonitorControl.xcodeproj/project.pbxproj, Info.plist files — project / version as needed
Testing
- Tested on macOS Tahoe 15.x (UI, sliders, prefs, accessibility flow)
- Verify custom HUD on macOS 26+ when adjusting brightness/volume/contrast
- Verify Standard keys (force capture) keeps volume keys on MonitorControl when system would otherwise own them
- Unplug/replug or reconfigure displays and confirm no stray HUD windows
Related
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
koalazub, mbinkhorst, and easonwong-de reacted with thumbs up emoji
waydabber, yutokun, and easonwong-de reacted with heart emoji
All reactions
-
👍
3 reactions
-
❤️
3 reactions
- **Menu Bar Slider**:
- Redesigned layout to column style (icon above slider).
- Aligned icon to left-start.
- Increased vertical spacing and view height for better touch target and aesthetics.
- Fixed icon vs slider overlap issues.
- **Preferences UI**:
- **Displays**: Fixed truncated friendly name text field, increased height, and improved vertical alignment.
- **About**: Fixed truncated app name text.
- **Keyboard**: Improved layout of accessibility troubleshooting buttons (Help/Reset), added container/label for better grid alignment.
- **macOS Tahoe Support**:
- Added accessibility permission reset functionality.
- Implemented Custom HUD fallback for cases where native OSD is broken.
|
Hi @arsarsars1,
thank you for the pull request, I really appreciate it.
I am not sure I am entirely comfortable with the new menu layout, having the icons above the slider looks kind-of Strange (if we'd like to follow Tahoe style, maybe a min/max icon at both end of the slider might be better. Also, the super-small knob feels a bit strange:
Regarding the OSD, it might need some things to iron out. There seem to be white corners (beyond the rounding) and the yellow brightness icon does not seem to fully follow the macOS vibe.
Because of this, I am not yet ready to accept this PR just yet, but I leave it hanging here. But again, I appreciate your work, I just recommend iterating a bit on this.
|
yutokun reacted with heart emoji
l0vecr4ft and zepolclem reacted with eyes emoji
All reactions
-
❤️
1 reaction
-
👀
2 reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
@arsarsars1 are you planning on addressing the above issues ?
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Hi @sidevesh, I will resolve the issues in the PR today. Thank you
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Made-with: Cursor
# Conflicts:
# MonitorControl/UI/cs.lproj/Localizable.strings
Made-with: Cursor
# Conflicts:
# MonitorControl/UI/cs.lproj/Localizable.strings
- Updated CFBundleVersion in Info.plist files for both MonitorControl and MonitorControlHelper.
- Adjusted HUD dimensions and layout in CustomHUD.swift for improved aesthetics.
- Enhanced SliderHandler to support accent fill for better visual distinction in menu symbols.
- Add KeyboardVolume.mediaForce and UI for always capturing volume/mute keys
- Clean up CustomHUD windows when displays are cleared
- Fix SliderHandler percentage label update (remove tautology check)
- CustomHUD: RunLoop.common timer, drop unused SwiftUI import
- Widen volume control popup for new menu item; en Main.strings
Made-with: Cursor
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
- Draw the original soft ring + inner edge on BlockBorderOverlayView so the
pre–visual-effect border look returns without relying on layer draw.
- Use NSVisualEffectView material .menu and blending .withinWindow so the
card matches standard NSMenu rows (replacing .popover / .behindWindow).
- Light appearance uses a separator stroke instead of a white fill over the
blurred material.
- Bump CFBundleVersion to 7182 in app and helper Info.plist.
Made-with: Cursor
|
Latest push (f403b30): Display block menu chrome
- Restored the original multi-ring + inner-edge border via
BlockBorderOverlayView (layer-backed NSVisualEffectView does not draw borders the old way).
- Switched block material from
.popover / .behindWindow to .menu / .withinWindow so the card matches the standard menu background next to the display name row.
- Light mode: separator stroke instead of white fill over the blur.
CFBundleVersion → 7182 (app + helper).
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
@sidevesh yeah, the issue was fixed. It's ready for review. Thank you
|
waydabber reacted with thumbs up emoji
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Hi all, sorry for being slow will this, I'll review soon and let you know if there is anything else.
|
sidevesh and igRo reacted with thumbs up emoji
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Thank you for the update. It seems to me like the situation did not change much though. I now see the OSD is more rounded, however the offending corners are still there. Also, the percentage value looks a bit unfinished (white on white, big bold numbers, somewhat outside of an appropriate padding).
The app menu/sliders look the same as before but with colored icons. I feel it does not fit the app's old aesthetics nor the current established Tahoe UI design language in an organic way.
I think the ideal approach would be to leave the app menu look as before and maybe provide a minimal OSD that just fits nicely in Tahoe (note: maybe use glass).
Anyway, I really appreciate the effort, it's just that maybe the vision we have about how the app UI should look like diverges a bit. I recommend keeping and improving your fork of MonitorControl, gather some more feedback from users and do a PR when you feel the solution is more mature.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
(note: some of the issues - like the funny looking sliders - are because UIDesignRequiresCompatibility was not enabled for the project).
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
- Make Custom HUD background transparent to avoid square opaque corners
- Update custom HUD icon and slider colors for better macOS integration
- Adjust Menu Slider icon padding and layout constraints
|
I’ve pushed a few UI/UX refinements to address the aesthetic issues and bring the project closer to native macOS styling:
- Refined Slider Aesthetics: Updated the menu sliders (
MCSliderCell) to use semi-transparent whites (0.85-0.9 alpha). This removes the previous "funny" solid look and provides a much more premium, modern feel that blends well with the system.
- Re-enabled Dynamic Icons: The speaker icons in the volume sliders now dynamically update as you slide (swapping between the slash and wave variants), providing better visual feedback.
- HUD Polish: Adjusted the Custom HUD progress bar transparency to match the new slider aesthetic for better consistency across the app.
- Compatibility: Verified that
UIDesignRequiresCompatibility is correctly enabled, ensuring these custom UI elements render as intended on the latest SDKs/Tahoe.
Attached are two screenshots showing the improved look. @waydabber
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
The white on light-gray OSD still does not feel professional I think (first screenshot).
As for the second screenshot, I think the menu should look like as before, there is no need to change that (or if there is a change, then it should be updated to a full Tahoe style):
Just a general question (no judgement + no offense intended, I just want to understand): are you AI vibe-coding this or are you an experienced Swift/macOS programmer? Honestly, if it's (mostly) AI, then I am not sure this method of instructing the AI through You is super efficient - I should then probably just do whatever changes I feel fit to simplify the process. Let me know if you agree with this. Of course if your work is fully hand-made, then the appropriate course of action is to honor the work involved and keep giving feedbacks/reviews and nudge this in the right direction step by step. Thank you!
|
ZimbiX reacted with heart emoji
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
…ry validation entitlement
|
Thanks for the honest feedback! It's really helped nudge the design in the right direction.
Regarding your review:
OSD Professionalism: I've completely reworked the Custom OSD. It now uses a transparent root view wrapper which definitely fixes the "offending corners" artifact. It also uses a vibrant dark material (.popover with .vibrantDark) and a subtle 1px edge highlight for a much more polished, native look.
Menu Style: I've kept the menu layout consistent but refined the colors and re-enabled the volume-dependent icon switching for better interactivity. I've also verified everything looks correct even with UIDesignRequiresCompatibility active.
To be completely transparent—yes, I am using an AI coding assistant to help me with these contributions! I'm not a professional Swift developer, but I use MonitorControl every day, so I’m using AI in my free time to help contribute and improve the apps we all use.
I appreciate your patience and detailed reviews as I work through these steps with the assistant. I think the latest version hits the "pro" vibe we were looking for!
I've also rebuilt and launched the latest version for you to test locally. Everything should be looking great now!
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
The-BigBoss
commented
Apr 21, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
|
Hi @arsarsars1 我认为 @waydabber 的意思是让第三方显示器在使用Monitor Control调节亮度和音量的时候,看上去更像是在调节Apple公司出品的XDR Display 或 Studio Display一样,当按下 亮度+/- 或 音量+/-、静音 时,屏幕上可以显示(或模仿)类似macOS Tahoe原生UI的那种效果。
因为目前版本(4.3.3)的Monitor Control调节第三方显示器时,可以在Sequoia或以前版本的macOS调用原生UI,但是无法在Tahoe上正常调用系统UI,目前的思路是,既然无法调用系统UI,就制作一个复刻的Tahoe的UI。
Hi @arsarsars1, I think what @waydabber means is that when using Monitor Control to adjust brightness and volume on third-party displays, it should look more like adjusting an Apple XDR Display or Studio Display — i.e., when pressing brightness +/- or volume +/- / mute, the on-screen display should show (or mimic) an effect similar to the native macOS Tahoe UI.

The current version (4.3.3) of Monitor Control can invoke the native UI on Sequoia or earlier macOS versions when adjusting third-party displays, but it cannot properly invoke the system UI on Tahoe. The current idea is: since the system UI cannot be invoked, we should create a replica of the Tahoe UI.
|
ZimbiX and easonwong-de reacted with thumbs up emoji
GabrielesPL and easonwong-de reacted with hooray emoji
All reactions
-
👍
2 reactions
-
🎉
2 reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Note: As AI generated PRs are getting more numerous now, I made decision that I won't review AI generated PRs/forks due to lack of time and resources. Of course other maintainers can help with this. I will not close such PRs however, but add a fork recommendation label so these forks are visible here for anybody who might be interested in this specific addition. If this is an original (non-AI) work with major effort involved, please let me know - I want to better honor such PRs and provide a more appropriate feedback as soon as I have the time. Thank you for your understanding!
|
ZimbiX and easonwong-de reacted with heart emoji
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This branch has not been deployed
No deployments
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|