RFR: 8313424: JavaFX controls in the title bar [v27]
Martin Fox
mfox at openjdk.org
Thu Nov 14 16:20:11 UTC 2024
On Sat, 9 Nov 2024 07:45:19 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> Implementation of [`EXTENDED` stage style](https://gist.github.com/mstr2/0befc541ee7297b6db2865cc5e4dbd09).
>
> Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 34 commits:
>
> - Merge branch 'master' into feature/extended-window
> - Merge branch 'master' into feature/extended-window
> - add system menu documentation
> - WindowControlsOverlay snapping
> - HeaderBar javadoc change
> - refactor performWindowDrag
> - HeaderBar changes
> - EMPTY Dimension2D constant
> - use CsvSource in HeaderBarTest
> - stylistic changes
> - ... and 24 more: https://git.openjdk.org/jfx/compare/d0011b21...65f095ef
Kudos for tackling this and doing such a thorough job. I'll try to look over the Windows code in the next couple of weeks.
modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacWindow.java line 176:
> 174: if (eventHandler != null && eventHandler.pickDragAreaNode(wx, wy) != null) {
> 175: if (clickCount == 2) {
> 176: maximize(!isMaximized());
The title bar double-click behavior is user-configurable. Unfortunately the only way to get this right is to query for an undocumented but widely-known preference.
NSString* action = [NSUserDefaults.standardUserDefaults stringForKey: @"AppleActionOnDoubleClick"];
if ([action isEqualToString: @"Minimize"]) {
[window performMiniaturize: nil];
}
else if ([action isEqualToString: @"Maximize"]) {
[window performZoom: nil];
}
modules/javafx.graphics/src/main/native-glass/mac/GlassViewDelegate.m line 1148:
> 1146: - (void)performWindowDrag
> 1147: {
> 1148: if (lastEvent != nil) {
This is correct code but it would be more bullet-proof if you used `NSApp.currentEvent` rather than `lastEvent`. I'm fine either way.
modules/javafx.graphics/src/main/native-glass/mac/GlassWindow.m line 465:
> 463: [window->nsWindow setTitlebarAppearsTransparent:YES];
> 464: [window->nsWindow setToolbar:[NSToolbar new]];
> 465: [window->nsWindow setToolbarStyle:NSWindowToolbarStyleUnifiedCompact];
The presence of an empty toolbar is confusing fullscreen mode. My attempt at a fix was to add a few lines in GlassWindow+Overrides.m. In `windowWillEnterFullScreen` I added:
if (nsWindow.toolbar != nil) {
nsWindow.toolbar.visible = NO;
}
I made the toolbar visible again in `windowDidExitFullScreen`. I tried doing this in `windowWillExitFullScreen` but it didn't work.
These delegate methods are all you need to tweak. There's still a bunch of code strewn about related to non-native fullscreen handling but it's all unused cruft.
modules/javafx.graphics/src/main/native-glass/mac/GlassWindow.m line 1542:
> 1540: GLASS_POOL_ENTER;
> 1541: {
> 1542: NSString* preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
Is there some reason you're not using the `NSWindow.windowTitlebarLayoutDirection` property?
-------------
PR Review: https://git.openjdk.org/jfx/pull/1605#pullrequestreview-2436362179
PR Review Comment: https://git.openjdk.org/jfx/pull/1605#discussion_r1842448874
PR Review Comment: https://git.openjdk.org/jfx/pull/1605#discussion_r1842389767
PR Review Comment: https://git.openjdk.org/jfx/pull/1605#discussion_r1842416159
PR Review Comment: https://git.openjdk.org/jfx/pull/1605#discussion_r1842465120
More information about the openjfx-dev
mailing list