enlightenment/src/bin/e_client.h

880 lines
28 KiB
C

#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_MISC = (1 << 31),
} 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_UNIGNORE,
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 E_BITFIELD;
};
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
Evas_Object *agent; //resize agent;
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;
struct {
E_Client *next;
E_Client *prev;
int ignore;
Eina_Bool focus_skip E_BITFIELD;
} stack;
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 E_BITFIELD;
} 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 E_BITFIELD;
Eina_Bool iconic_shading E_BITFIELD;
} hacks;
struct
{
unsigned char changed E_BITFIELD;
unsigned char user_selected E_BITFIELD;
Eina_Stringshare *name;
} border;
struct
{
int x, y, w, h;
E_Layer layer;
int zone;
E_Maximize maximized;
Eina_Bool frame E_BITFIELD;
Eina_Bool set E_BITFIELD;
} saved;
struct
{
unsigned char valid E_BITFIELD;
int x, y, w, h;
struct
{
int x, y, w, h;
} saved;
} pre_res_change;
unsigned char shaped E_BITFIELD;
unsigned char argb E_BITFIELD;
/* 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 E_BITFIELD;
unsigned char accepts_focus E_BITFIELD;
unsigned char urgent E_BITFIELD;
unsigned char delete_request E_BITFIELD;
unsigned char request_pos E_BITFIELD;
struct
{
int argc;
char **argv;
} command;
struct
{
unsigned char title E_BITFIELD;
unsigned char name_class E_BITFIELD;
unsigned char icon_name E_BITFIELD;
unsigned char machine E_BITFIELD;
unsigned char hints E_BITFIELD;
unsigned char size_pos_hints E_BITFIELD;
unsigned char protocol E_BITFIELD;
unsigned char transient_for E_BITFIELD;
unsigned char client_leader E_BITFIELD;
unsigned char window_role E_BITFIELD;
unsigned char state E_BITFIELD;
unsigned char command E_BITFIELD;
} 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 E_BITFIELD;
unsigned char borderless E_BITFIELD;
struct
{
unsigned char hints E_BITFIELD;
} fetch;
} mwm;
/* NetWM */
struct
{
pid_t pid;
unsigned int desktop;
Eina_Stringshare *name;
Eina_Stringshare *icon_name;
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_Icon *icons;
#endif
int num_icons;
unsigned int user_time;
unsigned char opacity;
Eina_Bool opacity_changed E_BITFIELD; // 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 E_BITFIELD;
struct
{
unsigned char request E_BITFIELD;
unsigned char alarm E_BITFIELD;
unsigned int wait;
unsigned int serial;
double send_time;
} sync;
/* NetWM Window state */
struct
{
unsigned char modal E_BITFIELD;
unsigned char sticky E_BITFIELD;
unsigned char maximized_v E_BITFIELD;
unsigned char maximized_h E_BITFIELD;
unsigned char shaded E_BITFIELD;
unsigned char skip_taskbar E_BITFIELD;
unsigned char skip_pager E_BITFIELD;
unsigned char hidden E_BITFIELD;
unsigned char fullscreen E_BITFIELD;
E_Stacking stacking;
} state;
/* NetWM Window allowed actions */
struct
{
unsigned char move E_BITFIELD;
unsigned char resize E_BITFIELD;
unsigned char minimize E_BITFIELD;
unsigned char shade E_BITFIELD;
unsigned char stick E_BITFIELD;
unsigned char maximized_h E_BITFIELD;
unsigned char maximized_v E_BITFIELD;
unsigned char fullscreen E_BITFIELD;
unsigned char change_desktop E_BITFIELD;
unsigned char close E_BITFIELD;
} action;
E_Window_Type type;
E_Window_Type *extra_types;
int extra_types_num;
int startup_id;
struct
{
unsigned char name E_BITFIELD;
unsigned char icon_name E_BITFIELD;
unsigned char icon E_BITFIELD;
unsigned char user_time E_BITFIELD;
unsigned char strut E_BITFIELD;
unsigned char type E_BITFIELD;
unsigned char state E_BITFIELD;
unsigned char opacity E_BITFIELD;
/* No, fetch on new_client, shouldn't be changed after map.
unsigned char pid E_BITFIELD;
*/
/* No, ignore this
unsigned char desktop E_BITFIELD;
*/
} fetch;
struct
{
unsigned char state E_BITFIELD;
} update;
} netwm;
/* Extra e stuff */
struct
{
struct
{
struct
{
int x, y;
unsigned char updated E_BITFIELD;
} 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 E_BITFIELD;
unsigned char use E_BITFIELD;
} profile;
Eina_Bool stack E_BITFIELD;
unsigned char centered E_BITFIELD;
unsigned char video E_BITFIELD;
} state;
struct
{
unsigned char state E_BITFIELD;
unsigned char video_parent E_BITFIELD;
unsigned char video_position E_BITFIELD;
unsigned char profile E_BITFIELD;
unsigned char stack E_BITFIELD;
} fetch;
} e;
struct
{
struct
{
unsigned char soft_menu E_BITFIELD;
unsigned char soft_menus E_BITFIELD;
} fetch;
unsigned char soft_menu E_BITFIELD;
unsigned char soft_menus E_BITFIELD;
} qtopia;
struct
{
struct
{
unsigned char state E_BITFIELD;
unsigned char vkbd E_BITFIELD;
} fetch;
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_Virtual_Keyboard_State state;
#endif
unsigned char have_property E_BITFIELD;
unsigned char vkbd E_BITFIELD;
} vkbd;
struct {
unsigned int steam_game_id;
} steam;
struct
{
unsigned char visible E_BITFIELD;
unsigned char pos E_BITFIELD;
unsigned char size E_BITFIELD;
unsigned char stack E_BITFIELD;
unsigned char prop E_BITFIELD;
unsigned char border E_BITFIELD;
unsigned char reset_gravity E_BITFIELD;
unsigned char shading E_BITFIELD;
unsigned char shaded E_BITFIELD;
unsigned char shape E_BITFIELD;
unsigned char shape_input E_BITFIELD;
unsigned char icon E_BITFIELD;
Eina_Bool internal_state E_BITFIELD;
Eina_Bool need_maximize E_BITFIELD;
Eina_Bool need_unmaximize E_BITFIELD;
Eina_Bool need_rescale E_BITFIELD;
} changes;
unsigned int visible E_BITFIELD; // client is set to be visible by display server (never use this)
unsigned int hidden E_BITFIELD; // set when window has been hidden by api and should not be shown
unsigned int moving E_BITFIELD;
unsigned int focused E_BITFIELD;
unsigned int new_client E_BITFIELD;
unsigned int re_manage E_BITFIELD; // client is persisting from before E restart
unsigned int placed E_BITFIELD;
unsigned int shading E_BITFIELD;
unsigned int shaded E_BITFIELD;
unsigned int iconic E_BITFIELD;
unsigned int deskshow E_BITFIELD;
unsigned int sticky E_BITFIELD;
unsigned int urgent E_BITFIELD;
unsigned int shaped_input E_BITFIELD;
unsigned int need_shape_merge E_BITFIELD;
unsigned int need_shape_export E_BITFIELD;
unsigned int fullscreen E_BITFIELD;
unsigned int need_fullscreen E_BITFIELD;
unsigned int already_unparented E_BITFIELD;
unsigned int need_reparent E_BITFIELD;
unsigned int button_grabbed E_BITFIELD;
unsigned int delete_requested E_BITFIELD;
unsigned int ping_ok E_BITFIELD;
unsigned int hung E_BITFIELD;
unsigned int take_focus E_BITFIELD;
unsigned int want_focus E_BITFIELD;
unsigned int user_skip_winlist E_BITFIELD;
E_Maximize maximized;
E_Fullscreen fullscreen_policy;
unsigned int borderless E_BITFIELD;
unsigned char offer_resistance E_BITFIELD;
Eina_Stringshare *bordername;
unsigned int lock_user_location E_BITFIELD; /*DONE*/
unsigned int lock_client_location E_BITFIELD; /*DONE*/
unsigned int lock_user_size E_BITFIELD; /*DONE*/
unsigned int lock_client_size E_BITFIELD; /*DONE*/
unsigned int lock_user_stacking E_BITFIELD; /*DONE*/
unsigned int lock_client_stacking E_BITFIELD; /*DONE*/
unsigned int lock_user_iconify E_BITFIELD; /*DONE*/
unsigned int lock_client_iconify E_BITFIELD; /*DONE*/
unsigned int lock_user_desk E_BITFIELD;
unsigned int lock_client_desk E_BITFIELD;
unsigned int lock_user_sticky E_BITFIELD; /*DONE*/
unsigned int lock_client_sticky E_BITFIELD; /*DONE*/
unsigned int lock_user_shade E_BITFIELD; /*DONE*/
unsigned int lock_client_shade E_BITFIELD; /*DONE*/
unsigned int lock_user_maximize E_BITFIELD; /*DONE*/
unsigned int lock_client_maximize E_BITFIELD; /*DONE*/
unsigned int lock_user_fullscreen E_BITFIELD; /*DONE*/
unsigned int lock_client_fullscreen E_BITFIELD; /*DONE*/
unsigned int lock_border E_BITFIELD; /*DONE*/
unsigned int lock_close E_BITFIELD; /*DONE*/
unsigned int lock_focus_in E_BITFIELD; /*DONE*/
unsigned int lock_focus_out E_BITFIELD; /*DONE*/
unsigned int lock_life E_BITFIELD; /*DONE*/
unsigned int stolen E_BITFIELD;
unsigned int internal E_BITFIELD;
unsigned int internal_no_remember E_BITFIELD;
unsigned int internal_no_reopen E_BITFIELD;
unsigned int next_mouse_action_ignore E_BITFIELD;
Evas_Object *internal_elm_win;
double ping;
unsigned char changed E_BITFIELD;
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 E_BITFIELD;
int x, y;
} drag;
Ecore_Timer *raise_timer;
E_Client_Move_Intercept_Cb move_intercept_cb;
E_Remember *remember;
E_Remember *sr_remember;
Efreet_Desktop *desktop;
E_Exec_Instance *exe_inst;
unsigned char comp_hidden E_BITFIELD;
unsigned char post_move E_BITFIELD;
unsigned char post_resize E_BITFIELD;
unsigned char post_show E_BITFIELD;
unsigned char during_lost E_BITFIELD;
Ecore_Idle_Enterer *post_job;
E_Focus_Policy focus_policy_override;
Eina_Stringshare *uuid;
Eina_List *sinks;
int volume;
int volume_min;
int volume_max;
unsigned char mute E_BITFIELD;
unsigned char volume_control_enabled E_BITFIELD;
Eina_Bool override E_BITFIELD;
Eina_Bool input_only E_BITFIELD;
Eina_Bool dialog E_BITFIELD;
Eina_Bool tooltip E_BITFIELD;
Eina_Bool redirected E_BITFIELD;
Eina_Bool unredirected_single E_BITFIELD; //window has been selectively unredirected
Eina_Bool shape_changed E_BITFIELD;
Eina_Bool layer_block E_BITFIELD; // client is doing crazy stuff and should not be relayered in protocol
Eina_Bool ignored E_BITFIELD; // client is comp-ignored
Eina_Bool no_shape_cut E_BITFIELD; // client shape should not be cut
Eina_Bool maximize_override E_BITFIELD; // client is doing crazy stuff and should "just do it" when moving/resizing
Eina_Bool maximize_anims_disabled E_BITFIELD; // client cannot invoke anims or it will break
Eina_Bool keyboard_resizing E_BITFIELD;
Eina_Bool on_post_updates E_BITFIELD; // client is on the post update list
};
#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_rescale(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_prop_misc_changed(E_Client *ec);
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 void e_client_next_mouse_action_ignore(E_Client *ec);
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);
E_API Eina_List *e_client_stack_list_prepare(E_Client *ec);
E_API void e_client_stack_list_finish(Eina_List *list);
E_API E_Client *e_client_stack_top_get(E_Client *ec);
E_API E_Client *e_client_stack_bottom_get(E_Client *ec);
E_API E_Client *e_client_stack_active_adjust(E_Client *ec);
E_API Eina_Bool e_client_stack_focused_get(E_Client *ec);
E_API Eina_Bool e_client_stack_iconified_get(E_Client *ec);
E_API Eina_Bool e_client_stack_urgent_get(E_Client *ec);
YOLO E_API void e_client_focus_stack_set(Eina_List *l);
E_API void e_client_parent_set(E_Client *ec, E_Client *parent);
E_API void e_client_transients_restack(E_Client *ec);
#include "e_client.x"
#endif