2095efad2d8cbfb9bb542553506164637c99510f
[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                Ecore_Job *pending_job;
435             } deiconify_approve;
436 #endif
437 #ifdef _F_USE_DESK_WINDOW_PROFILE_
438             unsigned char  profile_list : 1;
439 #endif
440 #ifdef _F_ZONE_WINDOW_ROTATION_
441             struct
442             {
443                E_Border_Rotation_Type type;
444                int           prev, curr;
445                struct
446                {
447                   int        x, y, w, h;
448                } geom[4];
449                unsigned char support : 1;
450                unsigned char geom_hint: 1;
451                unsigned char pending_change_request : 1;
452                unsigned char pending_show : 1;  // newly created window that has to be rotated will be show after rotating done.
453                                                 // so, it will be used pending e_border_show called at main eval time.
454                unsigned char wait_for_done: 1;
455                // added for the window manager rotation protocol
456                unsigned char app_set : 1;    // v1: app wants to communicate with the window manager
457                int           rot;            // v1: decided rotation by the window manager
458                int           preferred_rot;  // v1: app specified rotation
459                int          *available_rots; // v1: app specified available rotations
460                unsigned int  count;          // v1: number of elements of available rotations
461                int           changes;        // added for precessing rotation in main eval after fetch in eval0.
462                int           wait_done_ang;  // the angle that wm wait for done.
463                                              // when wait_for_done is set to 1, it's meaningful.
464             } rot;
465 #endif
466          } state;
467
468          struct
469          {
470             unsigned char state : 1;
471             unsigned char video_parent : 1;
472             unsigned char video_position : 1;
473 #ifdef _F_USE_DESK_WINDOW_PROFILE_
474             unsigned char profile_list : 1;
475 #endif
476 #ifdef _F_ZONE_WINDOW_ROTATION_
477             struct
478             {
479                unsigned char support : 1;
480                unsigned char geom_hint : 1;
481                // added for the window manager rotation protocol
482                unsigned char app_set : 1;        // v1: app wants to communicate with the window manager
483                unsigned char preferred_rot : 1;  // v1: app specified rotation
484                unsigned char available_rots : 1; // v1: app specified available rotations
485             } rot;
486 #endif
487          } fetch;
488       } e;
489
490       struct
491       {
492          struct
493          {
494             unsigned char soft_menu : 1;
495             unsigned char soft_menus : 1;
496          } fetch;
497
498          unsigned char soft_menu : 1;
499          unsigned char soft_menus : 1;
500       } qtopia;
501
502       struct
503       {
504          struct
505          {
506             unsigned char state : 1;
507             unsigned char vkbd : 1;
508          } fetch;
509          Ecore_X_Virtual_Keyboard_State state;
510          unsigned char                  vkbd : 1;
511 #ifdef _F_ZONE_WINDOW_ROTATION_
512          E_Virtual_Keyboard_Window_Type win_type;
513 #endif
514       } vkbd;
515
516       struct
517       {
518          struct
519          {
520             struct
521             {
522                unsigned char conformant : 1;
523             } fetch;
524             unsigned char conformant : 1;
525          } conformant;
526          struct
527          {
528             struct
529             {
530                unsigned char state : 1;
531                struct
532                {
533                   unsigned int major : 1;
534                   unsigned int minor : 1;
535                } priority;
536                unsigned char quickpanel : 1;
537                unsigned char zone : 1;
538             } fetch;
539             Ecore_X_Illume_Quickpanel_State state;
540             struct
541             {
542                unsigned int major : 1;
543                unsigned int minor : 1;
544             } priority;
545             unsigned char                   quickpanel : 1;
546             int                             zone;
547          } quickpanel;
548          struct
549          {
550             struct
551             {
552                unsigned char drag : 1;
553                unsigned char locked : 1;
554             } fetch;
555             unsigned char drag : 1;
556             unsigned char locked : 1;
557          } drag;
558          struct
559          {
560             struct
561             {
562                unsigned char state : 1;
563             } fetch;
564             Ecore_X_Illume_Window_State state;
565          } win_state;
566       } illume;
567
568       Ecore_X_Window_Attributes initial_attributes;
569    } client;
570
571    E_Container_Shape *shape;
572
573    unsigned int       visible : 1;
574    Eina_Bool          hidden : 1; // set when window has been hidden by api and should not be shown
575    unsigned int       await_hide_event;
576    unsigned int       moving : 1;
577    unsigned int       focused : 1;
578    unsigned int       new_client : 1;
579    unsigned int       re_manage : 1;
580    unsigned int       placed : 1;
581    unsigned int       shading : 1;
582    unsigned int       shaded : 1;
583    unsigned int       iconic : 1;
584    unsigned int       deskshow : 1;
585    unsigned int       sticky : 1;
586    unsigned int       shaped : 1;
587    unsigned int       shaped_input : 1;
588    unsigned int       need_shape_merge : 1;
589    unsigned int       need_shape_export : 1;
590    unsigned int       fullscreen : 1;
591    unsigned int       need_fullscreen : 1;
592    unsigned int       already_unparented : 1;
593    unsigned int       need_reparent : 1;
594    unsigned int       button_grabbed : 1;
595    unsigned int       delete_requested : 1;
596    unsigned int       ping_ok : 1;
597    unsigned int       hung : 1;
598    unsigned int       take_focus : 1;
599    unsigned int       want_focus : 1;
600    unsigned int       user_skip_winlist : 1;
601    unsigned int       need_maximize : 1;
602    E_Maximize         maximized;
603    E_Fullscreen       fullscreen_policy;
604    unsigned int       borderless : 1;
605    unsigned char      offer_resistance : 1;
606    const char        *bordername;
607
608    unsigned int       lock_user_location : 1; /*DONE*/
609    unsigned int       lock_client_location : 1; /*DONE*/
610    unsigned int       lock_user_size : 1; /*DONE*/
611    unsigned int       lock_client_size : 1; /*DONE*/
612    unsigned int       lock_user_stacking : 1; /*DONE*/
613    unsigned int       lock_client_stacking : 1; /*DONE*/
614    unsigned int       lock_user_iconify : 1; /*DONE*/
615    unsigned int       lock_client_iconify : 1; /*DONE*/
616    unsigned int       lock_user_desk : 1;
617    unsigned int       lock_client_desk : 1;
618    unsigned int       lock_user_sticky : 1; /*DONE*/
619    unsigned int       lock_client_sticky : 1; /*DONE*/
620    unsigned int       lock_user_shade : 1; /*DONE*/
621    unsigned int       lock_client_shade : 1; /*DONE*/
622    unsigned int       lock_user_maximize : 1; /*DONE*/
623    unsigned int       lock_client_maximize : 1; /*DONE*/
624    unsigned int       lock_user_fullscreen : 1; /*DONE*/
625    unsigned int       lock_client_fullscreen : 1; /*DONE*/
626    unsigned int       lock_border : 1; /*DONE*/
627    unsigned int       lock_close : 1; /*DONE*/
628    unsigned int       lock_focus_in : 1; /*DONE*/
629    unsigned int       lock_focus_out : 1; /*DONE*/
630    unsigned int       lock_life : 1; /*DONE*/
631
632    unsigned int       internal : 1;
633    unsigned int       internal_no_remember : 1;
634    unsigned int       stolen : 1;
635
636    Ecore_Evas        *internal_ecore_evas;
637
638    double             ping;
639
640    unsigned char      changed : 1;
641
642    unsigned char      icon_preference;
643    unsigned char      ignore_first_unmap;
644    unsigned char      resize_mode;
645
646    struct
647    {
648       int          x, y, w, h;
649       unsigned int layer;
650       int          zone;
651       E_Maximize   maximized;
652       unsigned int event_mask;
653    } saved;
654
655    struct
656    {
657       unsigned char valid : 1;
658       int           x, y, w, h;
659       struct
660       {
661          int x, y, w, h;
662       } saved;
663    } pre_res_change;
664
665    struct
666    {
667       double          start;
668       double          val;
669       int             x, y;
670       E_Direction     dir;
671       Ecore_Animator *anim;
672    } shade;
673
674    struct
675    {
676       int x, y;
677       int modified;
678    } shelf_fix;
679
680    Eina_List       *stick_desks;
681    E_Menu          *border_menu;
682    E_Config_Dialog *border_locks_dialog;
683    E_Config_Dialog *border_remember_dialog;
684    E_Config_Dialog *border_border_dialog;
685    E_Dialog        *border_prop_dialog;
686    Eina_List       *pending_move_resize;
687
688    struct
689    {
690       unsigned char visible : 1;
691       unsigned char pos : 1;
692       unsigned char size : 1;
693       unsigned char stack : 1;
694       unsigned char prop : 1;
695       unsigned char border : 1;
696       unsigned char reset_gravity : 1;
697       unsigned char shading : 1;
698       unsigned char shaded : 1;
699       unsigned char shape : 1;
700       unsigned char shape_input : 1;
701       unsigned char icon : 1;
702    } changes;
703
704    struct
705    {
706       unsigned char start : 1;
707       int           x, y;
708    } drag;
709
710    unsigned int               layer;
711    E_Action                  *cur_mouse_action;
712    Ecore_Timer               *raise_timer;
713    Ecore_Poller              *ping_poller;
714    Ecore_Timer               *kill_timer;
715    E_Border_Move_Intercept_Cb move_intercept_cb;
716    int                        shape_rects_num;
717    Ecore_X_Rectangle         *shape_rects;
718    E_Remember                *remember;
719
720    E_Border                  *modal;
721
722    E_Border                  *leader;
723    Eina_List                 *group;
724
725    E_Border                  *parent;
726    Eina_List                 *transients;
727
728    Efreet_Desktop            *desktop;
729    E_Pointer                 *pointer;
730
731    unsigned char              comp_hidden   : 1;
732
733    unsigned char              post_move   : 1;
734    unsigned char              post_resize : 1;
735    unsigned char              post_show : 1;
736
737    Ecore_Idle_Enterer        *post_job;
738
739    Eina_Bool                  argb;
740
741    int                        tmp_input_hidden;
742 };
743
744 struct _E_Border_Pending_Move_Resize
745 {
746    int           x, y, w, h;
747    unsigned char move : 1;
748    unsigned char resize : 1;
749    unsigned char without_border : 1;
750    unsigned int  serial;
751 };
752
753 struct _E_Border_Hook
754 {
755    E_Border_Hook_Point hookpoint;
756    void                (*func)(void *data, void *bd);
757    void               *data;
758    unsigned char       delete_me : 1;
759 };
760
761 struct _E_Event_Border_Simple
762 {
763    E_Border *border;
764 };
765
766 struct _E_Event_Border_Zone_Set
767 {
768    E_Border *border;
769    E_Zone   *zone;
770 };
771
772 struct _E_Event_Border_Desk_Set
773 {
774    E_Border *border;
775    E_Desk   *desk;
776 };
777
778 struct _E_Event_Border_Stack
779 {
780    E_Border  *border, *stack;
781    E_Stacking type;
782 };
783
784 EINTERN int         e_border_init(void);
785 EINTERN int         e_border_shutdown(void);
786
787 EAPI E_Border      *e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal);
788 EAPI void           e_border_free(E_Border *bd);
789 EAPI void           e_border_ref(E_Border *bd);
790 EAPI void           e_border_unref(E_Border *bd);
791 EAPI void           e_border_res_change_geometry_save(E_Border *bd);
792 EAPI void           e_border_res_change_geometry_restore(E_Border *bd);
793
794 EAPI void           e_border_zone_set(E_Border *bd, E_Zone *zone);
795 EAPI void           e_border_desk_set(E_Border *bd, E_Desk *desk);
796 EAPI void           e_border_show(E_Border *bd);
797 EAPI void           e_border_hide(E_Border *bd, int manage);
798 EAPI void           e_border_move(E_Border *bd, int x, int y);
799 EAPI void           e_border_move_intercept_cb_set(E_Border *bd, E_Border_Move_Intercept_Cb cb);
800 EAPI void           e_border_move_without_border(E_Border *bd, int x, int y);
801 EAPI void           e_border_center(E_Border *bd);
802 EAPI void           e_border_center_pos_get(E_Border *bd, int *x, int *y);
803 EAPI void           e_border_fx_offset(E_Border *bd, int x, int y);
804 EAPI void           e_border_resize(E_Border *bd, int w, int h);
805 EAPI void           e_border_resize_without_border(E_Border *bd, int w, int h);
806 EAPI void           e_border_move_resize(E_Border *bd, int x, int y, int w, int h);
807 EAPI void           e_border_move_resize_without_border(E_Border *bd, int x, int y, int w, int h);
808 EAPI void           e_border_layer_set(E_Border *bd, int layer);
809 EAPI void           e_border_raise(E_Border *bd);
810 EAPI void           e_border_lower(E_Border *bd);
811 EAPI void           e_border_stack_above(E_Border *bd, E_Border *above);
812 EAPI void           e_border_stack_below(E_Border *bd, E_Border *below);
813 EAPI void           e_border_focus_latest_set(E_Border *bd);
814 EAPI void           e_border_raise_latest_set(E_Border *bd);
815 EAPI void           e_border_focus_set_with_pointer(E_Border *bd);
816 EAPI void           e_border_focus_set(E_Border *bd, int focus, int set);
817 EAPI void           e_border_shade(E_Border *bd, E_Direction dir);
818 EAPI void           e_border_unshade(E_Border *bd, E_Direction dir);
819 EAPI void           e_border_maximize(E_Border *bd, E_Maximize max);
820 EAPI void           e_border_unmaximize(E_Border *bd, E_Maximize max);
821 EAPI void           e_border_fullscreen(E_Border *bd, E_Fullscreen policy);
822 EAPI void           e_border_unfullscreen(E_Border *bd);
823 EAPI void           e_border_iconify(E_Border *bd);
824 EAPI void           e_border_uniconify(E_Border *bd);
825 EAPI void           e_border_stick(E_Border *bd);
826 EAPI void           e_border_unstick(E_Border *bd);
827 EAPI void           e_border_pinned_set(E_Border *bd, int set);
828
829 EAPI E_Border      *e_border_find_by_client_window(Ecore_X_Window win);
830 EAPI E_Border      *e_border_find_all_by_client_window(Ecore_X_Window win);
831 EAPI E_Border      *e_border_find_by_frame_window(Ecore_X_Window win);
832 EAPI E_Border      *e_border_find_by_window(Ecore_X_Window win);
833 EAPI E_Border      *e_border_find_by_alarm(Ecore_X_Sync_Alarm alarm);
834 EAPI E_Border      *e_border_focused_get(void);
835
836 EAPI void           e_border_idler_before(void);
837
838 EAPI Eina_List     *e_border_client_list(void);
839
840 EAPI void           e_border_act_move_keyboard(E_Border *bd);
841 EAPI void           e_border_act_resize_keyboard(E_Border *bd);
842
843 EAPI void           e_border_act_move_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev);
844 EAPI void           e_border_act_move_end(E_Border *bd, Ecore_Event_Mouse_Button *ev);
845 EAPI void           e_border_act_resize_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev);
846 EAPI void           e_border_act_resize_end(E_Border *bd, Ecore_Event_Mouse_Button *ev);
847 EAPI void           e_border_act_menu_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev, int key);
848 EAPI void           e_border_act_close_begin(E_Border *bd);
849 EAPI void           e_border_act_kill_begin(E_Border *bd);
850
851 EAPI Evas_Object   *e_border_icon_add(E_Border *bd, Evas *evas);
852
853 EAPI void           e_border_button_bindings_ungrab_all(void);
854 EAPI void           e_border_button_bindings_grab_all(void);
855
856 EAPI Eina_List     *e_border_focus_stack_get(void);
857 EAPI Eina_List     *e_border_lost_windows_get(E_Zone *zone);
858
859 EAPI void           e_border_ping(E_Border *bd);
860 EAPI void           e_border_move_cancel(void);
861 EAPI void           e_border_resize_cancel(void);
862 EAPI void           e_border_frame_recalc(E_Border *bd);
863 EAPI Eina_List     *e_border_immortal_windows_get(void);
864
865 EAPI const char    *e_border_name_get(const E_Border *bd);
866
867 EAPI void           e_border_signal_move_begin(E_Border *bd, const char *sig, const char *src);
868 EAPI void           e_border_signal_move_end(E_Border *bd, const char *sig, const char *src);
869 EAPI int            e_border_resizing_get(E_Border *bd);
870 EAPI void           e_border_signal_resize_begin(E_Border *bd, const char *dir, const char *sig, const char *src);
871 EAPI void           e_border_signal_resize_end(E_Border *bd, const char *dir, const char *sig, const char *src);
872 EAPI void           e_border_resize_limit(E_Border *bd, int *w, int *h);
873
874 EAPI E_Border_Hook *e_border_hook_add(E_Border_Hook_Point hookpoint, void (*func)(void *data, void *bd), void *data);
875 EAPI void           e_border_hook_del(E_Border_Hook *bh);
876 EAPI void           e_border_focus_track_freeze(void);
877 EAPI void           e_border_focus_track_thaw(void);
878
879 EAPI E_Border      *e_border_under_pointer_get(E_Desk *desk, E_Border *exclude);
880 EAPI int            e_border_pointer_warp_to_center(E_Border *bd);
881
882 EAPI void           e_border_comp_hidden_set(E_Border *bd, Eina_Bool hidden);
883 EAPI void           e_border_tmp_input_hidden_push(E_Border *bd);
884 EAPI void           e_border_tmp_input_hidden_pop(E_Border *bd);
885
886 EAPI void           e_border_activate(E_Border *bd, Eina_Bool just_do_it);
887
888 #ifdef _F_ZONE_WINDOW_ROTATION_
889 EAPI void           e_border_rotation_list_clear(E_Zone *zone, Eina_Bool send_request);
890 EAPI Eina_Bool      e_border_rotation_set(E_Border *bd, int rotation);
891 #endif
892
893
894 extern EAPI int E_EVENT_BORDER_RESIZE;
895 extern EAPI int E_EVENT_BORDER_MOVE;
896 extern EAPI int E_EVENT_BORDER_ADD;
897 extern EAPI int E_EVENT_BORDER_SHOW;
898 extern EAPI int E_EVENT_BORDER_HIDE;
899 extern EAPI int E_EVENT_BORDER_REMOVE;
900 extern EAPI int E_EVENT_BORDER_ICONIFY;
901 extern EAPI int E_EVENT_BORDER_UNICONIFY;
902 extern EAPI int E_EVENT_BORDER_STICK;
903 extern EAPI int E_EVENT_BORDER_UNSTICK;
904 extern EAPI int E_EVENT_BORDER_ZONE_SET;
905 extern EAPI int E_EVENT_BORDER_DESK_SET;
906 extern EAPI int E_EVENT_BORDER_STACK;
907 extern EAPI int E_EVENT_BORDER_ICON_CHANGE;
908 extern EAPI int E_EVENT_BORDER_URGENT_CHANGE;
909 extern EAPI int E_EVENT_BORDER_FOCUS_IN;
910 extern EAPI int E_EVENT_BORDER_FOCUS_OUT;
911 extern EAPI int E_EVENT_BORDER_PROPERTY;
912 extern EAPI int E_EVENT_BORDER_FULLSCREEN;
913 extern EAPI int E_EVENT_BORDER_UNFULLSCREEN;
914 #ifdef _F_ZONE_WINDOW_ROTATION_
915 extern EAPI int E_EVENT_BORDER_ROTATION; /* deprecated */
916 extern EAPI int E_EVENT_BORDER_ROTATION_CHANGE_BEGIN;
917 extern EAPI int E_EVENT_BORDER_ROTATION_CHANGE_CANCEL;
918 extern EAPI int E_EVENT_BORDER_ROTATION_CHANGE_END;
919 #endif
920
921 #endif
922 #endif