This is an automated email from the git hooks/post-receive script.
git pushed a commit to reference refs/pull/135/head
in repository enlightenment.
View the commit online.
commit 6cf178cb0734d36921788bf6f8c3185d2dc0a3e0
Author: [email protected] <[email protected]>
AuthorDate: Sat Jun 13 11:41:14 2026 -0600
feat(wl): fire E_CLIENT_HOOK_UUID_SET on session-recovery set_uuid
Add an E_CLIENT_HOOK_UUID_SET client hook (and a public e_client_hook_call
wrapper) and fire it from zwp_e_session_recovery.set_uuid whenever a client's
uuid is set, not only when an e_remember already exists.
The proxy drives set_uuid directly (without the get_uuid round-trip that
creates a remember), so previously the hook never fired on the proxy path and
the WM-state module had no signal to restore a recovered window. Firing it
unconditionally lets the module restore geometry, desktop and stacking from its
own crash-safe store keyed by uuid.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
---
src/bin/e_client.c | 6 ++++++
src/bin/e_client.h | 2 ++
src/bin/e_comp_wl_extensions.c | 24 ++++++++++++++++--------
3 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index 4968e6a6e..8d34c2229 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -3689,6 +3689,12 @@ e_client_hook_del(E_Client_Hook *ch)
_e_client_hooks_delete++;
}
+E_API Eina_Bool
+e_client_hook_call(E_Client_Hook_Point hookpoint, E_Client *ec)
+{
+ return _e_client_hook_call(hookpoint, ec);
+}
+
///////////////////////////////////////
E_API void
diff --git a/src/bin/e_client.h b/src/bin/e_client.h
index 1083eb7f6..a86b0a00a 100644
--- a/src/bin/e_client.h
+++ b/src/bin/e_client.h
@@ -172,6 +172,7 @@ typedef enum _E_Client_Hook_Point
E_CLIENT_HOOK_UNREDIRECT,
E_CLIENT_HOOK_REDIRECT,
E_CLIENT_HOOK_UNIGNORE,
+ E_CLIENT_HOOK_UUID_SET,
E_CLIENT_HOOK_LAST,
} E_Client_Hook_Point;
@@ -814,6 +815,7 @@ E_API unsigned int e_clients_count(void);
E_API void e_client_move_intercept_cb_set(E_Client *ec, E_Client_Move_Intercept_Cb cb);
E_API E_Client_Hook *e_client_hook_add(E_Client_Hook_Point hookpoint, E_Client_Hook_Cb func, const void *data);
E_API void e_client_hook_del(E_Client_Hook *ch);
+E_API Eina_Bool e_client_hook_call(E_Client_Hook_Point hookpoint, E_Client *ec);
E_API void e_client_focus_latest_set(E_Client *ec);
E_API void e_client_raise_latest_set(E_Client *ec);
E_API Eina_Bool e_client_focus_track_enabled(void);
diff --git a/src/bin/e_comp_wl_extensions.c b/src/bin/e_comp_wl_extensions.c
index 7de8de268..ec716ff0a 100644
--- a/src/bin/e_comp_wl_extensions.c
+++ b/src/bin/e_comp_wl_extensions.c
@@ -93,16 +93,23 @@ _e_comp_wl_session_recovery_set_uuid(struct wl_client *client EINA_UNUSED, struc
if (ec->internal || ec->uuid) return; //FIXME: error
eina_stringshare_replace(&ec->uuid, uuid);
rem = e_remember_sr_find(ec);
- if ((!rem) || (rem == ec->sr_remember)) return;
- if (ec->sr_remember)
+ if (rem && (rem != ec->sr_remember))
{
- e_remember_unuse(ec->sr_remember);
- e_remember_del(ec->sr_remember);
+ if (ec->sr_remember)
+ {
+ e_remember_unuse(ec->sr_remember);
+ e_remember_del(ec->sr_remember);
+ }
+ ec->sr_remember = rem;
+ e_remember_use(rem);
+ e_remember_apply(rem, ec);
+ ec->re_manage = 1;
}
- ec->sr_remember = rem;
- e_remember_use(rem);
- e_remember_apply(rem, ec);
- ec->re_manage = 1;
+ /* Always notify that a uuid was set, even when no e_remember exists: the
+ * wl_proxy module restores this window's state (position/desk/stacking) from
+ * its own crash-safe store on this hook. The e_wl_proxy proxy drives set_uuid
+ * directly (without get_uuid), so there is normally no remember to find. */
+ e_client_hook_call(E_CLIENT_HOOK_UUID_SET, ec);
}
static void
@@ -111,6 +118,7 @@ _e_comp_wl_session_recovery_destroy_uuid(struct wl_client *client EINA_UNUSED, s
E_Client *ec;
ec = wl_resource_get_user_data(surface);
+ if (e_object_is_del(E_OBJECT(ec))) return;
if (!eina_streq(ec->uuid, uuid)) return; //FIXME: error
eina_stringshare_replace(&ec->uuid, NULL);
if (ec->sr_remember)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.