871 lines
26 KiB
C
871 lines
26 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;
|
|
|
|
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 : 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
|
|
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 : 1;
|
|
} 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 : 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;
|
|
Eina_Bool frame : 1;
|
|
Eina_Bool set : 1;
|
|
} 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;
|
|
#ifndef HAVE_WAYLAND_ONLY
|
|
Ecore_X_Icon *icons;
|
|
#endif
|
|
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;
|
|
#ifndef HAVE_WAYLAND_ONLY
|
|
Ecore_X_Stack_Type stack;
|
|
#endif
|
|
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;
|
|
unsigned char stack : 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;
|
|
E_Remember *sr_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_Stringshare *uuid;
|
|
|
|
Eina_List *sinks;
|
|
int volume;
|
|
int volume_min;
|
|
int volume_max;
|
|
unsigned char mute : 1;
|
|
unsigned char volume_control_enabled : 1;
|
|
|
|
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 maximize_anims_disabled : 1; // client cannot invoke anims or it will break
|
|
Eina_Bool keyboard_resizing : 1;
|
|
|
|
Eina_Bool on_post_updates : 1; // 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_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);
|
|
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
|