ewmh.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*
  2. * wmfs2 by Martin Duquesnoy <xorg62@gmail.com> { for(i = 2011; i < 2111; ++i) ©(i); }
  3. * For license, see COPYING.
  4. */
  5. #ifndef EWMH_H
  6. #define EWMH_H
  7. #include <X11/Xatom.h>
  8. #include <X11/Xutil.h>
  9. #include "wmfs.h"
  10. #include "util.h"
  11. /* EWMH/Xembed const from freedesktop */
  12. #define XEMBED_MAPPED (1 << 0)
  13. #define XEMBED_EMBEDDED_NOTIFY 0
  14. #define XEMBED_WINDOW_ACTIVATE 1
  15. #define XEMBED_WINDOW_DEACTIVATE 2
  16. #define XEMBED_REQUEST_FOCUS 3
  17. #define XEMBED_FOCUS_IN 4
  18. #define XEMBED_FOCUS_OUT 5
  19. #define XEMBED_FOCUS_NEXT 6
  20. #define XEMBED_FOCUS_PREV 7
  21. /* 8-9 were used for XEMBED_GRAB_KEY/XEMBED_UNGRAB_KEY */
  22. #define XEMBED_MODALITY_ON 10
  23. #define XEMBED_MODALITY_OFF 11
  24. #define XEMBED_REGISTER_ACCELERATOR 12
  25. #define XEMBED_UNREGISTER_ACCELERATOR 13
  26. #define XEMBED_ACTIVATE_ACCELERATOR 14
  27. /* Details for XEMBED_FOCUS_IN: */
  28. #define XEMBED_FOCUS_CURRENT 0
  29. #define XEMBED_FOCUS_FIRST 1
  30. #define XEMBED_FOCUS_LAST 2
  31. /* Ewmh hints list */
  32. enum
  33. {
  34. /* ICCCM */
  35. wm_state,
  36. wm_class,
  37. wm_name,
  38. /* EWMH */
  39. net_supported,
  40. net_wm_name,
  41. net_client_list,
  42. net_frame_extents,
  43. net_number_of_desktops,
  44. net_current_desktop,
  45. net_desktop_names,
  46. net_desktop_geometry,
  47. net_active_window,
  48. net_close_window,
  49. net_wm_icon_name,
  50. net_wm_window_type,
  51. net_wm_pid,
  52. net_showing_desktop,
  53. net_supporting_wm_check,
  54. net_wm_window_opacity,
  55. net_wm_window_type_normal,
  56. net_wm_window_type_desktop,
  57. net_wm_window_type_dock,
  58. net_wm_window_type_splash,
  59. net_wm_window_type_dialog,
  60. net_wm_desktop,
  61. net_wm_icon,
  62. net_wm_state,
  63. net_wm_state_fullscreen,
  64. net_wm_state_sticky,
  65. net_wm_state_demands_attention,
  66. net_wm_state_hidden,
  67. net_system_tray_opcode,
  68. net_system_tray_message_data,
  69. net_system_tray_s,
  70. net_system_tray_visual,
  71. net_system_tray_orientation,
  72. xembed,
  73. xembedinfo,
  74. manager,
  75. utf8_string,
  76. /* WMFS HINTS */
  77. wmfs_running,
  78. wmfs_focus,
  79. wmfs_update_hints,
  80. wmfs_current_tag,
  81. wmfs_current_screen,
  82. wmfs_current_layout,
  83. wmfs_tag_list,
  84. wmfs_mwfact,
  85. wmfs_nmaster,
  86. wmfs_set_screen,
  87. wmfs_screen_count,
  88. wmfs_function,
  89. wmfs_cmd,
  90. wmfs_font,
  91. wmfs_statustext,
  92. net_last
  93. };
  94. static inline void
  95. ewmh_send_message(Window d, Window w, char *atom, long d0, long d1, long d2, long d3, long d4)
  96. {
  97. XClientMessageEvent e;
  98. e.type = ClientMessage;
  99. e.message_type = ATOM(atom);
  100. e.window = w;
  101. e.format = 32;
  102. e.data.l[0] = d0;
  103. e.data.l[1] = d1;
  104. e.data.l[2] = d2;
  105. e.data.l[3] = d3;
  106. e.data.l[4] = d4;
  107. XSendEvent(W->dpy, d, false, StructureNotifyMask, (XEvent*)&e);
  108. XSync(W->dpy, False);
  109. }
  110. void ewmh_init(void);
  111. void ewmh_set_wm_state(Window w, int state);
  112. void ewmh_get_client_list(void);
  113. long ewmh_get_xembed_state(Window win);
  114. void ewmh_update_wmfs_props(void);
  115. void ewmh_manage_state(long data[], struct client *c);
  116. bool ewmh_manage_state_sticky(Window win);
  117. void ewmh_manage_window_type(struct client *c);
  118. bool ewmh_manage_window_type_desktop(Window win);
  119. #endif /* EWMH_H */