1 #ifdef E_TYPEDEFS
2 typedef enum _E_Client_Screen_Limit
3 {
4     E_CLIENT_OFFSCREEN_LIMIT_ALLOW_PARTIAL = 0,
5     E_CLIENT_OFFSCREEN_LIMIT_ALLOW_FULL = 1,
6     E_CLIENT_OFFSCREEN_LIMIT_ALLOW_NONE = 2
7 } E_Client_Screen_Limit;
8 
9 typedef enum _E_Icon_Preference
10 {
11    E_ICON_PREF_E_DEFAULT,
12    E_ICON_PREF_NETWM,
13    E_ICON_PREF_USER
14 } E_Icon_Preference;
15 
16 typedef enum _E_Direction
17 {
18    E_DIRECTION_UP,
19    E_DIRECTION_DOWN,
20    E_DIRECTION_LEFT,
21    E_DIRECTION_RIGHT
22 } E_Direction;
23 
24 typedef enum _E_Transition
25 {
26    E_TRANSITION_LINEAR = 0,
27    E_TRANSITION_SINUSOIDAL = 1,
28    E_TRANSITION_ACCELERATE = 2,
29    E_TRANSITION_DECELERATE = 3,
30    E_TRANSITION_ACCELERATE_LOTS = 4,
31    E_TRANSITION_DECELERATE_LOTS = 5,
32    E_TRANSITION_SINUSOIDAL_LOTS = 6,
33    E_TRANSITION_BOUNCE = 7,
34    E_TRANSITION_BOUNCE_LOTS = 8
35 } E_Transition;
36 
37 typedef enum _E_Stacking
38 {
39    E_STACKING_NONE,
40    E_STACKING_ABOVE,
41    E_STACKING_BELOW
42 } E_Stacking;
43 
44 typedef enum _E_Focus_Policy
45 {
46    E_FOCUS_CLICK,
47    E_FOCUS_MOUSE,
48    E_FOCUS_SLOPPY,
49    E_FOCUS_LAST,
50 } E_Focus_Policy;
51 
52 typedef enum
53 {
54    /* same as ecore-x types */
55    E_WINDOW_TYPE_UNKNOWN = 0,
56    E_WINDOW_TYPE_DESKTOP,
57    E_WINDOW_TYPE_DOCK,
58    E_WINDOW_TYPE_TOOLBAR,
59    E_WINDOW_TYPE_MENU,
60    E_WINDOW_TYPE_UTILITY,
61    E_WINDOW_TYPE_SPLASH,
62    E_WINDOW_TYPE_DIALOG,
63    E_WINDOW_TYPE_NORMAL,
64    E_WINDOW_TYPE_DROPDOWN_MENU,
65    E_WINDOW_TYPE_POPUP_MENU,
66    E_WINDOW_TYPE_TOOLTIP,
67    E_WINDOW_TYPE_NOTIFICATION,
68    E_WINDOW_TYPE_COMBO,
69    E_WINDOW_TYPE_DND,
70    /* since UNKNOWN was used improperly in comp matching,
71     * this value is a placeholder to indicate that we want
72     * only type UNKNOWN windows
73     */
74    E_WINDOW_TYPE_REAL_UNKNOWN = 999
75 } E_Window_Type;
76 
77 typedef enum _E_Urgency_Policy
78 {
79    E_ACTIVEHINT_POLICY_IGNORE,
80    E_ACTIVEHINT_POLICY_ANIMATE,
81    E_ACTIVEHINT_POLICY_ACTIVATE,
82    E_ACTIVEHINT_POLICY_ACTIVATE_EXCLUDE,
83    E_ACTIVEHINT_POLICY_LAST,
84 } E_Urgency_Policy;
85 
86 typedef enum _E_Focus_Setting
87 {
88    E_FOCUS_NONE,
89    E_FOCUS_NEW_WINDOW,
90    E_FOCUS_NEW_DIALOG,
91    E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED
92 } E_Focus_Setting;
93 
94 typedef enum _E_Maximize
95 {
96    E_MAXIMIZE_NONE = 0x00000000,
97    E_MAXIMIZE_FULLSCREEN = 0x00000001,
98    E_MAXIMIZE_SMART = 0x00000002,
99    E_MAXIMIZE_EXPAND = 0x00000003,
100    E_MAXIMIZE_FILL = 0x00000004,
101    E_MAXIMIZE_TYPE = 0x0000000f,
102    E_MAXIMIZE_VERTICAL = 0x00000010,
103    E_MAXIMIZE_HORIZONTAL = 0x00000020,
104    E_MAXIMIZE_BOTH = 0x00000030,
105    E_MAXIMIZE_LEFT = 0x00000070,
106    E_MAXIMIZE_RIGHT = 0x000000b0,
107    E_MAXIMIZE_DIRECTION = 0x000000f0
108 } E_Maximize;
109 
110 typedef enum _E_Fullscreen
111 {
112    /* Resize window */
113    E_FULLSCREEN_RESIZE,
114    /* Change screen resolution and resize window */
115    E_FULLSCREEN_ZOOM
116 } E_Fullscreen;
117 
118 typedef enum _E_Window_Placement
119 {
120    E_WINDOW_PLACEMENT_SMART,
121    E_WINDOW_PLACEMENT_ANTIGADGET,
122    E_WINDOW_PLACEMENT_CURSOR,
123    E_WINDOW_PLACEMENT_MANUAL
124 } E_Window_Placement;
125 
126 typedef enum E_Client_Property
127 {
128    E_CLIENT_PROPERTY_NONE = 0,
129    E_CLIENT_PROPERTY_SIZE = (1 << 0),
130    E_CLIENT_PROPERTY_POS = (1 << 1),
131    E_CLIENT_PROPERTY_TITLE = (1 << 2),
132    E_CLIENT_PROPERTY_ICON = (1 << 3),
133    E_CLIENT_PROPERTY_URGENCY = (1 << 4),
134    E_CLIENT_PROPERTY_GRAVITY = (1 << 5),
135    E_CLIENT_PROPERTY_NETWM_STATE = (1 << 6),
136    E_CLIENT_PROPERTY_STICKY = (1 << 7),
137    E_CLIENT_PROPERTY_MISC = (1 << 31),
138 } E_Client_Property;
139 
140 typedef struct E_Client E_Client;
141 
142 typedef struct E_Event_Client E_Event_Client;
143 typedef struct _E_Event_Client_Property E_Event_Client_Property;
144 typedef struct _E_Client_Pending_Resize E_Client_Pending_Resize;
145 typedef struct E_Event_Client_Zone_Set E_Event_Client_Zone_Set;
146 typedef struct E_Event_Client_Desk_Set E_Event_Client_Desk_Set;
147 typedef struct _E_Client_Hook E_Client_Hook;
148 
149 typedef enum _E_Client_Hook_Point
150 {
151    E_CLIENT_HOOK_EVAL_PRE_FETCH,
152    E_CLIENT_HOOK_EVAL_FETCH,
153    E_CLIENT_HOOK_EVAL_PRE_POST_FETCH,
154    E_CLIENT_HOOK_EVAL_POST_FETCH,
155    E_CLIENT_HOOK_EVAL_PRE_FRAME_ASSIGN,
156    E_CLIENT_HOOK_EVAL_POST_FRAME_ASSIGN,
157    E_CLIENT_HOOK_EVAL_PRE_NEW_CLIENT,
158    E_CLIENT_HOOK_EVAL_POST_NEW_CLIENT,
159    E_CLIENT_HOOK_EVAL_END,
160    E_CLIENT_HOOK_FOCUS_SET,
161    E_CLIENT_HOOK_FOCUS_UNSET,
162    E_CLIENT_HOOK_NEW_CLIENT,
163    E_CLIENT_HOOK_DESK_SET,
164    E_CLIENT_HOOK_MOVE_BEGIN,
165    E_CLIENT_HOOK_MOVE_UPDATE,
166    E_CLIENT_HOOK_MOVE_END,
167    E_CLIENT_HOOK_RESIZE_BEGIN,
168    E_CLIENT_HOOK_RESIZE_UPDATE,
169    E_CLIENT_HOOK_RESIZE_END,
170    E_CLIENT_HOOK_DEL,
171    E_CLIENT_HOOK_UNREDIRECT,
172    E_CLIENT_HOOK_REDIRECT,
173    E_CLIENT_HOOK_UNIGNORE,
174    E_CLIENT_HOOK_LAST,
175 } E_Client_Hook_Point;
176 
177 typedef void (*E_Client_Move_Intercept_Cb)(E_Client *, int x, int y);
178 typedef void (*E_Client_Hook_Cb)(void *data, E_Client *ec);
179 typedef void (*E_Client_Layout_Cb)(void);
180 #else
181 
182 #ifndef HAVE_WAYLAND_ONLY
183 # include <Ecore_X.h>
184 #endif
185 
186 #define E_CLIENT_TYPE (int)0xE0b01002
187 
188 struct E_Event_Client
189 {
190    E_Client *ec;
191 };
192 
193 struct E_Event_Client_Desk_Set
194 {
195    E_Client *ec;
196    E_Desk *desk;
197 };
198 
199 struct E_Event_Client_Zone_Set
200 {
201    E_Client *ec;
202    E_Zone *zone;
203 };
204 
205 struct _E_Event_Client_Property
206 {
207    E_Client *ec;
208    unsigned int property;
209 };
210 
211 struct _E_Client_Hook
212 {
213    EINA_INLIST;
214    E_Client_Hook_Point hookpoint;
215    E_Client_Hook_Cb func;
216    void               *data;
217    unsigned char       delete_me E_BITFIELD;
218 };
219 
220 struct _E_Client_Pending_Resize
221 {
222    int           w, h;
223    unsigned int  serial;
224 };
225 
226 struct E_Client
227 {
228    E_Object e_obj_inherit;
229    EINA_INLIST;
230 
231    E_Pixmap *pixmap;
232    int depth;
233    int x, y, w, h; //frame+client geom
234    struct {
235       int x, y, w, h; //frame+client geom before move or resize callback
236    } pre_cb;
237    Eina_Rectangle client; //client geom
238    Evas_Object *frame; //comp object
239    Evas_Object *agent; //resize agent;
240    E_Zone *zone;
241    E_Desk *desk;
242 
243    Ecore_Poller              *ping_poller;
244    Ecore_Timer               *kill_timer;
245 
246    E_Client                  *modal;
247 
248    E_Client                  *leader;
249    Eina_List                 *group;
250 
251    E_Client                  *parent;
252    Eina_List                 *transients;
253 
254    E_Layer                    layer;
255 
256    Eina_Rectangle           *shape_rects;
257    unsigned int              shape_rects_num;
258 
259    Eina_Rectangle           *shape_input_rects;
260    unsigned int              shape_input_rects_num;
261 
262    Eina_Stringshare         *internal_icon;
263    Eina_Stringshare         *internal_icon_key;
264 
265    E_Direction               shade_dir;
266 
267    E_Comp_Client_Data       *comp_data;
268 
269    E_Action                  *cur_mouse_action;
270 
271    struct {
272       E_Client               *next;
273       E_Client               *prev;
274       int                     ignore;
275       Eina_Bool               focus_skip E_BITFIELD;
276    } stack;
277 
278    int               border_size; //size of client's border
279 
280    struct
281    {
282       struct
283       {
284          int x, y, w, h;
285          int mx, my;
286       } current, last_down[3], last_up[3];
287       Eina_Bool in E_BITFIELD;
288    } mouse;
289 
290    struct
291    {
292       struct
293       {
294          int x, y, w, h;
295          int mx, my;
296          int button;
297       } down;
298    } moveinfo;
299 
300    unsigned char      ignore_first_unmap;
301    E_Pointer_Mode     resize_mode;
302 
303    struct
304    {
305       Eina_Bool mapping_change E_BITFIELD;
306       Eina_Bool iconic_shading E_BITFIELD;
307    } hacks;
308 
309    struct
310    {
311       unsigned char changed E_BITFIELD;
312       unsigned char user_selected E_BITFIELD;
313       Eina_Stringshare *name;
314    } border;
315 
316    struct
317    {
318       int          x, y, w, h;
319       E_Layer      layer;
320       int          zone;
321       E_Maximize   maximized;
322       Eina_Bool    frame E_BITFIELD;
323       Eina_Bool    set E_BITFIELD;
324    } saved;
325 
326    struct
327    {
328       unsigned char valid E_BITFIELD;
329       int           x, y, w, h;
330       struct
331       {
332          int x, y, w, h;
333       } saved;
334    } pre_res_change;
335 
336    unsigned char  shaped E_BITFIELD;
337    unsigned char  argb E_BITFIELD;
338 
339    /* ICCCM */
340    struct
341    {
342       Eina_Stringshare        *title;
343       Eina_Stringshare        *name;
344       Eina_Stringshare        *class;
345       Eina_Stringshare        *icon_name;
346       Eina_Stringshare        *machine;
347       int                       min_w, min_h;
348       int                       max_w, max_h;
349       int                       base_w, base_h;
350       int                       step_w, step_h;
351       int                       start_x, start_y;
352       double                    min_aspect, max_aspect;
353       Ecore_Window            icon_window;
354       Ecore_Window            window_group;
355       uint64_t                transient_for;
356       Ecore_Window            client_leader;
357 #ifndef HAVE_WAYLAND_ONLY
358       Ecore_X_Window_State_Hint initial_state;
359       Ecore_X_Window_State_Hint state;
360       Ecore_X_Pixmap            icon_pixmap;
361       Ecore_X_Pixmap            icon_mask;
362       Ecore_X_Gravity           gravity;
363 #endif
364       Eina_Stringshare         *window_role;
365       unsigned char             take_focus E_BITFIELD;
366       unsigned char             accepts_focus E_BITFIELD;
367       unsigned char             urgent E_BITFIELD;
368       unsigned char             delete_request E_BITFIELD;
369       unsigned char             request_pos E_BITFIELD;
370       struct
371       {
372          int    argc;
373          char **argv;
374       } command;
375       struct
376       {
377          unsigned char title E_BITFIELD;
378          unsigned char name_class E_BITFIELD;
379          unsigned char icon_name E_BITFIELD;
380          unsigned char machine E_BITFIELD;
381          unsigned char hints E_BITFIELD;
382          unsigned char size_pos_hints E_BITFIELD;
383          unsigned char protocol E_BITFIELD;
384          unsigned char transient_for E_BITFIELD;
385          unsigned char client_leader E_BITFIELD;
386          unsigned char window_role E_BITFIELD;
387          unsigned char state E_BITFIELD;
388          unsigned char command E_BITFIELD;
389       } fetch;
390    } icccm;
391 
392    /* MWM */
393    struct
394    {
395 #ifndef HAVE_WAYLAND_ONLY
396       Ecore_X_MWM_Hint_Func  func;
397       Ecore_X_MWM_Hint_Decor decor;
398       Ecore_X_MWM_Hint_Input input;
399 #endif
400       unsigned char          exists E_BITFIELD;
401       unsigned char          borderless E_BITFIELD;
402       struct
403       {
404          unsigned char hints E_BITFIELD;
405       } fetch;
406    } mwm;
407 
408    /* NetWM */
409    struct
410    {
411       pid_t         pid;
412       unsigned int  desktop;
413       Eina_Stringshare *name;
414       Eina_Stringshare *icon_name;
415 #ifndef HAVE_WAYLAND_ONLY
416       Ecore_X_Icon *icons;
417 #endif
418       int           num_icons;
419       unsigned int  user_time;
420       unsigned char opacity;
421       Eina_Bool     opacity_changed E_BITFIELD; // prevent fetching opacity next prop change
422       struct
423       {
424          int left;
425          int right;
426          int top;
427          int bottom;
428          int left_start_y;
429          int left_end_y;
430          int right_start_y;
431          int right_end_y;
432          int top_start_x;
433          int top_end_x;
434          int bottom_start_x;
435          int bottom_end_x;
436       } strut;
437       unsigned char ping E_BITFIELD;
438       struct
439       {
440          unsigned char        request E_BITFIELD;
441          unsigned char        alarm E_BITFIELD;
442          unsigned int         wait;
443          unsigned int         serial;
444          double               send_time;
445       } sync;
446 
447       /* NetWM Window state */
448       struct
449       {
450          unsigned char modal E_BITFIELD;
451          unsigned char sticky E_BITFIELD;
452          unsigned char maximized_v E_BITFIELD;
453          unsigned char maximized_h E_BITFIELD;
454          unsigned char shaded E_BITFIELD;
455          unsigned char skip_taskbar E_BITFIELD;
456          unsigned char skip_pager E_BITFIELD;
457          unsigned char hidden E_BITFIELD;
458          unsigned char fullscreen E_BITFIELD;
459          E_Stacking    stacking;
460       } state;
461 
462       /* NetWM Window allowed actions */
463       struct
464       {
465          unsigned char move E_BITFIELD;
466          unsigned char resize E_BITFIELD;
467          unsigned char minimize E_BITFIELD;
468          unsigned char shade E_BITFIELD;
469          unsigned char stick E_BITFIELD;
470          unsigned char maximized_h E_BITFIELD;
471          unsigned char maximized_v E_BITFIELD;
472          unsigned char fullscreen E_BITFIELD;
473          unsigned char change_desktop E_BITFIELD;
474          unsigned char close E_BITFIELD;
475       } action;
476       E_Window_Type  type;
477       E_Window_Type *extra_types;
478       int                  extra_types_num;
479       int                  startup_id;
480 
481       struct
482       {
483          unsigned char name E_BITFIELD;
484          unsigned char icon_name E_BITFIELD;
485          unsigned char icon E_BITFIELD;
486          unsigned char user_time E_BITFIELD;
487          unsigned char strut E_BITFIELD;
488          unsigned char type E_BITFIELD;
489          unsigned char state E_BITFIELD;
490          unsigned char opacity E_BITFIELD;
491          /* No, fetch on new_client, shouldn't be changed after map.
492             unsigned char pid E_BITFIELD;
493           */
494          /* No, ignore this
495             unsigned char desktop E_BITFIELD;
496           */
497       } fetch;
498 
499       struct
500       {
501          unsigned char state E_BITFIELD;
502       } update;
503    } netwm;
504 
505    /* Extra e stuff */
506    struct
507    {
508       struct
509       {
510          struct
511          {
512             int           x, y;
513 
514             unsigned char updated E_BITFIELD;
515          } video_position;
516          Ecore_Window video_parent;
517          E_Client      *video_parent_client;
518          Eina_List     *video_child;
519          struct
520          {
521             Eina_Stringshare *name;
522             Eina_Stringshare **available_list;
523             Eina_Stringshare *set;
524             Eina_Stringshare *wait;
525             E_Desk           *wait_desk;
526             E_Object_Delfn   *wait_desk_delfn;
527             int               num;
528             unsigned char     wait_for_done E_BITFIELD;
529             unsigned char     use E_BITFIELD;
530          } profile;
531          Eina_Bool stack E_BITFIELD;
532          unsigned char      centered E_BITFIELD;
533          unsigned char      video E_BITFIELD;
534       } state;
535 
536       struct
537       {
538          unsigned char state E_BITFIELD;
539          unsigned char video_parent E_BITFIELD;
540          unsigned char video_position E_BITFIELD;
541          unsigned char profile E_BITFIELD;
542          unsigned char stack E_BITFIELD;
543       } fetch;
544    } e;
545 
546    struct
547    {
548       struct
549       {
550          unsigned char soft_menu E_BITFIELD;
551          unsigned char soft_menus E_BITFIELD;
552       } fetch;
553 
554       unsigned char soft_menu E_BITFIELD;
555       unsigned char soft_menus E_BITFIELD;
556    } qtopia;
557 
558    struct
559    {
560       struct
561       {
562          unsigned char state E_BITFIELD;
563          unsigned char vkbd E_BITFIELD;
564       } fetch;
565 #ifndef HAVE_WAYLAND_ONLY
566       Ecore_X_Virtual_Keyboard_State state;
567 #endif
568       unsigned char                  have_property E_BITFIELD;
569       unsigned char                  vkbd E_BITFIELD;
570    } vkbd;
571 
572    struct {
573       unsigned int steam_game_id;
574    } steam;
575 
576    struct
577    {
578       unsigned char visible E_BITFIELD;
579       unsigned char pos E_BITFIELD;
580       unsigned char size E_BITFIELD;
581       unsigned char stack E_BITFIELD;
582       unsigned char prop E_BITFIELD;
583       unsigned char border E_BITFIELD;
584       unsigned char reset_gravity E_BITFIELD;
585       unsigned char shading E_BITFIELD;
586       unsigned char shaded E_BITFIELD;
587       unsigned char shape E_BITFIELD;
588       unsigned char shape_input E_BITFIELD;
589       unsigned char icon E_BITFIELD;
590       Eina_Bool internal_state E_BITFIELD;
591       Eina_Bool need_maximize E_BITFIELD;
592       Eina_Bool need_unmaximize E_BITFIELD;
593       Eina_Bool need_rescale E_BITFIELD;
594    } changes;
595 
596    unsigned int       visible E_BITFIELD; // client is set to be visible by display server (never use this)
597    unsigned int       hidden E_BITFIELD; // set when window has been hidden by api and should not be shown
598    unsigned int       moving E_BITFIELD;
599    unsigned int       focused E_BITFIELD;
600    unsigned int       new_client E_BITFIELD;
601    unsigned int       re_manage E_BITFIELD; // client is persisting from before E restart
602    unsigned int       placed E_BITFIELD;
603    unsigned int       shading E_BITFIELD;
604    unsigned int       shaded E_BITFIELD;
605    unsigned int       iconic E_BITFIELD;
606    unsigned int       deskshow E_BITFIELD;
607    unsigned int       sticky E_BITFIELD;
608    unsigned int       urgent E_BITFIELD;
609    unsigned int       shaped_input E_BITFIELD;
610    unsigned int       need_shape_merge E_BITFIELD;
611    unsigned int       need_shape_export E_BITFIELD;
612    unsigned int       fullscreen E_BITFIELD;
613    unsigned int       need_fullscreen E_BITFIELD;
614    unsigned int       already_unparented E_BITFIELD;
615    unsigned int       need_reparent E_BITFIELD;
616    unsigned int       button_grabbed E_BITFIELD;
617    unsigned int       delete_requested E_BITFIELD;
618    unsigned int       ping_ok E_BITFIELD;
619    unsigned int       hung E_BITFIELD;
620    unsigned int       take_focus E_BITFIELD;
621    unsigned int       want_focus E_BITFIELD;
622    unsigned int       user_skip_winlist E_BITFIELD;
623    E_Maximize         maximized;
624    E_Fullscreen       fullscreen_policy;
625    unsigned int       borderless E_BITFIELD;
626    unsigned char      offer_resistance E_BITFIELD;
627    Eina_Stringshare  *bordername;
628 
629    unsigned int       lock_user_location E_BITFIELD; /*DONE*/
630    unsigned int       lock_client_location E_BITFIELD; /*DONE*/
631    unsigned int       lock_user_size E_BITFIELD; /*DONE*/
632    unsigned int       lock_client_size E_BITFIELD; /*DONE*/
633    unsigned int       lock_user_stacking E_BITFIELD; /*DONE*/
634    unsigned int       lock_client_stacking E_BITFIELD; /*DONE*/
635    unsigned int       lock_user_iconify E_BITFIELD; /*DONE*/
636    unsigned int       lock_client_iconify E_BITFIELD; /*DONE*/
637    unsigned int       lock_user_desk E_BITFIELD;
638    unsigned int       lock_client_desk E_BITFIELD;
639    unsigned int       lock_user_sticky E_BITFIELD; /*DONE*/
640    unsigned int       lock_client_sticky E_BITFIELD; /*DONE*/
641    unsigned int       lock_user_shade E_BITFIELD; /*DONE*/
642    unsigned int       lock_client_shade E_BITFIELD; /*DONE*/
643    unsigned int       lock_user_maximize E_BITFIELD; /*DONE*/
644    unsigned int       lock_client_maximize E_BITFIELD; /*DONE*/
645    unsigned int       lock_user_fullscreen E_BITFIELD; /*DONE*/
646    unsigned int       lock_client_fullscreen E_BITFIELD; /*DONE*/
647    unsigned int       lock_border E_BITFIELD; /*DONE*/
648    unsigned int       lock_close E_BITFIELD; /*DONE*/
649    unsigned int       lock_focus_in E_BITFIELD; /*DONE*/
650    unsigned int       lock_focus_out E_BITFIELD; /*DONE*/
651    unsigned int       lock_life E_BITFIELD; /*DONE*/
652 
653    unsigned int       stolen E_BITFIELD;
654 
655    unsigned int       internal E_BITFIELD;
656    unsigned int       internal_no_remember E_BITFIELD;
657    unsigned int       internal_no_reopen E_BITFIELD;
658 
659    unsigned int       next_mouse_action_ignore E_BITFIELD;
660 
661    Evas_Object       *internal_elm_win;
662 
663    double             ping;
664 
665    unsigned char      changed E_BITFIELD;
666 
667    unsigned char      icon_preference;
668 
669    struct
670    {
671       int x, y;
672       int modified;
673    } shelf_fix;
674 
675    Eina_List       *stick_desks;
676    E_Menu          *border_menu;
677    Evas_Object     *color_editor;
678    E_Config_Dialog *border_locks_dialog;
679    E_Config_Dialog *border_remember_dialog;
680    E_Config_Dialog *border_border_dialog;
681    E_Dialog        *border_prop_dialog;
682    Eina_List       *pending_resize;
683 
684    struct
685    {
686       unsigned char start E_BITFIELD;
687       int           x, y;
688    } drag;
689 
690    Ecore_Timer               *raise_timer;
691    E_Client_Move_Intercept_Cb move_intercept_cb;
692    E_Remember                *remember;
693    E_Remember                *sr_remember;
694 
695    Efreet_Desktop            *desktop;
696    E_Exec_Instance           *exe_inst;
697 
698    unsigned char              comp_hidden   E_BITFIELD;
699 
700    unsigned char              post_move   E_BITFIELD;
701    unsigned char              post_resize E_BITFIELD;
702    unsigned char              post_show E_BITFIELD;
703    unsigned char              during_lost E_BITFIELD;
704 
705    Ecore_Idle_Enterer        *post_job;
706 
707    E_Focus_Policy             focus_policy_override;
708 
709    Eina_Stringshare *uuid;
710 
711    Eina_List *sinks;
712    int volume;
713    int volume_min;
714    int volume_max;
715    unsigned char mute E_BITFIELD;
716    unsigned char volume_control_enabled E_BITFIELD;
717 
718    Eina_Bool override E_BITFIELD;
719    Eina_Bool input_only E_BITFIELD;
720    Eina_Bool dialog E_BITFIELD;
721    Eina_Bool tooltip E_BITFIELD;
722    Eina_Bool redirected E_BITFIELD;
723    Eina_Bool unredirected_single E_BITFIELD; //window has been selectively unredirected
724    Eina_Bool shape_changed E_BITFIELD;
725    Eina_Bool layer_block E_BITFIELD; // client is doing crazy stuff and should not be relayered in protocol
726    Eina_Bool ignored E_BITFIELD; // client is comp-ignored
727    Eina_Bool no_shape_cut E_BITFIELD; // client shape should not be cut
728    Eina_Bool maximize_override E_BITFIELD; // client is doing crazy stuff and should "just do it" when moving/resizing
729    Eina_Bool maximize_anims_disabled E_BITFIELD; // client cannot invoke anims or it will break
730    Eina_Bool keyboard_resizing E_BITFIELD;
731 
732    Eina_Bool on_post_updates E_BITFIELD; // client is on the post update list
733 };
734 
735 #define e_client_focus_policy_click(ec) \
736   ((ec->focus_policy_override == E_FOCUS_CLICK) || (e_config->focus_policy == E_FOCUS_CLICK))
737 
738 /* macro for finding misuse of changed flag */
739 #if 0
740 # define EC_CHANGED(EC) \
741   do { \
742      if (e_object_is_del(E_OBJECT(EC))) \
743        EINA_LOG_CRIT("CHANGED SET ON DELETED CLIENT!"); \
744      EC->changed = 1; \
745      INF("%s:%d - EC CHANGED: %p", __FILE__, __LINE__, EC); \
746   } while (0)
747 #else
748 # define EC_CHANGED(EC) EC->changed = 1
749 #endif
750 
751 #define E_CLIENT_FOREACH(EC) \
752   for (EC = e_client_bottom_get(); EC; EC = e_client_above_get(EC))
753 
754 #define E_CLIENT_REVERSE_FOREACH(EC) \
755   for (EC = e_client_top_get(); EC; EC = e_client_below_get(EC))
756 
757 
758 E_API extern int E_EVENT_CLIENT_ADD;
759 E_API extern int E_EVENT_CLIENT_REMOVE;
760 E_API extern int E_EVENT_CLIENT_ZONE_SET;
761 E_API extern int E_EVENT_CLIENT_DESK_SET;
762 E_API extern int E_EVENT_CLIENT_RESIZE;
763 E_API extern int E_EVENT_CLIENT_MOVE;
764 E_API extern int E_EVENT_CLIENT_SHOW;
765 E_API extern int E_EVENT_CLIENT_HIDE;
766 E_API extern int E_EVENT_CLIENT_ICONIFY;
767 E_API extern int E_EVENT_CLIENT_UNICONIFY;
768 E_API extern int E_EVENT_CLIENT_STACK;
769 E_API extern int E_EVENT_CLIENT_FOCUS_IN;
770 E_API extern int E_EVENT_CLIENT_FOCUS_OUT;
771 E_API extern int E_EVENT_CLIENT_PROPERTY;
772 E_API extern int E_EVENT_CLIENT_FULLSCREEN;
773 E_API extern int E_EVENT_CLIENT_UNFULLSCREEN;
774 
775 
776 
777 EINTERN void e_client_idler_before(void);
778 EINTERN Eina_Bool e_client_init(void);
779 EINTERN void e_client_shutdown(void);
780 E_API E_Client *e_client_new(E_Pixmap *cp, int first_map, int internal);
781 E_API void e_client_unignore(E_Client *ec);
782 E_API void e_client_desk_set(E_Client *ec, E_Desk *desk);
783 E_API Eina_Bool e_client_comp_grabbed_get(void);
784 E_API E_Client *e_client_action_get(void);
785 E_API E_Client *e_client_warping_get(void);
786 E_API Eina_List *e_clients_immortal_list(void);
787 E_API void e_client_mouse_in(E_Client *ec, int x, int y);
788 E_API void e_client_mouse_out(E_Client *ec, int x, int y);
789 E_API void e_client_mouse_wheel(E_Client *ec, Evas_Point *output, E_Binding_Event_Wheel *ev);
790 E_API void e_client_mouse_down(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev);
791 E_API void e_client_mouse_up(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button* ev);
792 E_API void e_client_mouse_move(E_Client *ec, Evas_Point *output);
793 E_API void e_client_res_change_geometry_save(E_Client *bd);
794 E_API void e_client_res_change_geometry_restore(E_Client *ec);
795 E_API void e_client_rescale(E_Client *ec);
796 E_API void e_client_zone_set(E_Client *ec, E_Zone *zone);
797 E_API void e_client_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h);
798 E_API E_Client *e_client_above_get(const E_Client *ec);
799 E_API E_Client *e_client_below_get(const E_Client *ec);
800 E_API E_Client *e_client_bottom_get(void);
801 E_API E_Client *e_client_top_get(void);
802 E_API unsigned int e_clients_count(void);
803 E_API void e_client_move_intercept_cb_set(E_Client *ec, E_Client_Move_Intercept_Cb cb);
804 E_API E_Client_Hook *e_client_hook_add(E_Client_Hook_Point hookpoint, E_Client_Hook_Cb func, const void *data);
805 E_API void e_client_hook_del(E_Client_Hook *ch);
806 E_API void e_client_focus_latest_set(E_Client *ec);
807 E_API void e_client_raise_latest_set(E_Client *ec);
808 E_API Eina_Bool e_client_focus_track_enabled(void);
809 E_API void e_client_focus_track_freeze(void);
810 E_API void e_client_focus_track_thaw(void);
811 E_API void e_client_refocus(void);
812 E_API void e_client_focus_set_with_pointer(E_Client *ec);
813 E_API void e_client_activate(E_Client *ec, Eina_Bool just_do_it);
814 E_API E_Client *e_client_focused_get(void);
815 E_API Eina_List *e_client_focus_stack_get(void);
816 E_API Eina_List *e_client_raise_stack_get(void);
817 E_API Eina_List *e_client_lost_windows_get(E_Zone *zone);
818 E_API void e_client_shade(E_Client *ec, E_Direction dir);
819 E_API void e_client_unshade(E_Client *ec, E_Direction dir);
820 E_API Eina_Bool e_client_maximize_geometry_get(const E_Client *ec, E_Maximize max, int *mx, int *my, int *mw, int *mh);
821 E_API void e_client_maximize(E_Client *ec, E_Maximize max);
822 E_API Eina_Bool e_client_unmaximize_geometry_get(const E_Client *ec, E_Maximize max, int *mx, int *my, int *mw, int *mh);
823 E_API void e_client_unmaximize(E_Client *ec, E_Maximize max);
824 E_API void e_client_fullscreen(E_Client *ec, E_Fullscreen policy);
825 E_API void e_client_unfullscreen(E_Client *ec);
826 E_API void e_client_iconify(E_Client *ec);
827 E_API void e_client_uniconify(E_Client *ec);
828 E_API void e_client_urgent_set(E_Client *ec, Eina_Bool urgent);
829 E_API void e_client_stick(E_Client *ec);
830 E_API void e_client_unstick(E_Client *ec);
831 E_API void e_client_pinned_set(E_Client *ec, Eina_Bool set);
832 E_API void e_client_prop_misc_changed(E_Client *ec);
833 E_API void e_client_comp_hidden_set(E_Client *ec, Eina_Bool hidden);
834 E_API Eina_Bool e_client_border_set(E_Client *ec, const char *name);
835 E_API void e_client_act_move_keyboard(E_Client *ec);
836 E_API void e_client_act_resize_keyboard(E_Client *ec);
837 E_API void e_client_act_move_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev);
838 E_API void e_client_act_move_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
839 E_API void e_client_act_resize_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev);
840 E_API void e_client_act_resize_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
841 E_API void e_client_act_menu_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev, int key);
842 E_API void e_client_act_close_begin(E_Client *ec);
843 E_API void e_client_act_kill_begin(E_Client *ec);
844 E_API Evas_Object *e_client_icon_add(E_Client *ec, Evas *evas);
845 E_API void e_client_ping(E_Client *cw);
846 E_API void e_client_move_cancel(void);
847 E_API void e_client_resize_cancel(void);
848 E_API Eina_Bool e_client_resize_begin(E_Client *ec);
849 E_API void e_client_frame_recalc(E_Client *ec);
850 E_API void e_client_signal_move_begin(E_Client *ec, const char *sig, const char *src EINA_UNUSED);
851 E_API void e_client_signal_move_end(E_Client *ec, const char *sig EINA_UNUSED, const char *src EINA_UNUSED);
852 E_API void e_client_signal_resize_begin(E_Client *ec, const char *dir, const char *sig, const char *src EINA_UNUSED);
853 E_API void e_client_signal_resize_end(E_Client *ec, const char *dir EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED);
854 E_API void e_client_resize_limit(const E_Client *ec, int *w, int *h);
855 E_API E_Client *e_client_under_pointer_get(E_Desk *desk, E_Client *exclude);
856 E_API int e_client_pointer_warp_to_center_now(E_Client *ec);
857 E_API int e_client_pointer_warp_to_center(E_Client *ec);
858 E_API void e_client_redirected_set(E_Client *ec, Eina_Bool set);
859 E_API void e_client_next_mouse_action_ignore(E_Client *ec);
860 E_API Eina_Bool e_client_is_stacking(const E_Client *ec);
861 E_API Eina_Bool e_client_has_xwindow(const E_Client *ec);
862 E_API Eina_Bool e_client_desk_window_profile_available_check(E_Client *ec, const char *profile);
863 E_API void      e_client_desk_window_profile_wait_desk_set(E_Client *ec, E_Desk *desk);
864 E_API void      e_client_layout_cb_set(E_Client_Layout_Cb cb);
865 E_API Eina_List *e_client_stack_list_prepare(E_Client *ec);
866 E_API void       e_client_stack_list_finish(Eina_List *list);
867 E_API E_Client  *e_client_stack_top_get(E_Client *ec);
868 E_API E_Client  *e_client_stack_bottom_get(E_Client *ec);
869 E_API E_Client  *e_client_stack_active_adjust(E_Client *ec);
870 E_API Eina_Bool  e_client_stack_focused_get(E_Client *ec);
871 E_API Eina_Bool  e_client_stack_iconified_get(E_Client *ec);
872 E_API Eina_Bool  e_client_stack_urgent_get(E_Client *ec);
873 
874 YOLO E_API void e_client_focus_stack_set(Eina_List *l);
875 
876 E_API void e_client_parent_set(E_Client *ec, E_Client *parent);
877 E_API void e_client_transients_restack(E_Client *ec);
878 #include "e_client.x"
879 #endif
880