You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

836 lines
25 KiB

#ifdef E_TYPEDEFS
typedef enum _E_Client_Screen_Limit
{
E_CLIENT_OFFSCREEN_LIMIT_ALLOW_PARTIAL = 0,
E_CLIENT_OFFSCREEN_LIMIT_ALLOW_FULL = 1,
E_CLIENT_OFFSCREEN_LIMIT_ALLOW_NONE = 2
} E_Client_Screen_Limit;
typedef enum _E_Icon_Preference
{
E_ICON_PREF_E_DEFAULT,
E_ICON_PREF_NETWM,
E_ICON_PREF_USER
} E_Icon_Preference;
typedef enum _E_Direction
{
E_DIRECTION_UP,
E_DIRECTION_DOWN,
E_DIRECTION_LEFT,
E_DIRECTION_RIGHT
} E_Direction;
typedef enum _E_Transition
{
E_TRANSITION_LINEAR = 0,
E_TRANSITION_SINUSOIDAL = 1,
E_TRANSITION_ACCELERATE = 2,
E_TRANSITION_DECELERATE = 3,
E_TRANSITION_ACCELERATE_LOTS = 4,
E_TRANSITION_DECELERATE_LOTS = 5,
E_TRANSITION_SINUSOIDAL_LOTS = 6,
E_TRANSITION_BOUNCE = 7,
E_TRANSITION_BOUNCE_LOTS = 8
} E_Transition;
typedef enum _E_Stacking
{
E_STACKING_NONE,
E_STACKING_ABOVE,
E_STACKING_BELOW
} E_Stacking;
typedef enum _E_Focus_Policy
{
E_FOCUS_CLICK,
E_FOCUS_MOUSE,
E_FOCUS_SLOPPY,
E_FOCUS_LAST,
} E_Focus_Policy;
typedef enum
{
/* same as ecore-x types */
E_WINDOW_TYPE_UNKNOWN = 0,
E_WINDOW_TYPE_DESKTOP,
E_WINDOW_TYPE_DOCK,
E_WINDOW_TYPE_TOOLBAR,
E_WINDOW_TYPE_MENU,
E_WINDOW_TYPE_UTILITY,
E_WINDOW_TYPE_SPLASH,
E_WINDOW_TYPE_DIALOG,
E_WINDOW_TYPE_NORMAL,
E_WINDOW_TYPE_DROPDOWN_MENU,
E_WINDOW_TYPE_POPUP_MENU,
E_WINDOW_TYPE_TOOLTIP,
E_WINDOW_TYPE_NOTIFICATION,
E_WINDOW_TYPE_COMBO,
E_WINDOW_TYPE_DND,
/* since UNKNOWN was used improperly in comp matching,
* this value is a placeholder to indicate that we want
* only type UNKNOWN windows
*/
E_WINDOW_TYPE_REAL_UNKNOWN = 999
} E_Window_Type;
typedef enum _E_Urgency_Policy
{
E_ACTIVEHINT_POLICY_IGNORE,
E_ACTIVEHINT_POLICY_ANIMATE,
E_ACTIVEHINT_POLICY_ACTIVATE,
E_ACTIVEHINT_POLICY_ACTIVATE_EXCLUDE,
E_ACTIVEHINT_POLICY_LAST,
} E_Urgency_Policy;
typedef enum _E_Focus_Setting
{
E_FOCUS_NONE,
E_FOCUS_NEW_WINDOW,
E_FOCUS_NEW_DIALOG,
E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED
} E_Focus_Setting;
typedef enum _E_Maximize
{
E_MAXIMIZE_NONE = 0x00000000,
E_MAXIMIZE_FULLSCREEN = 0x00000001,
E_MAXIMIZE_SMART = 0x00000002,
E_MAXIMIZE_EXPAND = 0x00000003,
E_MAXIMIZE_FILL = 0x00000004,
E_MAXIMIZE_TYPE = 0x0000000f,
E_MAXIMIZE_VERTICAL = 0x00000010,
E_MAXIMIZE_HORIZONTAL = 0x00000020,
E_MAXIMIZE_BOTH = 0x00000030,
E_MAXIMIZE_LEFT = 0x00000070,
E_MAXIMIZE_RIGHT = 0x000000b0,
E_MAXIMIZE_DIRECTION = 0x000000f0
} E_Maximize;
typedef enum _E_Fullscreen
{
/* Resize window */
E_FULLSCREEN_RESIZE,
/* Change screen resolution and resize window */
E_FULLSCREEN_ZOOM
} E_Fullscreen;
typedef enum _E_Window_Placement
{
E_WINDOW_PLACEMENT_SMART,
E_WINDOW_PLACEMENT_ANTIGADGET,
E_WINDOW_PLACEMENT_CURSOR,
E_WINDOW_PLACEMENT_MANUAL
} E_Window_Placement;
typedef enum E_Client_Property
{
E_CLIENT_PROPERTY_NONE = 0,
E_CLIENT_PROPERTY_SIZE = (1 << 0),
E_CLIENT_PROPERTY_POS = (1 << 1),
E_CLIENT_PROPERTY_TITLE = (1 << 2),
E_CLIENT_PROPERTY_ICON = (1 << 3),
E_CLIENT_PROPERTY_URGENCY = (1 << 4),
E_CLIENT_PROPERTY_GRAVITY = (1 << 5),
E_CLIENT_PROPERTY_NETWM_STATE = (1 << 6),
E_CLIENT_PROPERTY_STICKY = (1 << 7),
} E_Client_Property;
typedef struct E_Client E_Client;
typedef struct E_Event_Client E_Event_Client;
typedef struct _E_Event_Client_Property E_Event_Client_Property;
typedef struct _E_Client_Pending_Resize E_Client_Pending_Resize;
typedef struct E_Event_Client_Zone_Set E_Event_Client_Zone_Set;
typedef struct E_Event_Client_Desk_Set E_Event_Client_Desk_Set;
typedef struct _E_Client_Hook E_Client_Hook;
typedef enum _E_Client_Hook_Point
{
E_CLIENT_HOOK_EVAL_PRE_FETCH,
E_CLIENT_HOOK_EVAL_FETCH,
E_CLIENT_HOOK_EVAL_PRE_POST_FETCH,
E_CLIENT_HOOK_EVAL_POST_FETCH,
E_CLIENT_HOOK_EVAL_PRE_FRAME_ASSIGN,
E_CLIENT_HOOK_EVAL_POST_FRAME_ASSIGN,
E_CLIENT_HOOK_EVAL_PRE_NEW_CLIENT,
E_CLIENT_HOOK_EVAL_POST_NEW_CLIENT,
E_CLIENT_HOOK_EVAL_END,
E_CLIENT_HOOK_FOCUS_SET,
E_CLIENT_HOOK_FOCUS_UNSET,
E_CLIENT_HOOK_NEW_CLIENT,
E_CLIENT_HOOK_DESK_SET,
E_CLIENT_HOOK_MOVE_BEGIN,
E_CLIENT_HOOK_MOVE_UPDATE,
E_CLIENT_HOOK_MOVE_END,
E_CLIENT_HOOK_RESIZE_BEGIN,
E_CLIENT_HOOK_RESIZE_UPDATE,
E_CLIENT_HOOK_RESIZE_END,
E_CLIENT_HOOK_DEL,
E_CLIENT_HOOK_UNREDIRECT,
E_CLIENT_HOOK_REDIRECT,
E_CLIENT_HOOK_LAST,
} E_Client_Hook_Point;
typedef void (*E_Client_Move_Intercept_Cb)(E_Client *, int x, int y);
typedef void (*E_Client_Hook_Cb)(void *data, E_Client *ec);
typedef void (*E_Client_Layout_Cb)(void);
#else
#ifndef HAVE_WAYLAND_ONLY
# include <Ecore_X.h>
#endif
#define E_CLIENT_TYPE (int)0xE0b01002
struct E_Event_Client
{
E_Client *ec;
};
struct E_Event_Client_Desk_Set
{
E_Client *ec;
E_Desk *desk;
};
struct E_Event_Client_Zone_Set
{
E_Client *ec;
E_Zone *zone;
};
struct _E_Event_Client_Property
{
E_Client *ec;
unsigned int property;
};
struct _E_Client_Hook
{
EINA_INLIST;
E_Client_Hook_Point hookpoint;
E_Client_Hook_Cb func;
void *data;
unsigned char delete_me : 1;
};
struct _E_Client_Pending_Resize
{
int w, h;
unsigned int serial;
};
struct E_Client
{
E_Object e_obj_inherit;
EINA_INLIST;
E_Pixmap *pixmap;
int depth;
int x, y, w, h; //frame+client geom
struct {
int x, y, w, h; //frame+client geom before move or resize callback
} pre_cb;
Eina_Rectangle client; //client geom
Evas_Object *frame; //comp object
E_Zone *zone;
E_Desk *desk;
Ecore_Poller *ping_poller;
Ecore_Timer *kill_timer;
E_Client *modal;
E_Client *leader;
Eina_List *group;
E_Client *parent;
Eina_List *transients;
E_Layer layer;
Eina_Rectangle *shape_rects;
unsigned int shape_rects_num;
Eina_Rectangle *shape_input_rects;
unsigned int shape_input_rects_num;
Eina_Stringshare *internal_icon;
Eina_Stringshare *internal_icon_key;
E_Direction shade_dir;
E_Comp_Client_Data *comp_data;
E_Action *cur_mouse_action;
int border_size; //size of client's border
struct
{
struct
{
int x, y, w, h;
int mx, my;
} current, last_down[3], last_up[3];
Eina_Bool in : 1;
} mouse;
struct
{
struct
{
int x, y, w, h;
int mx, my;
int button;
} down;
} moveinfo;
unsigned char ignore_first_unmap;
E_Pointer_Mode resize_mode;
struct
{
Eina_Bool mapping_change : 1;
Eina_Bool iconic_shading : 1;
} hacks;
struct
{
unsigned char changed : 1;
unsigned char user_selected : 1;
Eina_Stringshare *name;
} border;
struct
{
int x, y, w, h;
E_Layer layer;
int zone;
E_Maximize maximized;
} saved;
struct
{
unsigned char valid : 1;
int x, y, w, h;
struct
{
int x, y, w, h;
} saved;
} pre_res_change;
unsigned char shaped : 1;
unsigned char argb : 1;
/* ICCCM */
struct
{
Eina_Stringshare *title;
Eina_Stringshare *name;
Eina_Stringshare *class;
Eina_Stringshare *icon_name;
Eina_Stringshare *machine;
int min_w, min_h;
int max_w, max_h;
int base_w, base_h;
int step_w, step_h;
int start_x, start_y;
double min_aspect, max_aspect;
Ecore_Window icon_window;
Ecore_Window window_group;
uint64_t transient_for;
Ecore_Window client_leader;
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_Window_State_Hint initial_state;
Ecore_X_Window_State_Hint state;
Ecore_X_Pixmap icon_pixmap;
Ecore_X_Pixmap icon_mask;
Ecore_X_Gravity gravity;
#endif
Eina_Stringshare *window_role;
unsigned char take_focus : 1;
unsigned char accepts_focus : 1;
unsigned char urgent : 1;
unsigned char delete_request : 1;
unsigned char request_pos : 1;
struct
{
int argc;
char **argv;
} command;
struct
{
unsigned char title : 1;
unsigned char name_class : 1;
unsigned char icon_name : 1;
unsigned char machine : 1;
unsigned char hints : 1;
unsigned char size_pos_hints : 1;
unsigned char protocol : 1;
unsigned char transient_for : 1;
unsigned char client_leader : 1;
unsigned char window_role : 1;
unsigned char state : 1;
unsigned char command : 1;
} fetch;
} icccm;
/* MWM */
struct
{
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_MWM_Hint_Func func;
Ecore_X_MWM_Hint_Decor decor;
Ecore_X_MWM_Hint_Input input;
#endif
unsigned char exists : 1;
unsigned char borderless : 1;
struct
{
unsigned char hints : 1;
} fetch;
} mwm;
/* NetWM */
struct
{
pid_t pid;
unsigned int desktop;
Eina_Stringshare *name;
Eina_Stringshare *icon_name;
Ecore_X_Icon *icons;
int num_icons;
unsigned int user_time;
unsigned char opacity;
Eina_Bool opacity_changed : 1; // prevent fetching opacity next prop change
struct
{
int left;
int right;
int top;
int bottom;
int left_start_y;
int left_end_y;
int right_start_y;
int right_end_y;
int top_start_x;
int top_end_x;
int bottom_start_x;
int bottom_end_x;
} strut;
unsigned char ping : 1;
struct
{
unsigned char request : 1;
unsigned char alarm : 1;
unsigned int wait;
unsigned int serial;
double send_time;
} sync;
/* NetWM Window state */
struct
{
unsigned char modal : 1;
unsigned char sticky : 1;
unsigned char maximized_v : 1;
unsigned char maximized_h : 1;
unsigned char shaded : 1;
unsigned char skip_taskbar : 1;
unsigned char skip_pager : 1;
unsigned char hidden : 1;
unsigned char fullscreen : 1;
E_Stacking stacking;
} state;
/* NetWM Window allowed actions */
struct
{
unsigned char move : 1;
unsigned char resize : 1;
unsigned char minimize : 1;
unsigned char shade : 1;
unsigned char stick : 1;
unsigned char maximized_h : 1;
unsigned char maximized_v : 1;
unsigned char fullscreen : 1;
unsigned char change_desktop : 1;
unsigned char close : 1;
} action;
E_Window_Type type;
E_Window_Type *extra_types;
int extra_types_num;
int startup_id;
struct
{
unsigned char name : 1;
unsigned char icon_name : 1;
unsigned char icon : 1;
unsigned char user_time : 1;
unsigned char strut : 1;
unsigned char type : 1;
unsigned char state : 1;
unsigned char opacity : 1;
/* No, fetch on new_client, shouldn't be changed after map.
unsigned char pid : 1;
*/
/* No, ignore this
unsigned char desktop : 1;
*/
} fetch;
struct
{
unsigned char state : 1;
} update;
} netwm;
/* Extra e stuff */
struct
{
struct
{
struct
{
int x, y;
unsigned char updated : 1;
} video_position;
Ecore_Window video_parent;
E_Client *video_parent_client;
Eina_List *video_child;
struct
{
Eina_Stringshare *name;
Eina_Stringshare **available_list;
Eina_Stringshare *set;
Eina_Stringshare *wait;
E_Desk *wait_desk;
E_Object_Delfn *wait_desk_delfn;
int num;
unsigned char wait_for_done : 1;
unsigned char use : 1;
} profile;
unsigned char centered : 1;
unsigned char video : 1;
} state;
struct
{
unsigned char state : 1;
unsigned char video_parent : 1;
unsigned char video_position : 1;
unsigned char profile : 1;
} fetch;
} e;
struct
{
struct
{
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} fetch;
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} qtopia;
struct
{
struct
{
unsigned char state : 1;
unsigned char vkbd : 1;
} fetch;
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_Virtual_Keyboard_State state;
#endif
unsigned char have_property : 1;
unsigned char vkbd : 1;
} vkbd;
struct
{
unsigned char visible : 1;
unsigned char pos : 1;
unsigned char size : 1;
unsigned char stack : 1;
unsigned char prop : 1;
unsigned char border : 1;
unsigned char reset_gravity : 1;
unsigned char shading : 1;
unsigned char shaded : 1;
unsigned char shape : 1;
unsigned char shape_input : 1;
unsigned char icon : 1;
Eina_Bool internal_state : 1;
Eina_Bool need_maximize : 1;
Eina_Bool need_unmaximize : 1;
} changes;
unsigned int visible : 1; // client is set to be visible by display server (never use this)
unsigned int hidden : 1; // set when window has been hidden by api and should not be shown
unsigned int moving : 1;
unsigned int focused : 1;
unsigned int new_client : 1;
unsigned int re_manage : 1; // client is persisting from before E restart
unsigned int placed : 1;
unsigned int shading : 1;
unsigned int shaded : 1;
unsigned int iconic : 1;
unsigned int deskshow : 1;
unsigned int sticky : 1;
unsigned int urgent : 1;
unsigned int shaped_input : 1;
unsigned int need_shape_merge : 1;
unsigned int need_shape_export : 1;
unsigned int fullscreen : 1;
unsigned int need_fullscreen : 1;
unsigned int already_unparented : 1;
unsigned int need_reparent : 1;
unsigned int button_grabbed : 1;
unsigned int delete_requested : 1;
unsigned int ping_ok : 1;
unsigned int hung : 1;
unsigned int take_focus : 1;
unsigned int want_focus : 1;
unsigned int user_skip_winlist : 1;
E_Maximize maximized;
E_Fullscreen fullscreen_policy;
unsigned int borderless : 1;
unsigned char offer_resistance : 1;
Eina_Stringshare *bordername;
unsigned int lock_user_location : 1; /*DONE*/
unsigned int lock_client_location : 1; /*DONE*/
unsigned int lock_user_size : 1; /*DONE*/
unsigned int lock_client_size : 1; /*DONE*/
unsigned int lock_user_stacking : 1; /*DONE*/
unsigned int lock_client_stacking : 1; /*DONE*/
unsigned int lock_user_iconify : 1; /*DONE*/
unsigned int lock_client_iconify : 1; /*DONE*/
unsigned int lock_user_desk : 1;
unsigned int lock_client_desk : 1;
unsigned int lock_user_sticky : 1; /*DONE*/
unsigned int lock_client_sticky : 1; /*DONE*/
unsigned int lock_user_shade : 1; /*DONE*/
unsigned int lock_client_shade : 1; /*DONE*/
unsigned int lock_user_maximize : 1; /*DONE*/
unsigned int lock_client_maximize : 1; /*DONE*/
unsigned int lock_user_fullscreen : 1; /*DONE*/
unsigned int lock_client_fullscreen : 1; /*DONE*/
unsigned int lock_border : 1; /*DONE*/
unsigned int lock_close : 1; /*DONE*/
unsigned int lock_focus_in : 1; /*DONE*/
unsigned int lock_focus_out : 1; /*DONE*/
unsigned int lock_life : 1; /*DONE*/
unsigned int stolen : 1;
unsigned int internal : 1;
unsigned int internal_no_remember : 1;
unsigned int internal_no_reopen : 1;
Evas_Object *internal_elm_win;
double ping;
unsigned char changed : 1;
unsigned char icon_preference;
struct
{
int x, y;
int modified;
} shelf_fix;
Eina_List *stick_desks;
E_Menu *border_menu;
Evas_Object *color_editor;
E_Config_Dialog *border_locks_dialog;
E_Config_Dialog *border_remember_dialog;
E_Config_Dialog *border_border_dialog;
E_Dialog *border_prop_dialog;
Eina_List *pending_resize;
struct
{
unsigned char start : 1;
int x, y;
} drag;
Ecore_Timer *raise_timer;
E_Client_Move_Intercept_Cb move_intercept_cb;
E_Remember *remember;
Efreet_Desktop *desktop;
E_Exec_Instance *exe_inst;
unsigned char comp_hidden : 1;
unsigned char post_move : 1;
unsigned char post_resize : 1;
unsigned char post_show : 1;
unsigned char during_lost : 1;
Ecore_Idle_Enterer *post_job;
E_Focus_Policy focus_policy_override;
Eina_Bool override : 1;
Eina_Bool input_only : 1;
Eina_Bool dialog : 1;
Eina_Bool tooltip : 1;
Eina_Bool redirected : 1;
Eina_Bool unredirected_single : 1; //window has been selectively unredirected
Eina_Bool shape_changed : 1;
Eina_Bool layer_block : 1; // client is doing crazy stuff and should not be relayered in protocol
Eina_Bool ignored : 1; // client is comp-ignored
Eina_Bool no_shape_cut : 1; // client shape should not be cut
Eina_Bool maximize_override : 1; // client is doing crazy stuff and should "just do it" when moving/resizing
Eina_Bool keyboard_resizing : 1;
Eina_Bool on_post_updates : 1; // client is on the post update list
#ifdef HAVE_WAYLAND
uuid_t uuid;
#endif
};
#define e_client_focus_policy_click(ec) \
((ec->focus_policy_override == E_FOCUS_CLICK) || (e_config->focus_policy == E_FOCUS_CLICK))
/* macro for finding misuse of changed flag */
#if 0
# define EC_CHANGED(EC) \
do { \
if (e_object_is_del(E_OBJECT(EC))) \
EINA_LOG_CRIT("CHANGED SET ON DELETED CLIENT!"); \
EC->changed = 1; \
INF("%s:%d - EC CHANGED: %p", __FILE__, __LINE__, EC); \
} while (0)
#else
# define EC_CHANGED(EC) EC->changed = 1
#endif
#define E_CLIENT_FOREACH(EC) \
for (EC = e_client_bottom_get(); EC; EC = e_client_above_get(EC))
#define E_CLIENT_REVERSE_FOREACH(EC) \
for (EC = e_client_top_get(); EC; EC = e_client_below_get(EC))
E_API extern int E_EVENT_CLIENT_ADD;
E_API extern int E_EVENT_CLIENT_REMOVE;
E_API extern int E_EVENT_CLIENT_ZONE_SET;
E_API extern int E_EVENT_CLIENT_DESK_SET;
E_API extern int E_EVENT_CLIENT_RESIZE;
E_API extern int E_EVENT_CLIENT_MOVE;
E_API extern int E_EVENT_CLIENT_SHOW;
E_API extern int E_EVENT_CLIENT_HIDE;
E_API extern int E_EVENT_CLIENT_ICONIFY;
E_API extern int E_EVENT_CLIENT_UNICONIFY;
E_API extern int E_EVENT_CLIENT_STACK;
E_API extern int E_EVENT_CLIENT_FOCUS_IN;
E_API extern int E_EVENT_CLIENT_FOCUS_OUT;
E_API extern int E_EVENT_CLIENT_PROPERTY;
E_API extern int E_EVENT_CLIENT_FULLSCREEN;
E_API extern int E_EVENT_CLIENT_UNFULLSCREEN;
EINTERN void e_client_idler_before(void);
EINTERN Eina_Bool e_client_init(void);
EINTERN void e_client_shutdown(void);
E_API E_Client *e_client_new(E_Pixmap *cp, int first_map, int internal);
E_API void e_client_unignore(E_Client *ec);
E_API void e_client_desk_set(E_Client *ec, E_Desk *desk);
E_API Eina_Bool e_client_comp_grabbed_get(void);
E_API E_Client *e_client_action_get(void);
E_API E_Client *e_client_warping_get(void);
E_API Eina_List *e_clients_immortal_list(void);
E_API void e_client_mouse_in(E_Client *ec, int x, int y);
E_API void e_client_mouse_out(E_Client *ec, int x, int y);
E_API void e_client_mouse_wheel(E_Client *ec, Evas_Point *output, E_Binding_Event_Wheel *ev);
E_API void e_client_mouse_down(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev);
E_API void e_client_mouse_up(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button* ev);
E_API void e_client_mouse_move(E_Client *ec, Evas_Point *output);
E_API void e_client_res_change_geometry_save(E_Client *bd);
E_API void e_client_res_change_geometry_restore(E_Client *ec);
E_API void e_client_zone_set(E_Client *ec, E_Zone *zone);
E_API void e_client_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h);
E_API E_Client *e_client_above_get(const E_Client *ec);
E_API E_Client *e_client_below_get(const E_Client *ec);
E_API E_Client *e_client_bottom_get(void);
E_API E_Client *e_client_top_get(void);
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 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);
E_API void e_client_focus_track_freeze(void);
E_API void e_client_focus_track_thaw(void);
E_API void e_client_refocus(void);
E_API void e_client_focus_set_with_pointer(E_Client *ec);
E_API void e_client_activate(E_Client *ec, Eina_Bool just_do_it);
E_API E_Client *e_client_focused_get(void);
E_API Eina_List *e_client_focus_stack_get(void);
E_API Eina_List *e_client_raise_stack_get(void);
E_API Eina_List *e_client_lost_windows_get(E_Zone *zone);
E_API void e_client_shade(E_Client *ec, E_Direction dir);
E_API void e_client_unshade(E_Client *ec, E_Direction dir);
E_API Eina_Bool e_client_maximize_geometry_get(const E_Client *ec, E_Maximize max, int *mx, int *my, int *mw, int *mh);
E_API void e_client_maximize(E_Client *ec, E_Maximize max);
E_API Eina_Bool e_client_unmaximize_geometry_get(const E_Client *ec, E_Maximize max, int *mx, int *my, int *mw, int *mh);
E_API void e_client_unmaximize(E_Client *ec, E_Maximize max);
E_API void e_client_fullscreen(E_Client *ec, E_Fullscreen policy);
E_API void e_client_unfullscreen(E_Client *ec);
E_API void e_client_iconify(E_Client *ec);
E_API void e_client_uniconify(E_Client *ec);
E_API void e_client_urgent_set(E_Client *ec, Eina_Bool urgent);
E_API void e_client_stick(E_Client *ec);
E_API void e_client_unstick(E_Client *ec);
E_API void e_client_pinned_set(E_Client *ec, Eina_Bool set);
E_API void e_client_comp_hidden_set(E_Client *ec, Eina_Bool hidden);
E_API Eina_Bool e_client_border_set(E_Client *ec, const char *name);
E_API void e_client_act_move_keyboard(E_Client *ec);
E_API void e_client_act_resize_keyboard(E_Client *ec);
E_API void e_client_act_move_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev);
E_API void e_client_act_move_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
E_API void e_client_act_resize_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev);
E_API void e_client_act_resize_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
E_API void e_client_act_menu_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev, int key);
E_API void e_client_act_close_begin(E_Client *ec);
E_API void e_client_act_kill_begin(E_Client *ec);
E_API Evas_Object *e_client_icon_add(E_Client *ec, Evas *evas);
E_API void e_client_ping(E_Client *cw);
E_API void e_client_move_cancel(void);
E_API void e_client_resize_cancel(void);
E_API Eina_Bool e_client_resize_begin(E_Client *ec);
E_API void e_client_frame_recalc(E_Client *ec);
E_API void e_client_signal_move_begin(E_Client *ec, const char *sig, const char *src EINA_UNUSED);
E_API void e_client_signal_move_end(E_Client *ec, const char *sig EINA_UNUSED, const char *src EINA_UNUSED);
E_API void e_client_signal_resize_begin(E_Client *ec, const char *dir, const char *sig, const char *src EINA_UNUSED);
E_API void e_client_signal_resize_end(E_Client *ec, const char *dir EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED);
E_API void e_client_resize_limit(const E_Client *ec, int *w, int *h);
E_API E_Client *e_client_under_pointer_get(E_Desk *desk, E_Client *exclude);
E_API int e_client_pointer_warp_to_center_now(E_Client *ec);
E_API int e_client_pointer_warp_to_center(E_Client *ec);
E_API void e_client_redirected_set(E_Client *ec, Eina_Bool set);
E_API Eina_Bool e_client_is_stacking(const E_Client *ec);
E_API Eina_Bool e_client_has_xwindow(const E_Client *ec);
E_API Eina_Bool e_client_desk_window_profile_available_check(E_Client *ec, const char *profile);
E_API void e_client_desk_window_profile_wait_desk_set(E_Client *ec, E_Desk *desk);
E_API void e_client_layout_cb_set(E_Client_Layout_Cb cb);
YOLO E_API void e_client_focus_stack_set(Eina_List *l);
#include "e_client.x"
#endif