#ifndef _EFL_CANVAS_WL_SURFACE_EO_H_
#define _EFL_CANVAS_WL_SURFACE_EO_H_

#ifndef _EFL_CANVAS_WL_SURFACE_EO_CLASS_TYPE
#define _EFL_CANVAS_WL_SURFACE_EO_CLASS_TYPE

typedef Eo Efl_Canvas_Wl_Surface;

#endif

#ifndef _EFL_CANVAS_WL_SURFACE_EO_TYPES
#define _EFL_CANVAS_WL_SURFACE_EO_TYPES


#endif
#ifdef EFL_BETA_API_SUPPORT
/**
 * @brief A canvas object representing a Wayland toplevel or popup surface.
 *
 * This object's geometry properties reflect the properties of the underlying
 * surface. If the client is using a protocol to export its size hints, those
 * hints will be directly applied to this object any time they change in the
 * application.
 *
 * Changes to geometry and visibility of this object must not be made while
 * @ref efl_canvas_wl_surface_extracted_get is @c false.
 *
 * Changes to size of this object will be immediately propagated to the
 * underlying application.
 *
 * Hiding this object will have differing effects based on the surface's
 * xdg-shell role. If the surface is a popup, it will be sent the 'done'
 * protocol event which will close it. If the surface is a toplevel, it will be
 * deactivated if it was active.
 *
 * This object's lifetime is bound to the lifetime of the underlying surface or
 * the compositor widget.
 *
 * This object must not be manually deleted.
 *
 * @since 1.24
 *
 * @ingroup Efl_Canvas_Wl_Surface
 */
#define EFL_CANVAS_WL_SURFACE_CLASS efl_canvas_wl_surface_class_get()

EAPI EAPI_WEAK const Efl_Class *efl_canvas_wl_surface_class_get(void) EINA_CONST;

/**
 * @brief Extract a surface from the compositor widget.
 *
 * Call this prior to making any calls which directly modify the geometry of
 * the surface. Once extracted, the compositor will no longer attempt to
 * automatically apply geometry or stacking changes to the surface.
 *
 * Once extracted, a surface cannot be un-extracted.
 *
 * @param[in] obj The object.
 *
 * @return Returns @c true if the surface was successfully extracted.
 *
 * @since 1.24
 *
 * @ingroup Efl_Canvas_Wl_Surface
 */
EAPI EAPI_WEAK Eina_Bool efl_canvas_wl_surface_extract(Eo *obj);

/**
 * @brief The process id of the surface's application.
 *
 * @param[in] obj The object.
 *
 * @return The process id, or -1 if the surface has been asynchronously
 * destroyed.
 *
 * @since 1.24
 *
 * @ingroup Efl_Canvas_Wl_Surface
 */
EAPI EAPI_WEAK int efl_canvas_wl_surface_pid_get(const Eo *obj);

/**
 * @brief The parent surface of the given surface. This value is @c NULL for
 * toplevel surfaces without a parent.
 *
 * For popup surfaces, this may be another popup or a toplevel. For toplevel
 * surfaces, this will always be another toplevel or @c NULL.
 *
 * @param[in] obj The object.
 *
 * @return The parent surface. @c NULL if no parent exists or the surface was
 * asynchronously destroyed.
 *
 * @since 1.24
 *
 * @ingroup Efl_Canvas_Wl_Surface
 */
EAPI EAPI_WEAK Efl_Canvas_Wl_Surface *efl_canvas_wl_surface_parent_surface_get(const Eo *obj);

/**
 * @brief The extracted state of the surface.
 *
 * @param[in] obj The object.
 *
 * @return @c true if @ref efl_canvas_wl_surface_extract was successfully
 * called previously.
 *
 * @since 1.24
 *
 * @ingroup Efl_Canvas_Wl_Surface
 */
EAPI EAPI_WEAK Eina_Bool efl_canvas_wl_surface_extracted_get(const Eo *obj);
#endif /* EFL_BETA_API_SUPPORT */

#endif
