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.

Reply via email to