Update bundled libdecor to last upstream version (21 jan 2025)

This commit is contained in:
ManoloFLTK 2025-02-14 17:12:39 +01:00
parent 4c64264e0c
commit 27d991f046
3 changed files with 33 additions and 23 deletions

View File

@ -23,14 +23,14 @@ The nanosvg library is not affected.
\section bundled-status Current status
\code
Current versions of bundled libraries (as of December 5, 2024):
Current versions of bundled libraries (as of February 14, 2025):
Library Version/git commit Release date FLTK Version
--------------------------------------------------------------------------
jpeg jpeg-9f 2024-01-14 1.4.0
nanosvg 7aeda550a8 [1] 2023-12-02 1.4.0
png libpng-1.6.44 2024-09-12 1.4.1
zlib zlib-1.3.1 2024-01-22 1.4.0
libdecor c2bd8ad6 [2] 2024-05-31 1.4.0
libdecor f7cd7ffd [2] 2025-01-21 1.4.2
--------------------------------------------------------------------------
Previous versions of bundled libraries (FLTK 1.3.x):

View File

@ -124,6 +124,7 @@ struct libdecor_frame_private {
enum libdecor_window_state window_state;
bool has_decoration_mode;
enum zxdg_toplevel_decoration_v1_mode decoration_mode;
enum libdecor_capabilities capabilities;
@ -504,7 +505,13 @@ toplevel_decoration_configure(
struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1,
uint32_t mode)
{
((struct libdecor_frame_private *)(data))->decoration_mode = mode;
struct libdecor_frame_private *frame_priv = (struct libdecor_frame_private *)data;
/* Ignore any _configure calls after the first, they will be
* from our set_mode call. */
if (!frame_priv->has_decoration_mode) {
frame_priv->has_decoration_mode = true;
frame_priv->decoration_mode = mode;
}
}
static const struct zxdg_toplevel_decoration_v1_listener
@ -640,9 +647,9 @@ libdecor_frame_unref(struct libdecor_frame *frame)
struct libdecor_plugin *plugin = context->plugin;
if (context->decoration_manager && frame_priv->toplevel_decoration) {
zxdg_toplevel_decoration_v1_destroy(frame_priv->toplevel_decoration);
frame_priv->toplevel_decoration = NULL;
}
zxdg_toplevel_decoration_v1_destroy(frame_priv->toplevel_decoration);
frame_priv->toplevel_decoration = NULL;
}
wl_list_remove(&frame->link);
@ -684,24 +691,21 @@ libdecor_frame_set_visibility(struct libdecor_frame *frame,
frame_priv->visible = visible;
/* enable/disable decorations that are managed by the compositor,
* only xdg-decoration version 2 and above allows to toggle decoration */
/* enable/disable decorations that are managed by the compositor.
* Note that, as of xdg_decoration v1, this is just a hint and there is
* no reliable way of disabling all decorations. In practice this should
* work but per spec this is not guaranteed.
*
* See also: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/17
*/
if (context->decoration_manager &&
zxdg_decoration_manager_v1_get_version(context->decoration_manager) > 1) {
if (frame_priv->visible &&
frame_priv->toplevel_decoration == NULL) {
/* - request to SHOW decorations
* - decorations are NOT HANDLED
* => create new decorations for already mapped surface */
libdecor_frame_create_xdg_decoration(frame_priv);
} else if (!frame_priv->visible &&
frame_priv->toplevel_decoration != NULL) {
/* - request to HIDE decorations
* - decorations are HANDLED
* => destroy decorations */
zxdg_toplevel_decoration_v1_destroy(frame_priv->toplevel_decoration);
frame_priv->toplevel_decoration = NULL;
}
frame_priv->toplevel_decoration &&
frame_priv->has_decoration_mode &&
frame_priv->decoration_mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE) {
zxdg_toplevel_decoration_v1_set_mode(frame_priv->toplevel_decoration,
frame->priv->visible
? ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE
: ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE);
}
/* enable/disable decorations that are managed by a plugin */

View File

@ -2915,6 +2915,12 @@ libdecor_plugin_new(struct libdecor *context)
struct libdecor_plugin_gtk *plugin_gtk;
struct wl_display *wl_display;
#ifdef HAVE_GETTID
/* Only support running on the main thread. */
if (getpid () != gettid ())
return NULL;
#endif
plugin_gtk = zalloc(sizeof *plugin_gtk);
libdecor_plugin_init(&plugin_gtk->plugin,
context,