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