enlightenment/src/bin/e_border.h

633 lines
18 KiB
C
Raw Normal View History

2005-02-07 05:51:09 -08:00
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
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
{
2005-02-07 05:51:09 -08:00
E_DIRECTION_UP,
E_DIRECTION_DOWN,
E_DIRECTION_LEFT,
E_DIRECTION_RIGHT
} E_Direction;
typedef enum _E_Transition
{
2005-02-07 05:51:09 -08:00
E_TRANSITION_LINEAR,
E_TRANSITION_SINUSOIDAL,
E_TRANSITION_ACCELERATE,
E_TRANSITION_DECELERATE
} E_Transition;
typedef enum _E_Stacking
{
E_STACKING_NONE,
E_STACKING_ABOVE,
E_STACKING_BELOW
} E_Stacking;
typedef enum _E_Focus_Policy
{
2005-05-20 11:46:32 -07:00
E_FOCUS_CLICK,
E_FOCUS_MOUSE,
E_FOCUS_SLOPPY
} E_Focus_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_DIRECTION = 0x000000f0
} E_Maximize;
typedef enum _E_Fullscreen
{
/* Resize window */
E_FULLSCREEN_RESIZE,
/* Change screen resoultion and resize window */
E_FULLSCREEN_ZOOM
} E_Fullscreen;
typedef enum _E_Window_Placement
{
E_WINDOW_PLACEMENT_SMART,
E_WINDOW_PLACEMENT_ANTIGADGET,
2005-09-22 10:10:02 -07:00
E_WINDOW_PLACEMENT_CURSOR,
E_WINDOW_PLACEMENT_MANUAL
} E_Window_Placement;
typedef enum _E_Border_Hook_Point
{
E_BORDER_HOOK_EVAL_POST_FETCH
} E_Border_Hook_Point;
typedef struct _E_Border E_Border;
typedef struct _E_Border_Pending_Move_Resize E_Border_Pending_Move_Resize;
typedef struct _E_Border_Hook E_Border_Hook;
2007-11-11 03:48:40 -08:00
typedef struct _E_Event_Border_Simple E_Event_Border_Resize;
typedef struct _E_Event_Border_Simple E_Event_Border_Move;
typedef struct _E_Event_Border_Simple E_Event_Border_Add;
typedef struct _E_Event_Border_Simple E_Event_Border_Remove;
typedef struct _E_Event_Border_Simple E_Event_Border_Show;
typedef struct _E_Event_Border_Simple E_Event_Border_Hide;
typedef struct _E_Event_Border_Simple E_Event_Border_Iconify;
typedef struct _E_Event_Border_Simple E_Event_Border_Uniconify;
typedef struct _E_Event_Border_Simple E_Event_Border_Stick;
typedef struct _E_Event_Border_Simple E_Event_Border_Unstick;
typedef struct _E_Event_Border_Zone_Set E_Event_Border_Zone_Set;
typedef struct _E_Event_Border_Desk_Set E_Event_Border_Desk_Set;
typedef struct _E_Event_Border_Stack E_Event_Border_Stack;
2007-11-11 03:48:40 -08:00
typedef struct _E_Event_Border_Simple E_Event_Border_Icon_Change;
typedef struct _E_Event_Border_Simple E_Event_Border_Urgent_Change;
typedef struct _E_Event_Border_Simple E_Event_Border_Focus_In;
typedef struct _E_Event_Border_Simple E_Event_Border_Focus_Out;
typedef struct _E_Event_Border_Simple E_Event_Border_Property;
#else
#ifndef E_BORDER_H
#define E_BORDER_H
#define E_BORDER_TYPE 0xE0b01002
struct _E_Border
{
E_Object e_obj_inherit;
struct {
2006-06-19 10:13:56 -07:00
struct {
int x, y, w, h;
int mx, my;
} current, last_down[3], last_up[3];
} mouse;
2006-06-19 10:13:56 -07:00
struct {
2006-06-19 10:13:56 -07:00
struct {
int x, y, w, h;
int mx, my;
int button;
} down;
} moveinfo;
2005-02-07 05:51:09 -08:00
Ecore_X_Window win;
int x, y, w, h;
int ref;
E_Zone *zone;
E_Desk *desk;
Evas_List *handlers;
2005-02-07 05:51:09 -08:00
struct {
int x, y;
struct {
int x, y;
double t;
} start;
} fx;
struct {
int l, r, t, b;
} client_inset;
2005-02-07 05:51:09 -08:00
Ecore_Evas *bg_ecore_evas;
Evas *bg_evas;
Ecore_X_Window bg_win;
Ecore_X_Window bg_subwin;
Evas_Object *bg_object;
Evas_Object *icon_object;
Ecore_X_Window event_win;
const char *internal_icon;
const char *internal_icon_key;
struct {
Ecore_X_Window shell_win;
Ecore_X_Window win;
int x, y, w, h;
struct {
unsigned char changed : 1;
unsigned char user_selected : 1;
const char *name;
} border;
unsigned char shaped : 1;
unsigned char argb : 1;
/* ICCCM */
struct {
char *title;
char *name;
char *class;
char *icon_name;
char *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_X_Window_State_Hint initial_state;
Ecore_X_Window_State_Hint state;
Ecore_X_Pixmap icon_pixmap;
Ecore_X_Pixmap icon_mask;
Ecore_X_Window icon_window;
Ecore_X_Window window_group;
Ecore_X_Window transient_for;
Ecore_X_Window client_leader;
Ecore_X_Gravity gravity;
char *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 {
Ecore_X_MWM_Hint_Func func;
Ecore_X_MWM_Hint_Decor decor;
Ecore_X_MWM_Hint_Input input;
unsigned char exists : 1;
unsigned char borderless : 1;
struct {
unsigned char hints : 1;
} fetch;
} mwm;
/* NetWM */
struct {
pid_t pid;
unsigned int desktop;
char *name;
char *icon_name;
Ecore_X_Icon *icons;
int num_icons;
unsigned int user_time;
2005-06-03 05:23:34 -07:00
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;
2005-06-03 05:23:34 -07:00
} strut;
unsigned char ping : 1;
2005-06-06 08:22:05 -07:00
struct {
2005-06-27 21:00:17 -07:00
unsigned char request : 1;
unsigned int wait;
Ecore_X_Sync_Alarm alarm;
Ecore_X_Sync_Counter counter;
unsigned int serial;
2005-06-27 23:49:37 -07:00
double send_time;
2005-06-06 08:22:05 -07:00
} sync;
2005-05-16 08:43:15 -07:00
/* NetWM Window state */
struct {
unsigned char modal : 1;
unsigned char sticky : 1;
unsigned char maximized_v : 1;
unsigned char maximized_h : 1;
2005-06-09 21:19:46 -07:00
unsigned char shaded : 1;
unsigned char skip_taskbar : 1;
unsigned char skip_pager : 1;
2005-06-09 21:19:46 -07:00
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;
Ecore_X_Window_Type type;
int startup_id;
struct {
unsigned char name : 1;
unsigned char icon_name : 1;
unsigned char icon : 1;
2005-06-03 05:23:34 -07:00
unsigned char user_time : 1;
unsigned char strut : 1;
unsigned char type : 1;
unsigned char state : 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 {
unsigned char centered : 1;
} state;
struct {
unsigned char state : 1;
} fetch;
} e;
Ecore_X_Window_Attributes initial_attributes;
} client;
E_Container_Shape *shape;
unsigned int visible : 1;
unsigned int await_hide_event;
unsigned int moving : 1;
unsigned int focused : 1;
unsigned int new_client : 1;
unsigned int re_manage : 1;
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 shaped : 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;
2005-07-09 07:55:40 -07:00
unsigned int user_skip_winlist : 1;
unsigned int need_maximize : 1;
E_Maximize maximized;
unsigned int borderless : 1;
const char *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 internal : 1;
Ecore_Evas *internal_ecore_evas;
double ping;
unsigned char changed : 1;
unsigned char icon_preference;
unsigned char ignore_first_unmap;
unsigned char resize_mode;
struct {
int x, y, w, h;
unsigned int layer;
int zone;
} saved;
struct {
unsigned char valid : 1;
int x, y, w, h;
struct {
int x, y, w, h;
} saved;
} pre_res_change;
struct {
double start;
double val;
int x, y;
E_Direction dir;
Ecore_Animator *anim;
} shade;
struct {
int x, y;
int modified;
} shelf_fix;
Evas_List *stick_desks;
E_Menu *border_menu;
E_Config_Dialog *border_locks_dialog;
E_Config_Dialog *border_remember_dialog;
E_Config_Dialog *border_border_dialog;
E_Dialog *border_prop_dialog;
2005-07-12 19:59:31 -07:00
E_Menu *border_stacking_menu;
E_Menu *border_maximize_menu;
Evas_List *pending_move_resize;
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 icon : 1;
} changes;
struct {
unsigned char start : 1;
int x, y;
} drag;
unsigned int layer;
E_Action *cur_mouse_action;
Ecore_Timer *raise_timer;
e: 1. configure/build changes to allow cross-compiling painlessly 2. pager module namespace changes - this was still dirty afdter the namespace cleanup, so clean it up 3. add a powersave subsystem - doesnt have an "automatic" way to turn on and off right now, this i think is best provided by modules (that do things like monitor acpi status's (eg close lid of laptop), AC power status etc. etc. this allows e to nicely defer "power" expensive actions to avoid disk spinups etc. 4. move to use the new ecore poller system - discussed long ago as part of power management/saving issues. now it exists 5. add a canvas idle flush call that helsp cope with the new shm greedy software x11 engine stuff 6. use the new powersave subsystem where appropriate 7. fix non-zeroed/initted memory access in e_fm_main 8. fix mem leak for e menus 9. remove ipc handlers for changed/removed config values 10. use animaotr not timer for menu scrolls - then menu scrolls obey the fps config 11. fix up timer/poll happienss of cursor idle stuff 12. remove avoid damage from popups for now - causing problems 13. change battery and temp readouts to b e shorter so they fit 14. pager can emit signals on focus change for mini-windows now 15. temperature module now uses a slave process and uses stdin/out to talk to it and get output - this makes e smoother as in my expereicne i found getting the temp on my laptop actually took like 200ms so e "hang" for 200ms while reading the acpi files - so now the subprocess does it and just writesa back to e when it gets it. ecore: 1. add ecore_pollers. see the documentation on them in doxygen comments :) 2. fix timers to only go off when they have to - bug there that made e's select time out a LOT more than it needed to. defensive coding hid the problem. now fixed. e should be much more power friendly now. 3. formatting/niceness in ecore_exe stuff 4. some comments on comments with SIGIO ideas vs. select 5. add call to be able to add an idle enterer at the start of the list of them, not just the end (as has been the default) 6. fix ecore_evas to support auto evas idler calls after 0.5 secs of idle in all canvases - and to do it right 7. if argb destination - set the shape EVENT shape (to mask out events in transparent regions much like shape does withotu translucency) 8. in ecore_x add support for the event shape evas: 1. fix cache to work properly and not just always fill up (as it seemed to like to think cahce useage dropped below 0 when it didnt and thus just over-fill) 2. software x11 engine now ONLY uses shm segments - no ximages over the socket. this ximage hack was there to avoid the 2 round trips involved in setting up an shm image - now i mitigated that wih an shm image cache pool. it keeps shm images around and repurposes them for new update regions if appropriate. this means many fewer shm creates (about 1/100th the number) and since we recycle the memory less 0 memory page filling by the kernel - in the end, i recorded about a 10-20% speedup over the old software x11 engine. simple tests i have seen up to 120% speedups. idle flush now does something - it frees all the cached shm segments. it has a hard-coded limit of 4mb worth of shm segments (or 32 segments - whichever comes first) to keep around. once can never complain much about speedups methinks :). also evas will defer sync until the NEXT frame is written - this means evas can calculate the next frame of data while x dma's/copies the images to the screen at the same time (if you hve a dual core or multi-cpu machnike or your xserver is able to use DMA to copy image data to the screen/video ram then this should see a decent speedup). SVN revision: 33448
2008-01-10 23:33:57 -08:00
Ecore_Timer *ping_poller;
Ecore_Timer *kill_timer;
int shape_rects_num;
Ecore_X_Rectangle *shape_rects;
E_Remember *remember;
E_Border *modal;
E_Border *leader;
Evas_List *group;
E_Border *parent;
Evas_List *transients;
Efreet_Desktop *desktop;
E_Pointer *pointer;
unsigned char post_move : 1;
unsigned char post_resize : 1;
unsigned char post_show : 1;
Ecore_Idle_Enterer *post_job;
};
struct _E_Border_Pending_Move_Resize
{
int x, y, w, h;
unsigned char move : 1;
unsigned char resize : 1;
};
struct _E_Border_Hook
{
E_Border_Hook_Point hookpoint;
void (*func) (void *data, E_Border *bd);
void *data;
unsigned char delete_me : 1;
};
2007-11-11 03:48:40 -08:00
struct _E_Event_Border_Simple
2005-02-10 07:21:23 -08:00
{
E_Border *border;
};
struct _E_Event_Border_Zone_Set
{
E_Border *border;
E_Zone *zone;
};
struct _E_Event_Border_Desk_Set
{
E_Border *border;
E_Desk *desk;
};
struct _E_Event_Border_Stack
{
E_Border *border, *stack;
E_Stacking type;
};
EAPI int e_border_init(void);
EAPI int e_border_shutdown(void);
EAPI E_Border *e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal);
EAPI void e_border_free(E_Border *bd);
EAPI void e_border_ref(E_Border *bd);
EAPI void e_border_unref(E_Border *bd);
EAPI void e_border_res_change_geometry_save(E_Border *bd);
EAPI void e_border_res_change_geometry_restore(E_Border *bd);
EAPI void e_border_zone_set(E_Border *bd, E_Zone *zone);
EAPI void e_border_desk_set(E_Border *bd, E_Desk *desk);
EAPI void e_border_show(E_Border *bd);
EAPI void e_border_hide(E_Border *bd, int manage);
EAPI void e_border_move(E_Border *bd, int x, int y);
EAPI void e_border_fx_offset(E_Border *bd, int x, int y);
EAPI void e_border_resize(E_Border *bd, int w, int h);
EAPI void e_border_move_resize(E_Border *bd, int x, int y, int w, int h);
EAPI void e_border_layer_set(E_Border *bd, int layer);
EAPI void e_border_raise(E_Border *bd);
EAPI void e_border_lower(E_Border *bd);
EAPI void e_border_stack_above(E_Border *bd, E_Border *above);
EAPI void e_border_stack_below(E_Border *bd, E_Border *below);
EAPI void e_border_focus_latest_set(E_Border *bd);
EAPI void e_border_raise_latest_set(E_Border *bd);
EAPI void e_border_focus_set_with_pointer(E_Border *bd);
EAPI void e_border_focus_set(E_Border *bd, int focus, int set);
EAPI void e_border_shade(E_Border *bd, E_Direction dir);
EAPI void e_border_unshade(E_Border *bd, E_Direction dir);
EAPI void e_border_maximize(E_Border *bd, E_Maximize max);
EAPI void e_border_unmaximize(E_Border *bd, E_Maximize max);
EAPI void e_border_fullscreen(E_Border *bd, E_Fullscreen policy);
EAPI void e_border_unfullscreen(E_Border *bd);
EAPI void e_border_iconify(E_Border *bd);
EAPI void e_border_uniconify(E_Border *bd);
EAPI void e_border_stick(E_Border *bd);
EAPI void e_border_unstick(E_Border *bd);
EAPI void e_border_pinned_set(E_Border *bd, int set);
EAPI E_Border *e_border_find_by_client_window(Ecore_X_Window win);
EAPI E_Border *e_border_find_by_frame_window(Ecore_X_Window win);
EAPI E_Border *e_border_find_by_window(Ecore_X_Window win);
2005-06-06 08:22:05 -07:00
EAPI E_Border *e_border_find_by_alarm(Ecore_X_Sync_Alarm alarm);
EAPI E_Border *e_border_focused_get(void);
EAPI void e_border_idler_before(void);
EAPI Evas_List *e_border_client_list(void);
EAPI void e_border_act_move_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev);
EAPI void e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev);
EAPI void e_border_act_resize_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev);
EAPI void e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev);
EAPI void e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev, int key);
EAPI void e_border_act_close_begin(E_Border *bd);
EAPI void e_border_act_kill_begin(E_Border *bd);
EAPI Evas_Object *e_border_icon_add(E_Border *bd, Evas *evas);
EAPI void e_border_button_bindings_ungrab_all(void);
EAPI void e_border_button_bindings_grab_all(void);
EAPI Evas_List *e_border_focus_stack_get(void);
EAPI Evas_List *e_border_lost_windows_get(E_Zone *zone);
EAPI void e_border_ping(E_Border *bd);
2005-06-23 21:10:18 -07:00
EAPI void e_border_move_cancel(void);
EAPI void e_border_resize_cancel(void);
EAPI void e_border_frame_recalc(E_Border *bd);
2005-07-08 01:43:27 -07:00
EAPI Evas_List *e_border_immortal_windows_get(void);
2005-06-23 21:10:18 -07:00
EAPI const char *e_border_name_get(E_Border *bd);
EAPI void e_border_signal_move_begin(E_Border *bd, const char *sig, const char *src);
EAPI void e_border_signal_move_end(E_Border *bd, const char *sig, const char *src);
EAPI int e_border_resizing_get(E_Border *bd);
EAPI void e_border_signal_resize_begin(E_Border *bd, const char *dir, const char *sig, const char *src);
EAPI void e_border_signal_resize_end(E_Border *bd, const char *dir, const char *sig, const char *src);
EAPI void e_border_resize_limit(E_Border *bd, int *w, int *h);
EAPI E_Border_Hook *e_border_hook_add(E_Border_Hook_Point hookpoint, void (*func) (void *data, E_Border *bd), void *data);
EAPI void e_border_hook_del(E_Border_Hook *bh);
2007-08-04 21:41:55 -07:00
EAPI void e_border_focus_track_freeze(void);
EAPI void e_border_focus_track_thaw(void);
EAPI E_Border *e_border_under_pointer_get(E_Desk *desk, E_Border *exclude);
EAPI int e_border_pointer_warp_to_center(E_Border *bd);
extern EAPI int E_EVENT_BORDER_RESIZE;
extern EAPI int E_EVENT_BORDER_MOVE;
extern EAPI int E_EVENT_BORDER_ADD;
extern EAPI int E_EVENT_BORDER_SHOW;
extern EAPI int E_EVENT_BORDER_HIDE;
extern EAPI int E_EVENT_BORDER_REMOVE;
extern EAPI int E_EVENT_BORDER_ICONIFY;
extern EAPI int E_EVENT_BORDER_UNICONIFY;
2005-02-10 07:21:23 -08:00
extern EAPI int E_EVENT_BORDER_STICK;
extern EAPI int E_EVENT_BORDER_UNSTICK;
extern EAPI int E_EVENT_BORDER_ZONE_SET;
extern EAPI int E_EVENT_BORDER_DESK_SET;
extern EAPI int E_EVENT_BORDER_STACK;
extern EAPI int E_EVENT_BORDER_ICON_CHANGE;
extern EAPI int E_EVENT_BORDER_URGENT_CHANGE;
extern EAPI int E_EVENT_BORDER_FOCUS_IN;
extern EAPI int E_EVENT_BORDER_FOCUS_OUT;
extern EAPI int E_EVENT_BORDER_PROPERTY;
#endif
#endif