typedef struct _E_Desktop_Surface E_Desktop_Surface;
typedef struct _E_Desktop_Toplevel E_Desktop_Toplevel;
+/**
+ * Create E_Desktop_Shell
+ *
+ * This function creates E_Desktop_Shell.
+ * E_Desktop_Shell initializes desktop-style shell protocols, such as wl_shell,
+ * xdg_shell_v5, and xdg_shell_v6.
+ * The E_Desktop_Shell is automatically destroyed when the given wl_display is
+ * destroyed.
+ */
E_Desktop_Shell *e_desktop_shell_create(struct wl_display *display);
+/**
+ * Retrieve E_Desktop_Surface instance associated with given E_Surface
+ *
+ * This function retrieves the E_Desktop_Surface instance associated with the
+ * given E_Surface. If no such association exists, it returns NULL.
+ */
E_Desktop_Surface *e_desktop_surface_try_from_surface(E_Surface *e_surface);
+
+/**
+ * Send configure event to the underlying shell surface with given arguments
+ *
+ * This functions sends a configure event to the underlying shell surface,
+ * indicating that the surface should be resized according to the provided
+ * dimensions and edges.
+ */
void e_desktop_surface_configure_send(E_Desktop_Surface *surface, uint32_t edges, int32_t width, int32_t height);
+
+/**
+ * Configure E_Desktop_Surface instance by given geometry
+ *
+ * Detailed behavior may vary depending on the underlying shell surface.
+ */
void e_desktop_surface_configure(E_Desktop_Surface *surface, int32_t x, int32_t y, int32_t width, int32_t height);
+
+/**
+ * Ping to the underlying shell surface
+ *
+ * This function sends a ping event to the underlying shell surface, indicating
+ * that it should respond with a pong request.
+ */
void e_desktop_surface_ping(E_Desktop_Surface *surface);
+
+/**
+ * Map E_Desktop_Surface instance
+ *
+ * This function maps the E_Desktop_Surface, making it visible on the screen.
+ */
void e_desktop_surface_map(E_Desktop_Surface *surface);
+
+/**
+ * Unmap E_Desktop_Surface instance
+ *
+ * This function unmaps the E_Desktop_Surface, hiding it from the screen.
+ */
void e_desktop_surface_unmap(E_Desktop_Surface *surface);
+/**
+ * Retrieve E_Desktop_Toplevel instance associated with given E_Surface
+ *
+ * This function retrieves the E_Desktop_Toplevel instance associated with the
+ * given E_Surface. If no such association exists, it returns NULL.
+ */
E_Desktop_Toplevel *e_desktop_toplevel_try_from_surface(E_Surface *e_surface);
+
+/**
+ * Get E_Client instance from E_Desktop_Toplevel
+ */
E_Client *e_desktop_toplevel_ec_get(E_Desktop_Toplevel *toplevel);
+
+/**
+ * Check whether E_Desktop_Toplevel is in fullscreen state
+ */
bool e_desktop_toplevel_is_fullscreen(E_Desktop_Toplevel *toplevel);
+
+/**
+ * Check whether E_Desktop_Toplevel is in maximized state
+ */
bool e_desktop_toplevel_is_maximized(E_Desktop_Toplevel *toplevel);
+
+/**
+ * Check whether E_Desktop_Toplevel is in activated state
+ */
bool e_desktop_toplevel_is_activated(E_Desktop_Toplevel *toplevel);
#endif