RFR: 8260528: Clean glass-gtk sizing and positioning code [v46]
Thiago Milczarek Sayao
tsayao at openjdk.org
Mon Jan 23 16:27:59 UTC 2023
On Mon, 23 Jan 2023 03:51:33 GMT, Thiago Milczarek Sayao <tsayao at openjdk.org> wrote:
>> This cleans size and positioning code, reducing special cases, code complexity and size.
>>
>> Changes:
>>
>> - cached extents: 28, 1, 1, 1 are old defaults - modern gnome uses different sizes. It does not assume any size because it varies - it does cache because it's unlikely to vary on the same system - but if it does occur, it will only waste a resize event.
>> - window geometry, min/max size are centralized in `update_window_constraints`;
>> - Frame extents (the window decoration size used for "total window size"):
>> - frame extents are received in `process_property_notify`;
>> - removed quirks in java code;
>> - When received, call `set_bounds` again to adjust the size (to account decorations later received);
>> - Removed `activate_window` because it's the same as focusing the window. `gtk_window_present` will deiconify and focus it.
>> - `ensure_window_size` was a quirk - removed;
>> - `requested_bounds` removed - not used anymore;
>> - `window_configure` incorporated in `set_bounds` with `gtk_window_move` and `gtk_window_resize`;
>> - `process_net_wm_property` is a work-around for Unity only (added a check if Unity - but it can probably be removed at some point)
>> - `restack` split in `to_front()` and `to_back()` to conform to managed code;
>> - Set `gtk_window_set_focus_on_map` to FALSE because if TRUE the Window Manager changes the window ordering in the "focus stealing" mechanism - this makes possible to remove the quirk on `request_focus()`;
>> - Note: `geometry_get_*` and `geometry_set_*` moved location but unchanged.
>
> Thiago Milczarek Sayao has updated the pull request incrementally with four additional commits since the last revision:
>
> - Fix JDK-8089923
> - Fix JDK-8089923
> - Fix JDK-8089923
> - Fix deiconify regression
I did change the positioning code to just apply gravity when decorations are received. I based the login on `setBounds` gravity docs:
* Gravity values specify how to correct window location if only its size
* changes (for example when stage decorations are added). User initiated
* resizing should be ignored and must not influence window location through
* this mechanism.
*
* The corresponding correction formulas are:
*
* {@code x -= xGravity * deltaW}
* {@code y -= yGravity * deltaH}
-------------
PR: https://git.openjdk.org/jfx/pull/915
More information about the openjfx-dev
mailing list