From 2aa7e58d7cb059ad56cdad0ab6eb266aae4734cc Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Wed, 10 Dec 2025 18:30:45 +0800 Subject: [PATCH] opt: optimize get client from surface --- src/client/client.h | 14 -------------- src/ext-protocol/tearing.h | 5 ++++- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/client/client.h b/src/client/client.h index 10ecfdf..bc7706d 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -153,20 +153,6 @@ static inline void client_get_geometry(Client *c, struct wlr_box *geom) { *geom = c->surface.xdg->geometry; } -static inline Client *get_client_from_surface(struct wlr_surface *surface) { - if (!surface) - return NULL; - - // 从 surface 的 data 指针获取 scene tree - struct wlr_scene_tree *scene_tree = surface->data; - if (!scene_tree) - return NULL; - - // 从 scene tree 的 node data 获取 Client - Client *c = scene_tree->node.data; - return c; -} - static inline Client *client_get_parent(Client *c) { Client *p = NULL; #ifdef XWAYLAND diff --git a/src/ext-protocol/tearing.h b/src/ext-protocol/tearing.h index 5ad36e8..8e02656 100644 --- a/src/ext-protocol/tearing.h +++ b/src/ext-protocol/tearing.h @@ -13,7 +13,10 @@ static void handle_controller_set_hint(struct wl_listener *listener, void *data) { struct tearing_controller *controller = wl_container_of(listener, controller, set_hint); - Client *c = get_client_from_surface(controller->tearing_control->surface); + Client *c = NULL; + + toplevel_from_wlr_surface(controller->tearing_control->surface, &c, NULL); + if (c) { /* * tearing_control->current is actually an enum: