Merge with e17 devel
[platform/core/uifw/e17.git] / src / bin / e_border.h
1 #ifdef E_TYPEDEFS
2
3 typedef enum _E_Icon_Preference
4 {
5    E_ICON_PREF_E_DEFAULT,
6    E_ICON_PREF_NETWM,
7    E_ICON_PREF_USER
8 } E_Icon_Preference;
9
10 typedef enum _E_Direction
11 {
12    E_DIRECTION_UP,
13    E_DIRECTION_DOWN,
14    E_DIRECTION_LEFT,
15    E_DIRECTION_RIGHT
16 } E_Direction;
17
18 typedef enum _E_Transition
19 {
20    E_TRANSITION_LINEAR = 0,
21    E_TRANSITION_SINUSOIDAL = 1,
22    E_TRANSITION_ACCELERATE = 2,
23    E_TRANSITION_DECELERATE = 3,
24    E_TRANSITION_ACCELERATE_LOTS = 4,
25    E_TRANSITION_DECELERATE_LOTS = 5,
26    E_TRANSITION_SINUSOIDAL_LOTS = 6,
27    E_TRANSITION_BOUNCE = 7,
28    E_TRANSITION_BOUNCE_LOTS = 8
29 } E_Transition;
30
31 typedef enum _E_Stacking
32 {
33    E_STACKING_NONE,
34    E_STACKING_ABOVE,
35    E_STACKING_BELOW
36 } E_Stacking;
37
38 typedef enum _E_Focus_Policy
39 {
40    E_FOCUS_CLICK,
41    E_FOCUS_MOUSE,
42    E_FOCUS_SLOPPY
43 } E_Focus_Policy;
44
45 typedef enum _E_Focus_Setting
46 {
47    E_FOCUS_NONE,
48    E_FOCUS_NEW_WINDOW,
49    E_FOCUS_NEW_DIALOG,
50    E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED,
51 #ifdef _F_FOCUS_WINDOW_IF_TOP_STACK_
52    E_FOCUS_NEW_WINDOW_IF_TOP_STACK
53 #endif   
54 } E_Focus_Setting;
55
56 typedef enum _E_Maximize
57 {
58    E_MAXIMIZE_NONE = 0x00000000,
59    E_MAXIMIZE_FULLSCREEN = 0x00000001,
60    E_MAXIMIZE_SMART = 0x00000002,
61    E_MAXIMIZE_EXPAND = 0x00000003,
62    E_MAXIMIZE_FILL = 0x00000004,
63    E_MAXIMIZE_TYPE = 0x0000000f,
64    E_MAXIMIZE_VERTICAL = 0x00000010,
65    E_MAXIMIZE_HORIZONTAL = 0x00000020,
66    E_MAXIMIZE_BOTH = 0x00000030,
67    E_MAXIMIZE_LEFT = 0x00000070,
68    E_MAXIMIZE_RIGHT = 0x000000b0,
69 #ifdef _F_USE_BOTTOM_TOP_MAXIMIZE
70    E_MAXIMIZE_BOTTOM = 0x00000130,
71    E_MAXIMIZE_TOP = 0x00000230,
72    E_MAXIMIZE_DIRECTION = 0x00000ff0
73 #else
74    E_MAXIMIZE_DIRECTION = 0x000000f0
75 #endif
76 } E_Maximize;
77
78 typedef enum _E_Fullscreen
79 {
80    /* Resize window */
81    E_FULLSCREEN_RESIZE,
82    /* Change screen resoultion and resize window */
83    E_FULLSCREEN_ZOOM
84 } E_Fullscreen;
85
86 typedef enum _E_Window_Placement
87 {
88    E_WINDOW_PLACEMENT_SMART,
89    E_WINDOW_PLACEMENT_ANTIGADGET,
90    E_WINDOW_PLACEMENT_CURSOR,
91    E_WINDOW_PLACEMENT_MANUAL
92 } E_Window_Placement;
93
94 typedef enum _E_Border_Hook_Point
95 {
96    E_BORDER_HOOK_EVAL_PRE_FETCH,
97    E_BORDER_HOOK_EVAL_PRE_POST_FETCH,
98    E_BORDER_HOOK_EVAL_POST_FETCH,
99    E_BORDER_HOOK_EVAL_PRE_BORDER_ASSIGN,
100    E_BORDER_HOOK_EVAL_POST_BORDER_ASSIGN,
101    E_BORDER_HOOK_EVAL_PRE_NEW_BORDER,
102    E_BORDER_HOOK_EVAL_POST_NEW_BORDER,
103    E_BORDER_HOOK_EVAL_END,
104    E_BORDER_HOOK_CONTAINER_LAYOUT,
105    E_BORDER_HOOK_NEW_BORDER,
106    E_BORDER_HOOK_SET_DESK,
107    E_BORDER_HOOK_MOVE_BEGIN,
108    E_BORDER_HOOK_MOVE_UPDATE,
109    E_BORDER_HOOK_MOVE_END,
110    E_BORDER_HOOK_RESIZE_BEGIN,
111    E_BORDER_HOOK_RESIZE_UPDATE,
112    E_BORDER_HOOK_RESIZE_END,
113 #ifdef _F_BORDER_HOOK_PATCH_
114    E_BORDER_HOOK_DEL_BORDER
115 #endif
116 } E_Border_Hook_Point;
117
118 #ifdef _F_ZONE_WINDOW_ROTATION_
119 typedef enum _E_Virtual_Keyboard_Window_Type
120 {
121    E_VIRTUAL_KEYBOARD_WINDOW_TYPE_NONE = 0,
122    E_VIRTUAL_KEYBOARD_WINDOW_TYPE_KEYPAD = 1,
123    E_VIRTUAL_KEYBOARD_WINDOW_TYPE_PREDICTION = 2,
124    E_VIRTUAL_KEYBOARD_WINDOW_TYPE_MAGNIFIER = 3,
125    E_VIRTUAL_KEYBOARD_WINDOW_TYPE_POPUP = 4,
126 } E_Virtual_Keyboard_Window_Type;
127 #endif
128
129 typedef struct _E_Border                     E_Border;
130 typedef struct _E_Border_Pending_Move_Resize E_Border_Pending_Move_Resize;
131 typedef struct _E_Border_Hook                E_Border_Hook;
132 typedef struct _E_Event_Border_Simple        E_Event_Border_Resize;
133 typedef struct _E_Event_Border_Simple        E_Event_Border_Move;
134 typedef struct _E_Event_Border_Simple        E_Event_Border_Add;
135 typedef struct _E_Event_Border_Simple        E_Event_Border_Remove;
136 typedef struct _E_Event_Border_Simple        E_Event_Border_Show;
137 typedef struct _E_Event_Border_Simple        E_Event_Border_Hide;
138 typedef struct _E_Event_Border_Simple        E_Event_Border_Iconify;
139 typedef struct _E_Event_Border_Simple        E_Event_Border_Uniconify;
140 typedef struct _E_Event_Border_Simple        E_Event_Border_Stick;
141 typedef struct _E_Event_Border_Simple        E_Event_Border_Unstick;
142 typedef struct _E_Event_Border_Zone_Set      E_Event_Border_Zone_Set;
143 typedef struct _E_Event_Border_Desk_Set      E_Event_Border_Desk_Set;
144 typedef struct _E_Event_Border_Stack         E_Event_Border_Stack;
145 typedef struct _E_Event_Border_Simple        E_Event_Border_Icon_Change;
146 typedef struct _E_Event_Border_Simple        E_Event_Border_Urgent_Change;
147 typedef struct _E_Event_Border_Simple        E_Event_Border_Focus_In;
148 typedef struct _E_Event_Border_Simple        E_Event_Border_Focus_Out;
149 typedef struct _E_Event_Border_Simple        E_Event_Border_Property;
150 typedef struct _E_Event_Border_Simple        E_Event_Border_Fullscreen;
151 typedef struct _E_Event_Border_Simple        E_Event_Border_Unfullscreen;
152 #ifdef _F_ZONE_WINDOW_ROTATION_
153 typedef struct _E_Event_Border_Simple        E_Event_Border_Rotation; /* deprecated */
154 typedef struct _E_Event_Border_Simple        E_Event_Border_Rotation_Change_Begin;
155 typedef struct _E_Event_Border_Simple        E_Event_Border_Rotation_Change_Cancel;
156 typedef struct _E_Event_Border_Simple        E_Event_Border_Rotation_Change_End;
157 #endif
158 typedef void                               (*E_Border_Move_Intercept_Cb)(E_Border *, int x, int y);
159 #else
160 #ifndef E_BORDER_H
161 #define E_BORDER_H
162
163 #define E_BORDER_TYPE (int)0xE0b01002
164
165 struct _E_Border
166 {
167    E_Object e_obj_inherit;
168
169    struct
170    {
171       struct
172       {
173          int x, y, w, h;
174          int mx, my;
175       } current, last_down[3], last_up[3];
176    } mouse;
177
178    struct
179    {
180       struct
181       {
182          int x, y, w, h;
183          int mx, my;
184          int button;
185       } down;
186    } moveinfo;
187
188    Ecore_X_Window win;
189    int            x, y, w, h;
190    int            ref;
191    E_Zone        *zone;
192    E_Desk        *desk;
193    Eina_List     *handlers;
194
195    struct
196    {
197       int x, y;
198       struct
199       {
200          int    x, y;
201          double t;
202       } start;
203    } fx;
204
205    struct
206    {
207       int l, r, t, b;
208    } client_inset;
209
210    Ecore_Evas    *bg_ecore_evas;
211    Evas          *bg_evas;
212    Ecore_X_Window bg_win;
213    Evas_Object   *bg_object;
214    Evas_Object   *icon_object;
215    Ecore_X_Window event_win;
216    const char    *internal_icon;
217    const char    *internal_icon_key;
218    Eina_Bool      bg_evas_in : 1;
219
220    struct
221    {
222       Ecore_X_Window shell_win;
223       Ecore_X_Window win;
224
225       int            x, y, w, h;
226
227       struct
228       {
229          unsigned char changed : 1;
230          unsigned char user_selected : 1;
231          const char   *name;
232       } border;
233
234       unsigned char  shaped : 1;
235       unsigned char  argb : 1;
236
237       /* ICCCM */
238       struct
239       {
240          const char               *title;
241          const char               *name;
242          const char               *class;
243          const char               *icon_name;
244          const char               *machine;
245          int                       min_w, min_h;
246          int                       max_w, max_h;
247          int                       base_w, base_h;
248          int                       step_w, step_h;
249          int                       start_x, start_y;
250          double                    min_aspect, max_aspect;
251          Ecore_X_Window_State_Hint initial_state;
252          Ecore_X_Window_State_Hint state;
253          Ecore_X_Pixmap            icon_pixmap;
254          Ecore_X_Pixmap            icon_mask;
255          Ecore_X_Window            icon_window;
256          Ecore_X_Window            window_group;
257          Ecore_X_Window            transient_for;
258          Ecore_X_Window            client_leader;
259          Ecore_X_Gravity           gravity;
260          const char               *window_role;
261          unsigned char             take_focus : 1;
262          unsigned char             accepts_focus : 1;
263          unsigned char             urgent : 1;
264          unsigned char             delete_request : 1;
265          unsigned char             request_pos : 1;
266          struct
267          {
268             int    argc;
269             char **argv;
270          } command;
271          struct
272          {
273             unsigned char title : 1;
274             unsigned char name_class : 1;
275             unsigned char icon_name : 1;
276             unsigned char machine : 1;
277             unsigned char hints : 1;
278             unsigned char size_pos_hints : 1;
279             unsigned char protocol : 1;
280             unsigned char transient_for : 1;
281             unsigned char client_leader : 1;
282             unsigned char window_role : 1;
283             unsigned char state : 1;
284             unsigned char command : 1;
285          } fetch;
286       } icccm;
287
288       /* MWM */
289       struct
290       {
291          Ecore_X_MWM_Hint_Func  func;
292          Ecore_X_MWM_Hint_Decor decor;
293          Ecore_X_MWM_Hint_Input input;
294          unsigned char          exists : 1;
295          unsigned char          borderless : 1;
296          struct
297          {
298             unsigned char hints : 1;
299          } fetch;
300       } mwm;
301
302       /* NetWM */
303       struct
304       {
305          pid_t         pid;
306          unsigned int  desktop;
307          const char   *name;
308          const char   *icon_name;
309          Ecore_X_Icon *icons;
310          int           num_icons;
311          unsigned int  user_time;
312          struct
313          {
314             int left;
315             int right;
316             int top;
317             int bottom;
318             int left_start_y;
319             int left_end_y;
320             int right_start_y;
321             int right_end_y;
322             int top_start_x;
323             int top_end_x;
324             int bottom_start_x;
325             int bottom_end_x;
326          } strut;
327          unsigned char ping : 1;
328          struct
329          {
330             unsigned char        request : 1;
331             unsigned int         wait;
332             Ecore_X_Sync_Alarm   alarm;
333             Ecore_X_Sync_Counter counter;
334             unsigned int         serial;
335             double               send_time;
336          } sync;
337
338          /* NetWM Window state */
339          struct
340          {
341             unsigned char modal : 1;
342             unsigned char sticky : 1;
343             unsigned char maximized_v : 1;
344             unsigned char maximized_h : 1;
345             unsigned char shaded : 1;
346             unsigned char skip_taskbar : 1;
347             unsigned char skip_pager : 1;
348             unsigned char hidden : 1;
349             unsigned char fullscreen : 1;
350             E_Stacking    stacking;
351          } state;
352
353          /* NetWM Window allowed actions */
354          struct
355          {
356             unsigned char move : 1;
357             unsigned char resize : 1;
358             unsigned char minimize : 1;
359             unsigned char shade : 1;
360             unsigned char stick : 1;
361             unsigned char maximized_h : 1;
362             unsigned char maximized_v : 1;
363             unsigned char fullscreen : 1;
364             unsigned char change_desktop : 1;
365             unsigned char close : 1;
366          } action;
367
368          Ecore_X_Window_Type  type;
369          Ecore_X_Window_Type *extra_types;
370          int                  extra_types_num;
371          int                  startup_id;
372
373          struct
374          {
375             unsigned char name : 1;
376             unsigned char icon_name : 1;
377             unsigned char icon : 1;
378             unsigned char user_time : 1;
379             unsigned char strut : 1;
380             unsigned char type : 1;
381             unsigned char state : 1;
382             /* No, fetch on new_client, shouldn't be changed after map.
383                unsigned char pid : 1;
384              */
385             /* No, ignore this
386                unsigned char desktop : 1;
387              */
388          } fetch;
389
390          struct
391          {
392             unsigned char state : 1;
393          } update;
394       } netwm;
395
396       /* Extra e stuff */
397       struct
398       {
399          struct
400          {
401             struct
402             {
403                int           x, y;
404
405                unsigned char updated : 1;
406             } video_position;
407             Ecore_X_Window video_parent;
408             E_Border      *video_parent_border;
409             Eina_List     *video_child;
410 #ifdef _F_USE_DESK_WINDOW_PROFILE_
411             const char    *profile;
412             Eina_List     *profiles;
413 #endif
414
415             unsigned char  centered : 1;
416             unsigned char  video : 1;
417 #ifdef _F_DEICONIFY_APPROVE_
418             struct
419             {
420                unsigned char support : 1;
421                unsigned char render_done : 1;
422                Ecore_Timer *wait_timer;
423                Eina_List *req_list;
424                E_Border *ancestor;
425             } deiconify_approve;
426 #endif
427 #ifdef _F_USE_DESK_WINDOW_PROFILE_
428             unsigned char  profile_list : 1;
429 #endif
430 #ifdef _F_ZONE_WINDOW_ROTATION_
431             struct
432             {
433                int           prev, curr;
434                struct
435                {
436                   int        x, y, w, h;
437                } geom[4];
438                unsigned char support : 1;
439                unsigned char geom_hint: 1;
440                unsigned char pending_change_request : 1;
441                unsigned char wait_for_done: 1;
442                // added for the window manager rotation protocol
443                unsigned char app_set : 1;    // v1: app wants to communicate with the window manager
444                int           rot;            // v1: decided rotation by the window manager
445                int           preferred_rot;  // v1: app specified rotation
446                int          *available_rots; // v1: app specified available rotations
447                unsigned int  count;          // v1: number of elements of available rotations
448             } rot;
449 #endif
450          } state;
451
452          struct
453          {
454             unsigned char state : 1;
455             unsigned char video_parent : 1;
456             unsigned char video_position : 1;
457 #ifdef _F_USE_DESK_WINDOW_PROFILE_
458             unsigned char profile_list : 1;
459 #endif
460 #ifdef _F_ZONE_WINDOW_ROTATION_
461             struct
462             {
463                unsigned char support : 1;
464                unsigned char geom_hint : 1;
465                // added for the window manager rotation protocol
466                unsigned char app_set : 1;        // v1: app wants to communicate with the window manager
467                unsigned char preferred_rot : 1;  // v1: app specified rotation
468                unsigned char available_rots : 1; // v1: app specified available rotations
469             } rot;
470 #endif
471          } fetch;
472       } e;
473
474       struct
475       {
476          struct
477          {
478             unsigned char soft_menu : 1;
479             unsigned char soft_menus : 1;
480          } fetch;
481
482          unsigned char soft_menu : 1;
483          unsigned char soft_menus : 1;
484       } qtopia;
485
486       struct
487       {
488          struct
489          {
490             unsigned char state : 1;
491             unsigned char vkbd : 1;
492          } fetch;
493          Ecore_X_Virtual_Keyboard_State state;
494          unsigned char                  vkbd : 1;
495 #ifdef _F_ZONE_WINDOW_ROTATION_
496          E_Virtual_Keyboard_Window_Type win_type;
497 #endif
498       } vkbd;
499
500       struct
501       {
502          struct
503          {
504             struct
505             {
506                unsigned char conformant : 1;
507             } fetch;
508             unsigned char conformant : 1;
509          } conformant;
510          struct
511          {
512             struct
513             {
514                unsigned char state : 1;
515                struct
516                {
517                   unsigned int major : 1;
518                   unsigned int minor : 1;
519                } priority;
520                unsigned char quickpanel : 1;
521                unsigned char zone : 1;
522             } fetch;
523             Ecore_X_Illume_Quickpanel_State state;
524             struct
525             {
526                unsigned int major : 1;
527                unsigned int minor : 1;
528             } priority;
529             unsigned char                   quickpanel : 1;
530             int                             zone;
531          } quickpanel;
532          struct
533          {
534             struct
535             {
536                unsigned char drag : 1;
537                unsigned char locked : 1;
538             } fetch;
539             unsigned char drag : 1;
540             unsigned char locked : 1;
541          } drag;
542          struct
543          {
544             struct
545             {
546                unsigned char state : 1;
547             } fetch;
548             Ecore_X_Illume_Window_State state;
549          } win_state;
550       } illume;
551
552       Ecore_X_Window_Attributes initial_attributes;
553    } client;
554
555    E_Container_Shape *shape;
556
557    unsigned int       visible : 1;
558    Eina_Bool          hidden : 1; // set when window has been hidden by api and should not be shown
559    unsigned int       await_hide_event;
560    unsigned int       moving : 1;
561    unsigned int       focused : 1;
562    unsigned int       new_client : 1;
563    unsigned int       re_manage : 1;
564    unsigned int       placed : 1;
565    unsigned int       shading : 1;
566    unsigned int       shaded : 1;
567    unsigned int       iconic : 1;
568    unsigned int       deskshow : 1;
569    unsigned int       sticky : 1;
570    unsigned int       shaped : 1;
571    unsigned int       shaped_input : 1;
572    unsigned int       need_shape_merge : 1;
573    unsigned int       need_shape_export : 1;
574    unsigned int       fullscreen : 1;
575    unsigned int       need_fullscreen : 1;
576    unsigned int       already_unparented : 1;
577    unsigned int       need_reparent : 1;
578    unsigned int       button_grabbed : 1;
579    unsigned int       delete_requested : 1;
580    unsigned int       ping_ok : 1;
581    unsigned int       hung : 1;
582    unsigned int       take_focus : 1;
583    unsigned int       want_focus : 1;
584    unsigned int       user_skip_winlist : 1;
585    unsigned int       need_maximize : 1;
586    E_Maximize         maximized;
587    E_Fullscreen       fullscreen_policy;
588    unsigned int       borderless : 1;
589    unsigned char      offer_resistance : 1;
590    const char        *bordername;
591
592    unsigned int       lock_user_location : 1; /*DONE*/
593    unsigned int       lock_client_location : 1; /*DONE*/
594    unsigned int       lock_user_size : 1; /*DONE*/
595    unsigned int       lock_client_size : 1; /*DONE*/
596    unsigned int       lock_user_stacking : 1; /*DONE*/
597    unsigned int       lock_client_stacking : 1; /*DONE*/
598    unsigned int       lock_user_iconify : 1; /*DONE*/
599    unsigned int       lock_client_iconify : 1; /*DONE*/
600    unsigned int       lock_user_desk : 1;
601    unsigned int       lock_client_desk : 1;
602    unsigned int       lock_user_sticky : 1; /*DONE*/
603    unsigned int       lock_client_sticky : 1; /*DONE*/
604    unsigned int       lock_user_shade : 1; /*DONE*/
605    unsigned int       lock_client_shade : 1; /*DONE*/
606    unsigned int       lock_user_maximize : 1; /*DONE*/
607    unsigned int       lock_client_maximize : 1; /*DONE*/
608    unsigned int       lock_user_fullscreen : 1; /*DONE*/
609    unsigned int       lock_client_fullscreen : 1; /*DONE*/
610    unsigned int       lock_border : 1; /*DONE*/
611    unsigned int       lock_close : 1; /*DONE*/
612    unsigned int       lock_focus_in : 1; /*DONE*/
613    unsigned int       lock_focus_out : 1; /*DONE*/
614    unsigned int       lock_life : 1; /*DONE*/
615
616    unsigned int       internal : 1;
617    unsigned int       internal_no_remember : 1;
618    unsigned int       stolen : 1;
619
620    Ecore_Evas        *internal_ecore_evas;
621
622    double             ping;
623
624    unsigned char      changed : 1;
625
626    unsigned char      icon_preference;
627    unsigned char      ignore_first_unmap;
628    unsigned char      resize_mode;
629
630    struct
631    {
632       int          x, y, w, h;
633       unsigned int layer;
634       int          zone;
635       E_Maximize   maximized;
636       unsigned int event_mask;
637    } saved;
638
639    struct
640    {
641       unsigned char valid : 1;
642       int           x, y, w, h;
643       struct
644       {
645          int x, y, w, h;
646       } saved;
647    } pre_res_change;
648
649    struct
650    {
651       double          start;
652       double          val;
653       int             x, y;
654       E_Direction     dir;
655       Ecore_Animator *anim;
656    } shade;
657
658    struct
659    {
660       int x, y;
661       int modified;
662    } shelf_fix;
663
664    Eina_List       *stick_desks;
665    E_Menu          *border_menu;
666    E_Config_Dialog *border_locks_dialog;
667    E_Config_Dialog *border_remember_dialog;
668    E_Config_Dialog *border_border_dialog;
669    E_Dialog        *border_prop_dialog;
670    Eina_List       *pending_move_resize;
671
672    struct
673    {
674       unsigned char visible : 1;
675       unsigned char pos : 1;
676       unsigned char size : 1;
677       unsigned char stack : 1;
678       unsigned char prop : 1;
679       unsigned char border : 1;
680       unsigned char reset_gravity : 1;
681       unsigned char shading : 1;
682       unsigned char shaded : 1;
683       unsigned char shape : 1;
684       unsigned char shape_input : 1;
685       unsigned char icon : 1;
686    } changes;
687
688    struct
689    {
690       unsigned char start : 1;
691       int           x, y;
692    } drag;
693
694    unsigned int               layer;
695    E_Action                  *cur_mouse_action;
696    Ecore_Timer               *raise_timer;
697    Ecore_Poller              *ping_poller;
698    Ecore_Timer               *kill_timer;
699    E_Border_Move_Intercept_Cb move_intercept_cb;
700    int                        shape_rects_num;
701    Ecore_X_Rectangle         *shape_rects;
702    E_Remember                *remember;
703
704    E_Border                  *modal;
705
706    E_Border                  *leader;
707    Eina_List                 *group;
708
709    E_Border                  *parent;
710    Eina_List                 *transients;
711
712    Efreet_Desktop            *desktop;
713    E_Pointer                 *pointer;
714
715    unsigned char              comp_hidden   : 1;
716
717    unsigned char              post_move   : 1;
718    unsigned char              post_resize : 1;
719    unsigned char              post_show : 1;
720
721    Ecore_Idle_Enterer        *post_job;
722
723    Eina_Bool                  argb;
724
725    int                        tmp_input_hidden;
726 };
727
728 struct _E_Border_Pending_Move_Resize
729 {
730    int           x, y, w, h;
731    unsigned char move : 1;
732    unsigned char resize : 1;
733    unsigned char without_border : 1;
734    unsigned int  serial;
735 };
736
737 struct _E_Border_Hook
738 {
739    E_Border_Hook_Point hookpoint;
740    void                (*func)(void *data, void *bd);
741    void               *data;
742    unsigned char       delete_me : 1;
743 };
744
745 struct _E_Event_Border_Simple
746 {
747    E_Border *border;
748 };
749
750 struct _E_Event_Border_Zone_Set
751 {
752    E_Border *border;
753    E_Zone   *zone;
754 };
755
756 struct _E_Event_Border_Desk_Set
757 {
758    E_Border *border;
759    E_Desk   *desk;
760 };
761
762 struct _E_Event_Border_Stack
763 {
764    E_Border  *border, *stack;
765    E_Stacking type;
766 };
767
768 EINTERN int         e_border_init(void);
769 EINTERN int         e_border_shutdown(void);
770
771 EAPI E_Border      *e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal);
772 EAPI void           e_border_free(E_Border *bd);
773 EAPI void           e_border_ref(E_Border *bd);
774 EAPI void           e_border_unref(E_Border *bd);
775 EAPI void           e_border_res_change_geometry_save(E_Border *bd);
776 EAPI void           e_border_res_change_geometry_restore(E_Border *bd);
777
778 EAPI void           e_border_zone_set(E_Border *bd, E_Zone *zone);
779 EAPI void           e_border_desk_set(E_Border *bd, E_Desk *desk);
780 EAPI void           e_border_show(E_Border *bd);
781 EAPI void           e_border_hide(E_Border *bd, int manage);
782 EAPI void           e_border_move(E_Border *bd, int x, int y);
783 EAPI void           e_border_move_intercept_cb_set(E_Border *bd, E_Border_Move_Intercept_Cb cb);
784 EAPI void           e_border_move_without_border(E_Border *bd, int x, int y);
785 EAPI void           e_border_center(E_Border *bd);
786 EAPI void           e_border_center_pos_get(E_Border *bd, int *x, int *y);
787 EAPI void           e_border_fx_offset(E_Border *bd, int x, int y);
788 EAPI void           e_border_resize(E_Border *bd, int w, int h);
789 EAPI void           e_border_resize_without_border(E_Border *bd, int w, int h);
790 EAPI void           e_border_move_resize(E_Border *bd, int x, int y, int w, int h);
791 EAPI void           e_border_move_resize_without_border(E_Border *bd, int x, int y, int w, int h);
792 EAPI void           e_border_layer_set(E_Border *bd, int layer);
793 EAPI void           e_border_raise(E_Border *bd);
794 EAPI void           e_border_lower(E_Border *bd);
795 EAPI void           e_border_stack_above(E_Border *bd, E_Border *above);
796 EAPI void           e_border_stack_below(E_Border *bd, E_Border *below);
797 EAPI void           e_border_focus_latest_set(E_Border *bd);
798 EAPI void           e_border_raise_latest_set(E_Border *bd);
799 EAPI void           e_border_focus_set_with_pointer(E_Border *bd);
800 EAPI void           e_border_focus_set(E_Border *bd, int focus, int set);
801 EAPI void           e_border_shade(E_Border *bd, E_Direction dir);
802 EAPI void           e_border_unshade(E_Border *bd, E_Direction dir);
803 EAPI void           e_border_maximize(E_Border *bd, E_Maximize max);
804 EAPI void           e_border_unmaximize(E_Border *bd, E_Maximize max);
805 EAPI void           e_border_fullscreen(E_Border *bd, E_Fullscreen policy);
806 EAPI void           e_border_unfullscreen(E_Border *bd);
807 EAPI void           e_border_iconify(E_Border *bd);
808 EAPI void           e_border_uniconify(E_Border *bd);
809 EAPI void           e_border_stick(E_Border *bd);
810 EAPI void           e_border_unstick(E_Border *bd);
811 EAPI void           e_border_pinned_set(E_Border *bd, int set);
812
813 EAPI E_Border      *e_border_find_by_client_window(Ecore_X_Window win);
814 EAPI E_Border      *e_border_find_all_by_client_window(Ecore_X_Window win);
815 EAPI E_Border      *e_border_find_by_frame_window(Ecore_X_Window win);
816 EAPI E_Border      *e_border_find_by_window(Ecore_X_Window win);
817 EAPI E_Border      *e_border_find_by_alarm(Ecore_X_Sync_Alarm alarm);
818 EAPI E_Border      *e_border_focused_get(void);
819
820 EAPI void           e_border_idler_before(void);
821
822 EAPI Eina_List     *e_border_client_list(void);
823
824 EAPI void           e_border_act_move_keyboard(E_Border *bd);
825 EAPI void           e_border_act_resize_keyboard(E_Border *bd);
826
827 EAPI void           e_border_act_move_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev);
828 EAPI void           e_border_act_move_end(E_Border *bd, Ecore_Event_Mouse_Button *ev);
829 EAPI void           e_border_act_resize_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev);
830 EAPI void           e_border_act_resize_end(E_Border *bd, Ecore_Event_Mouse_Button *ev);
831 EAPI void           e_border_act_menu_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev, int key);
832 EAPI void           e_border_act_close_begin(E_Border *bd);
833 EAPI void           e_border_act_kill_begin(E_Border *bd);
834
835 EAPI Evas_Object   *e_border_icon_add(E_Border *bd, Evas *evas);
836
837 EAPI void           e_border_button_bindings_ungrab_all(void);
838 EAPI void           e_border_button_bindings_grab_all(void);
839
840 EAPI Eina_List     *e_border_focus_stack_get(void);
841 EAPI Eina_List     *e_border_lost_windows_get(E_Zone *zone);
842
843 EAPI void           e_border_ping(E_Border *bd);
844 EAPI void           e_border_move_cancel(void);
845 EAPI void           e_border_resize_cancel(void);
846 EAPI void           e_border_frame_recalc(E_Border *bd);
847 EAPI Eina_List     *e_border_immortal_windows_get(void);
848
849 EAPI const char    *e_border_name_get(const E_Border *bd);
850
851 EAPI void           e_border_signal_move_begin(E_Border *bd, const char *sig, const char *src);
852 EAPI void           e_border_signal_move_end(E_Border *bd, const char *sig, const char *src);
853 EAPI int            e_border_resizing_get(E_Border *bd);
854 EAPI void           e_border_signal_resize_begin(E_Border *bd, const char *dir, const char *sig, const char *src);
855 EAPI void           e_border_signal_resize_end(E_Border *bd, const char *dir, const char *sig, const char *src);
856 EAPI void           e_border_resize_limit(E_Border *bd, int *w, int *h);
857
858 EAPI E_Border_Hook *e_border_hook_add(E_Border_Hook_Point hookpoint, void (*func)(void *data, void *bd), void *data);
859 EAPI void           e_border_hook_del(E_Border_Hook *bh);
860 EAPI void           e_border_focus_track_freeze(void);
861 EAPI void           e_border_focus_track_thaw(void);
862
863 EAPI E_Border      *e_border_under_pointer_get(E_Desk *desk, E_Border *exclude);
864 EAPI int            e_border_pointer_warp_to_center(E_Border *bd);
865
866 EAPI void           e_border_comp_hidden_set(E_Border *bd, Eina_Bool hidden);
867 EAPI void           e_border_tmp_input_hidden_push(E_Border *bd);
868 EAPI void           e_border_tmp_input_hidden_pop(E_Border *bd);
869
870 EAPI void           e_border_activate(E_Border *bd, Eina_Bool just_do_it);
871
872 extern EAPI int E_EVENT_BORDER_RESIZE;
873 extern EAPI int E_EVENT_BORDER_MOVE;
874 extern EAPI int E_EVENT_BORDER_ADD;
875 extern EAPI int E_EVENT_BORDER_SHOW;
876 extern EAPI int E_EVENT_BORDER_HIDE;
877 extern EAPI int E_EVENT_BORDER_REMOVE;
878 extern EAPI int E_EVENT_BORDER_ICONIFY;
879 extern EAPI int E_EVENT_BORDER_UNICONIFY;
880 extern EAPI int E_EVENT_BORDER_STICK;
881 extern EAPI int E_EVENT_BORDER_UNSTICK;
882 extern EAPI int E_EVENT_BORDER_ZONE_SET;
883 extern EAPI int E_EVENT_BORDER_DESK_SET;
884 extern EAPI int E_EVENT_BORDER_STACK;
885 extern EAPI int E_EVENT_BORDER_ICON_CHANGE;
886 extern EAPI int E_EVENT_BORDER_URGENT_CHANGE;
887 extern EAPI int E_EVENT_BORDER_FOCUS_IN;
888 extern EAPI int E_EVENT_BORDER_FOCUS_OUT;
889 extern EAPI int E_EVENT_BORDER_PROPERTY;
890 extern EAPI int E_EVENT_BORDER_FULLSCREEN;
891 extern EAPI int E_EVENT_BORDER_UNFULLSCREEN;
892 #ifdef _F_ZONE_WINDOW_ROTATION_
893 extern EAPI int E_EVENT_BORDER_ROTATION; /* deprecated */
894 extern EAPI int E_EVENT_BORDER_ROTATION_CHANGE_BEGIN;
895 extern EAPI int E_EVENT_BORDER_ROTATION_CHANGE_CANCEL;
896 extern EAPI int E_EVENT_BORDER_ROTATION_CHANGE_END;
897 #endif
898
899 #endif
900 #endif