Christopher — Thanks for the details.

Thiago — I’m still of the opinion that we shouldn’t try to specify what happens 
when a client tries to resize a maximized window. I don’t like leaving these 
things unspecified but I’m not sure there’s a compelling use case that would 
justify the effort involved in nailing this down. Simpler to just document that 
the window should be de-maximized first.

I’m also seeing some bugs on macOS related to maximizing and de-maximizing the 
window and it looks like we don’t have good system tests for some of this (or 
they’re disabled). Personally I would rather focus on fixing those issues.

Martin

> On Apr 17, 2025, at 10:44 PM, Christopher Schnick <crschn...@xpipe.io> wrote:
> 
> I wasn't really trying it, our application just had functionality to resize 
> the window on a certain action. And this functionality then broke the window 
> content when triggered while the window was maximized, which is a case I 
> didn't consider. I implemented a workaround for this now by just setting the 
> maximized property to false prior and only resizing the window if really 
> necessary, but I can imagine other applications possibly being affected by 
> this.
> 
> For reference, here is a video on how the issue looked like initially on 
> Linux: https://github.com/xpipe-io/xpipe/issues/485
> 
> On 17/04/2025 22:24, Martin Fox wrote:
>> Christopher,
>> 
>> Why are you trying to change the size of a maximized stage? I’m not sure 
>> what the intended effect is.
>> 
>> Currently this produces all sort of platform-specific behavior and since 
>> what you’re seeing on Windows doesn’t match what I’m seeing I think there 
>> might be some variation based on OS version. The easiest way out of this 
>> thicket is to de-maximize the stage before trying to change its size.
>> 
>> With that said, yes, this Linux bug definitely needs to be fixed. Whatever 
>> happens the scene shouldn’t break.
>> 
>>> On Apr 16, 2025, at 3:32 AM, Thiago Milczarek Sayão 
>>> <thiago.sa...@gmail.com> <mailto:thiago.sa...@gmail.com> wrote:
>>> 
>>> Hi,
>>> 
>>> I’d like to get your thoughts on what the expected behavior should be when 
>>> setting the size of a window while it's in a maximized state.
>>> 
>>> Here are the options I’ve considered:
>>> 
>>> a) Ignore the resize while maximized, and when restored, revert to the size 
>>> before it was maximized
>>> b) Demaximize the window and apply the new size immediately
>>> c) Ignore the resize request, but store the values and apply them upon 
>>> restore
>> 
>> Option A forces the client to de-maximize the window before changing its 
>> size. Option B de-maximizes the window automatically. Option C is the only 
>> one that brings new functionality to the table but it would be complicated 
>> to implement (assuming it can be implemented).
>> 
>> The documentation states that this is how things work when a stage is in 
>> fullscreen mode but from I can tell that’s not how any of the platforms 
>> actually behave. Trying to resize a fullscreen window produces a variety of 
>> immediate platform-specific effects.
>> 
>>> If I understood correctly, Martin mentioned that both macOS and Windows 
>>> apply the resize immediately while keeping the window maximized.
>> 
>> You understood correctly but I was wrong. On Windows 11 the size changes 
>> (I’m seeing only one resize event) and the window stays in the maximized 
>> state. This seems to be confusing the OS and it draws the title bar 
>> incorrectly. On macOS the size changes and the window leaves the maximized 
>> state but due to a bug in the code we don’t update the maximized property 
>> correctly.
>> 
>> Martin
>> 
>>> Then, when the window is demaximized, it restores the previous 
>>> (pre-maximized) size, which suggests behavior leaning toward option a.
>>> 
>>> For fullscreen mode, the expected behavior appears to align more with 
>>> option c, as documented for Stage fullscreen.
>>> 
>>> -- Thiago.
>>> 
>>> 
>>> Em sáb., 29 de mar. de 2025 às 09:24, Thiago Milczarek Sayão 
>>> <thiago.sa...@gmail.com <mailto:thiago.sa...@gmail.com>> escreveu:
>>>> I did not find a bug report, so I did one and provided a fix:
>>>> 
>>>> https://github.com/openjdk/jfx/pull/1748
>>>> 
>>>> 
>>>> 
>>>> Em sáb., 29 de mar. de 2025 às 08:26, Thiago Milczarek Sayão 
>>>> <thiago.sa...@gmail.com <mailto:thiago.sa...@gmail.com>> escreveu:
>>>>> @Christopher Schnick <mailto:crschn...@xpipe.io> 
>>>>> 
>>>>> Hi, did you open a bug? I have a fix for this.
>>>>> 
>>>>> Thanks
>>>>> 
>>>>> -- Thiago.
>>>>> 
>>>>> Em seg., 17 de mar. de 2025 às 09:49, Christopher Schnick 
>>>>> <crschn...@xpipe.io <mailto:crschn...@xpipe.io>> escreveu:
>>>>>> So on Windows at least, it will change the width temporarily and then 
>>>>>> revert back to the original width value. So you will receive two width 
>>>>>> change events if you listen to the stage width property. The maximized 
>>>>>> property is not changed.
>>>>>> 
>>>>>> I guess this also not optimal handling of this. Ideally, no changes 
>>>>>> would be made in that case.
>>>>>> 
>>>>>> On 17/03/2025 10:53, Thiago Milczarek Sayão wrote:
>>>>>>> Hi Christopher,
>>>>>>> 
>>>>>>> It seems like a simple fix.
>>>>>>> 
>>>>>>> How does it behave on other platforms? Does it ignore the resize, 
>>>>>>> restore the window to its unmaximized state before resizing, or keep it 
>>>>>>> maximized while adjusting the unmaximized size.
>>>>>>> 
>>>>>>> -- Thiago
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Em dom., 16 de mar. de 2025 às 05:25, Christopher Schnick 
>>>>>>> <crschn...@xpipe.io <mailto:crschn...@xpipe.io>> escreveu:
>>>>>>>> Hello,
>>>>>>>> 
>>>>>>>> we encountered an issue on Linux where resizing the stage while it is 
>>>>>>>> maximized breaks the size of the scene. You can see a video of this at 
>>>>>>>> https://github.com/xpipe-io/xpipe/issues/485 . The root cause is that 
>>>>>>>> the stage size is modified.
>>>>>>>> 
>>>>>>>> When doing this, it temporarily or permanently switches to the size 
>>>>>>>> the stage had prior to being maximized, leading to either a flicker or 
>>>>>>>> a permanently broken scene that has the wrong size. This happens on 
>>>>>>>> Gnome and KDE for me with the latest JavaFX ea version.
>>>>>>>> 
>>>>>>>> Here is a simple reproducer:
>>>>>>>> 
>>>>>>>> import javafx.application.Application;
>>>>>>>> import javafx.scene.Scene;
>>>>>>>> import javafx.scene.control.Button;
>>>>>>>> import javafx.scene.layout.Region;
>>>>>>>> import javafx.scene.layout.StackPane;
>>>>>>>> import javafx.stage.Stage;
>>>>>>>> 
>>>>>>>> import java.io.IOException;
>>>>>>>> import java.util.Base64;
>>>>>>>> 
>>>>>>>> public class MaximizeLinuxBug extends Application {
>>>>>>>> 
>>>>>>>>     @Override
>>>>>>>>     public void start(Stage stage) throws IOException {
>>>>>>>>         Scene scene = new Scene(createContent(), 640, 480);
>>>>>>>>         var s = "data:text/css;base64," <> + 
>>>>>>>> Base64.getEncoder().encodeToString(createCss().getBytes());
>>>>>>>>         scene.getStylesheets().add(s);
>>>>>>>>         stage.setTitle("Hello!");
>>>>>>>>         stage.setScene(scene);
>>>>>>>>         stage.show();
>>>>>>>>         stage.centerOnScreen();
>>>>>>>>         stage.setMaximized(true);
>>>>>>>>     }
>>>>>>>> 
>>>>>>>>     private String createCss() {
>>>>>>>>         return """
>>>>>>>>                 * {
>>>>>>>>                 -fx-border-color: red;
>>>>>>>>                 -fx-border-width: 1;
>>>>>>>>                 }
>>>>>>>>                 """;
>>>>>>>>     }
>>>>>>>> 
>>>>>>>>     private Region createContent() {
>>>>>>>>         var button = new Button("Click me!");
>>>>>>>>         button.setOnAction(event -> {
>>>>>>>>             var w = button.getScene().getWindow();
>>>>>>>>             w.setWidth(w.getWidth() - 1);
>>>>>>>>             event.consume();
>>>>>>>>         });
>>>>>>>>         var stack = new StackPane(button);
>>>>>>>>         return stack;
>>>>>>>>     }
>>>>>>>> 
>>>>>>>>     public static void main(String[] args) {
>>>>>>>>         launch();
>>>>>>>>     }
>>>>>>>> }
>>>>>>>> 
>>>>>>>> Best
>>>>>>>> Christopher Schnick
>>>>>>>> 
>> 

Reply via email to