Martin, I agree — this behavior is likely to be platform-specific, and it could be difficult to guarantee consistent results if we try to enforce a specific outcome. It seems more practical to document that variations should be expected.
I'll be filing a PR soon with fixes for Glass on Linux, along with additional tests related to window sizing, positioning and window state management. -- Thiago. Em seg., 21 de abr. de 2025 às 17:04, Martin Fox <martinfox...@gmail.com> escreveu: > 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> <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> 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> escreveu: >> >>> @Christopher Schnick <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> 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> 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 >>>>> >>>> > >