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