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