e_zone: Add e_zone_focused_client_get
authorJunseok Kim <juns.kim@samsung.com>
Fri, 27 Dec 2024 09:09:08 +0000 (18:09 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Thu, 2 Jan 2025 06:51:57 +0000 (15:51 +0900)
Change-Id: Ia0fef769db5fb031cd2cecc16afb879e067bb68e

src/bin/core/e_zone.c
src/bin/core/e_zone_intern.h
src/bin/windowmgr/e_policy_zone.c

index 41b9fe0191bd688708fb660c582e22a97d47e7f7..622c8480fb13492385bb17213c2e2c6f6fc99a21 100644 (file)
@@ -53,6 +53,7 @@ struct _E_Zone_Private
         struct wl_signal desk_prev;
         struct wl_signal desk_count;
         struct wl_signal client_add;
+        struct wl_signal focused_client_get;
      } events;
 
    struct wl_listener focus_focused_ec_changed;
@@ -137,6 +138,7 @@ _e_zone_private_init(E_Zone *zone)
    wl_signal_init(&priv->events.desk_prev);
    wl_signal_init(&priv->events.desk_count);
    wl_signal_init(&priv->events.client_add);
+   wl_signal_init(&priv->events.focused_client_get);
 
    e_object_data_set(E_OBJECT(zone), priv);
 
@@ -1116,6 +1118,19 @@ e_zone_desk_find_by_ec(E_Zone *zone, E_Client *ec)
    return NULL;
 }
 
+EINTERN E_Client *
+e_zone_focused_client_get(E_Zone *zone)
+{
+   E_Client *focused_ec;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL);
+
+   wl_signal_emit(&PRI(zone)->events.focused_client_get, &focused_ec);
+
+   ELOGF("ZONE", "Focused client get: %p", focused_ec, focused_ec);
+   return focused_ec;
+}
+
 EINTERN void
 e_zone_client_set_event_emit(E_Zone *zone, E_Client *ec)
 {
@@ -1229,6 +1244,13 @@ e_zone_client_add_listener_add(E_Zone *zone, struct wl_listener *listener)
    wl_signal_add(&priv->events.client_add, listener);
 }
 
+EINTERN void
+e_zone_focused_client_get_listener_add(E_Zone *zone, struct wl_listener *listener)
+{
+   API_ENTRY;
+   wl_signal_add(&priv->events.focused_client_get, listener);
+}
+
 EINTERN void
 e_desk_row_add(E_Zone *zone)
 {
index edfac944a572d0678f3f356cb497fe7054b3cfe0..e86708dc8c3d061c94fa16140bcc2cb684d65787 100644 (file)
@@ -70,6 +70,7 @@ EINTERN void                 e_zone_useful_geometry_dirty(E_Zone *zone);
 EINTERN void                 e_zone_client_add(E_Zone *zone, E_Client *ec);
 EINTERN Eina_Bool            e_zone_has_ec(E_Zone *zone, E_Client *ec);
 EINTERN Eina_Bool            e_zone_is_displaying(E_Zone *zone);
+EINTERN E_Client            *e_zone_focused_client_get(E_Zone *zone);
 
 EINTERN void      e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count);
 EINTERN void      e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count);
@@ -95,6 +96,7 @@ EINTERN void e_zone_useful_geometry_get_listener_add(E_Zone *zone, struct wl_lis
 EINTERN void e_zone_bg_mouse_down_listener_add(E_Zone *zone, struct wl_listener *listener);
 EINTERN void e_zone_bg_mouse_up_listener_add(E_Zone *zone, struct wl_listener *listener);
 EINTERN void e_zone_client_add_listener_add(E_Zone *zone, struct wl_listener *listener);
+EINTERN void e_zone_focused_client_get_listener_add(E_Zone *zone, struct wl_listener *listener);
 
 EINTERN void         e_desk_row_add(E_Zone *zone);
 EINTERN void         e_desk_row_remove(E_Zone *zone);
index d76bd8c588203cc89f754b8e41387850dbdd7d02..31e93ba65a0a2b51ed35b08134845c45188a23ca 100644 (file)
@@ -52,6 +52,7 @@ struct _E_Policy_Zone
    struct wl_listener desk_next;
    struct wl_listener desk_prev;
    struct wl_listener desk_count;
+   struct wl_listener focused_client_get;
 
    struct
      {
@@ -721,6 +722,22 @@ _e_policy_zone_cb_bg_mouse_down(struct wl_listener *listener, void *data)
    return;
 }
 
+static void
+_e_policy_zone_cb_focused_client_get(struct wl_listener *listener, void *data)
+{
+   E_Policy_Zone *policy_zone;
+   E_Zone *zone;
+   E_Client *focused_ec;
+
+   policy_zone = wl_container_of(listener, policy_zone, focused_client_get);
+   zone = policy_zone->zone;
+
+   focused_ec = e_focus_focused_ec_get(zone->focus);
+   *(E_Client **)data = focused_ec;
+
+   return;
+}
+
 static void
 _e_zone_policy_input_thread_focused_client_set(void *data)
 {
@@ -1705,6 +1722,8 @@ e_policy_zone_new(E_Zone *zone)
    e_zone_bg_mouse_down_listener_add(zone, &policy_zone->bg_mouse_down);
    policy_zone->bg_mouse_up.notify = _e_policy_zone_cb_bg_mouse_up;
    e_zone_bg_mouse_up_listener_add(zone, &policy_zone->bg_mouse_up);
+   policy_zone->focused_client_get.notify = _e_policy_zone_cb_focused_client_get;
+   e_zone_focused_client_get_listener_add(zone, &policy_zone->focused_client_get);
 
    policy_zone->desk_row_add.notify = _e_policy_zone_cb_desk_row_add;
    e_zone_desk_row_add_listener_add(policy_zone->zone, &policy_zone->desk_row_add);