summaryrefslogtreecommitdiff
path: root/elpa/xelb-0.20/xcb-ewmh.el
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2025-04-01 18:10:15 +0000
committerthing1 <thing1@seacrossedlovers.xyz>2025-04-01 18:10:15 +0000
commitdabaff03992c102c395314629f63ce93a2c1bd3a (patch)
tree990472507186637085165b7cbbf7abf15c10889a /elpa/xelb-0.20/xcb-ewmh.el
init commit
Diffstat (limited to 'elpa/xelb-0.20/xcb-ewmh.el')
-rw-r--r--elpa/xelb-0.20/xcb-ewmh.el752
1 files changed, 752 insertions, 0 deletions
diff --git a/elpa/xelb-0.20/xcb-ewmh.el b/elpa/xelb-0.20/xcb-ewmh.el
new file mode 100644
index 0000000..98bdd97
--- /dev/null
+++ b/elpa/xelb-0.20/xcb-ewmh.el
@@ -0,0 +1,752 @@
+;;; xcb-ewmh.el --- Extended Window Manager Hints -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2024 Free Software Foundation, Inc.
+
+;; Author: Chris Feng <chris.w.feng@gmail.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library implements EWMH the same way as xcb/util-wm.
+
+;; Usage tips:
+;; + Do not forget to call `xcb:ewmh:init' for _every_ connection using
+;; this library.
+;; + Use `xcb:ewmh:SendEvent' instead of `xcb:SendEvent' to send client
+;; messages defined in this library.
+;; + Initializing this library auto loads and initializes 'xcb-icccm'.
+
+;; References:
+;; + EWMH (http://standards.freedesktop.org/wm-spec/wm-spec-latest.html)
+;; + xcb/util-wm (git://anongit.freedesktop.org/xcb/util-wm)
+
+;;; Code:
+
+(require 'xcb)
+(require 'xcb-icccm)
+
+;;;; EWMH Atoms
+
+(eval-and-compile
+ (defconst xcb:ewmh:-atoms
+ '( ;; Root Window Properties (and Related Messages)
+ _NET_SUPPORTED
+ _NET_CLIENT_LIST
+ _NET_CLIENT_LIST_STACKING
+ _NET_NUMBER_OF_DESKTOPS
+ _NET_DESKTOP_GEOMETRY
+ _NET_DESKTOP_VIEWPORT
+ _NET_CURRENT_DESKTOP
+ _NET_DESKTOP_NAMES
+ _NET_ACTIVE_WINDOW
+ _NET_WORKAREA
+ _NET_SUPPORTING_WM_CHECK
+ _NET_VIRTUAL_ROOTS
+ _NET_DESKTOP_LAYOUT
+ _NET_SHOWING_DESKTOP
+ ;; Other Root Window Messages
+ _NET_CLOSE_WINDOW
+ _NET_MOVERESIZE_WINDOW
+ _NET_WM_MOVERESIZE
+ _NET_RESTACK_WINDOW
+ _NET_REQUEST_FRAME_EXTENTS
+ ;; Application Window Properties
+ _NET_WM_NAME
+ _NET_WM_VISIBLE_NAME
+ _NET_WM_ICON_NAME
+ _NET_WM_VISIBLE_ICON_NAME
+ _NET_WM_DESKTOP
+ _NET_WM_WINDOW_TYPE
+ _NET_WM_STATE
+ _NET_WM_ALLOWED_ACTIONS
+ _NET_WM_STRUT
+ _NET_WM_STRUT_PARTIAL
+ _NET_WM_ICON_GEOMETRY
+ _NET_WM_ICON
+ _NET_WM_PID
+ _NET_WM_HANDLED_ICONS
+ _NET_WM_USER_TIME
+ _NET_WM_USER_TIME_WINDOW
+ _NET_FRAME_EXTENTS
+ _NET_WM_OPAQUE_REGION
+ _NET_WM_BYPASS_COMPOSITOR
+ ;; Window Manager Protocols
+ _NET_WM_PING
+ _NET_WM_SYNC_REQUEST
+ _NET_WM_SYNC_REQUEST_COUNTER
+ _NET_WM_FULLSCREEN_MONITORS
+ ;; Other Properties
+ _NET_WM_FULL_PLACEMENT
+ _NET_WM_CM_S0 ;_NET_WM_CM_Sn (n = 1, 2, ...) are left out here.
+ ;; _NET_WM_WINDOW_TYPE hint
+ _NET_WM_WINDOW_TYPE_DESKTOP
+ _NET_WM_WINDOW_TYPE_DOCK
+ _NET_WM_WINDOW_TYPE_TOOLBAR
+ _NET_WM_WINDOW_TYPE_MENU
+ _NET_WM_WINDOW_TYPE_UTILITY
+ _NET_WM_WINDOW_TYPE_SPLASH
+ _NET_WM_WINDOW_TYPE_DIALOG
+ _NET_WM_WINDOW_TYPE_DROPDOWN_MENU
+ _NET_WM_WINDOW_TYPE_POPUP_MENU
+ _NET_WM_WINDOW_TYPE_TOOLTIP
+ _NET_WM_WINDOW_TYPE_NOTIFICATION
+ _NET_WM_WINDOW_TYPE_COMBO
+ _NET_WM_WINDOW_TYPE_DND
+ _NET_WM_WINDOW_TYPE_NORMAL
+ ;; _NET_WM_STATE hint
+ _NET_WM_STATE_MODAL
+ _NET_WM_STATE_STICKY
+ _NET_WM_STATE_MAXIMIZED_VERT
+ _NET_WM_STATE_MAXIMIZED_HORZ
+ _NET_WM_STATE_SHADED
+ _NET_WM_STATE_SKIP_TASKBAR
+ _NET_WM_STATE_SKIP_PAGER
+ _NET_WM_STATE_HIDDEN
+ _NET_WM_STATE_FULLSCREEN
+ _NET_WM_STATE_ABOVE
+ _NET_WM_STATE_BELOW
+ _NET_WM_STATE_DEMANDS_ATTENTION
+ _NET_WM_STATE_FOCUSED
+ ;; _NET_WM_ACTION hint
+ _NET_WM_ACTION_MOVE
+ _NET_WM_ACTION_RESIZE
+ _NET_WM_ACTION_MINIMIZE
+ _NET_WM_ACTION_SHADE
+ _NET_WM_ACTION_STICK
+ _NET_WM_ACTION_MAXIMIZE_HORZ
+ _NET_WM_ACTION_MAXIMIZE_VERT
+ _NET_WM_ACTION_FULLSCREEN
+ _NET_WM_ACTION_CHANGE_DESKTOP
+ _NET_WM_ACTION_CLOSE
+ _NET_WM_ACTION_ABOVE
+ _NET_WM_ACTION_BELOW)
+ "EWMH atoms.")
+
+ (dolist (atom xcb:ewmh:-atoms)
+ (eval `(defvar ,(intern (concat "xcb:Atom:" (symbol-name atom))) nil))))
+
+(cl-defmethod xcb:ewmh:init ((obj xcb:connection) &optional force)
+ "Initialize EWMH module.
+
+This method must be called before using any other method in this module.
+
+This method also initializes ICCCM module automatically."
+ (when (or force (not xcb:Atom:_NET_SUPPORTED))
+ (xcb:icccm:init obj) ;required
+ (let ((atoms xcb:ewmh:-atoms))
+ (dotimes (i (1- (x-display-screens)))
+ (push (intern (format "_NET_WM_CM_S%d" (1+ i))) atoms))
+ (xcb:icccm:intern-atoms obj atoms force))))
+
+;;;; Client message
+
+(defclass xcb:ewmh:SendEvent (xcb:SendEvent)
+ ((propagate :initform 0)
+ (event-mask :initform (logior xcb:EventMask:SubstructureNotify
+ xcb:EventMask:SubstructureRedirect)))
+ :documentation "A fork of `xcb:SendEvent' to send EWMH client message.
+
+Note that this only applies to \"sending a message to the root window\" in
+EWMH")
+
+(defclass xcb:ewmh:-ClientMessage (xcb:icccm:--ClientMessage xcb:ClientMessage)
+ ((format :initform 32)))
+
+;;;; Abstract classes for getting/changing (UTF-8) string properties
+
+(defclass xcb:ewmh:-GetProperty-utf8 (xcb:icccm:-GetProperty-text)
+ ((type :initform 'xcb:Atom:UTF8_STRING))
+ :documentation "Get an EWMH UTF-8 text property (request part).")
+(defclass xcb:ewmh:-GetProperty-utf8~reply (xcb:icccm:-GetProperty-text~reply)
+ nil
+ :documentation "Get an EWMH UTF-8 text property (reply part).")
+(defclass xcb:ewmh:-ChangeProperty-utf8 (xcb:icccm:-ChangeProperty-text)
+ ((type :initform 'xcb:Atom:UTF8_STRING))
+ :documentation "Change an EWMH UTF-8 text property.")
+
+;;;; Root Window Properties (and Related Messages)
+
+;; _NET_SUPPORTED
+(defclass xcb:ewmh:get-_NET_SUPPORTED (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_SUPPORTED)
+ (type :initform 'xcb:Atom:ATOM)))
+(defclass xcb:ewmh:get-_NET_SUPPORTED~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_SUPPORTED (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_SUPPORTED)
+ (type :initform 'xcb:Atom:ATOM)))
+
+;; _NET_CLIENT_LIST
+(defclass xcb:ewmh:get-_NET_CLIENT_LIST (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_CLIENT_LIST)
+ (type :initform 'xcb:Atom:WINDOW)))
+(defclass xcb:ewmh:get-_NET_CLIENT_LIST~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_CLIENT_LIST (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_CLIENT_LIST)
+ (type :initform 'xcb:Atom:WINDOW)))
+
+;; _NET_CLIENT_LIST_STACKING
+(defclass xcb:ewmh:get-_NET_CLIENT_LIST_STACKING (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_CLIENT_LIST_STACKING)
+ (type :initform 'xcb:Atom:WINDOW)))
+(defclass xcb:ewmh:get-_NET_CLIENT_LIST_STACKING~reply
+ (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_CLIENT_LIST_STACKING (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_CLIENT_LIST_STACKING)
+ (type :initform 'xcb:Atom:WINDOW)))
+
+;; _NET_NUMBER_OF_DESKTOPS
+(defclass xcb:ewmh:get-_NET_NUMBER_OF_DESKTOPS (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_NUMBER_OF_DESKTOPS)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_NUMBER_OF_DESKTOPS~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_NUMBER_OF_DESKTOPS
+ (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_NUMBER_OF_DESKTOPS)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_DESKTOP_GEOMETRY
+(defclass xcb:ewmh:-_NET_DESKTOP_GEOMETRY (xcb:--struct)
+ ((width :initarg :width :type xcb:-ignore)
+ (height :initarg :height :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_DESKTOP_GEOMETRY (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_GEOMETRY)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 2)))
+(defclass xcb:ewmh:get-_NET_DESKTOP_GEOMETRY~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_DESKTOP_GEOMETRY)
+ nil)
+(defclass xcb:ewmh:set-_NET_DESKTOP_GEOMETRY
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_DESKTOP_GEOMETRY)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_GEOMETRY)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:_NET_DESKTOP_GEOMETRY
+ (xcb:ewmh:-ClientMessage xcb:ewmh:-_NET_DESKTOP_GEOMETRY)
+ ((type :initform 'xcb:Atom:_NET_DESKTOP_GEOMETRY)))
+
+;; _NET_DESKTOP_VIEWPORT
+(defclass xcb:ewmh:get-_NET_DESKTOP_VIEWPORT (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_VIEWPORT)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_DESKTOP_VIEWPORT~reply
+ (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_DESKTOP_VIEWPORT (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_VIEWPORT)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:_NET_DESKTOP_VIEWPORT (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_DESKTOP_VIEWPORT)
+ (new-vx :initarg :new-vx :type xcb:CARD32)
+ (new-vy :initarg :new-vy :type xcb:CARD32)))
+
+;; _NET_CURRENT_DESKTOP
+(defclass xcb:ewmh:get-_NET_CURRENT_DESKTOP (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_CURRENT_DESKTOP)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_CURRENT_DESKTOP~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_CURRENT_DESKTOP (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_CURRENT_DESKTOP)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:_NET_CURRENT_DESKTOP (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_CURRENT_DESKTOP)
+ (new-index :initarg :new-index :type xcb:CARD32)
+ (timestamp :initarg :timestamp :type xcb:CARD32)))
+
+;; _NET_DESKTOP_NAMES
+(defclass xcb:ewmh:get-_NET_DESKTOP_NAMES (xcb:ewmh:-GetProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_NAMES)))
+(defclass xcb:ewmh:get-_NET_DESKTOP_NAMES~reply
+ (xcb:ewmh:-GetProperty-utf8~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_DESKTOP_NAMES (xcb:ewmh:-ChangeProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_NAMES)))
+
+;; _NET_ACTIVE_WINDOW
+(defclass xcb:ewmh:get-_NET_ACTIVE_WINDOW (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_ACTIVE_WINDOW)
+ (type :initform 'xcb:Atom:WINDOW)))
+(defclass xcb:ewmh:get-_NET_ACTIVE_WINDOW~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_ACTIVE_WINDOW (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_ACTIVE_WINDOW)
+ (type :initform 'xcb:Atom:WINDOW)))
+(defclass xcb:ewmh:_NET_ACTIVE_WINDOW (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_ACTIVE_WINDOW)
+ (source-indication :initarg :source-indication :type xcb:CARD32)
+ (timestamp :initarg :timestamp :type xcb:CARD32)
+ (current-active-window :initarg :current-active-window :type xcb:WINDOW)))
+
+;; _NET_WORKAREA
+(defclass xcb:ewmh:get-_NET_WORKAREA (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_WORKAREA)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WORKAREA~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WORKAREA (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_WORKAREA)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_SUPPORTING_WM_CHECK
+(defclass xcb:ewmh:get-_NET_SUPPORTING_WM_CHECK (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_SUPPORTING_WM_CHECK)
+ (type :initform 'xcb:Atom:WINDOW)))
+(defclass xcb:ewmh:get-_NET_SUPPORTING_WM_CHECK~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_SUPPORTING_WM_CHECK
+ (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_SUPPORTING_WM_CHECK)
+ (type :initform 'xcb:Atom:WINDOW)))
+
+;; _NET_VIRTUAL_ROOTS
+(defclass xcb:ewmh:get-_NET_VIRTUAL_ROOTS (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_VIRTUAL_ROOTS)
+ (type :initform 'xcb:Atom:WINDOW)))
+(defclass xcb:ewmh:get-_NET_VIRTUAL_ROOTS~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_VIRTUAL_ROOTS (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_VIRTUAL_ROOTS)
+ (type :initform 'xcb:Atom:WINDOW)))
+
+;; _NET_DESKTOP_LAYOUT
+;; Orientations
+(defconst xcb:ewmh:_NET_WM_ORIENTATION_HORZ 0)
+(defconst xcb:ewmh:_NET_WM_ORIENTATION_VERT 1)
+;; Starting corners
+(defconst xcb:ewmh:_NET_WM_TOPLEFT 0)
+(defconst xcb:ewmh:_NET_WM_TOPRIGHT 1)
+(defconst xcb:ewmh:_NET_WM_BOTTOMRIGHT 2)
+(defconst xcb:ewmh:_NET_WM_BOTTOMLEFT 3)
+;;
+(defclass xcb:ewmh:-_NET_DESKTOP_LAYOUT (xcb:--struct)
+ ((orientation :initarg :orientation :type xcb:-ignore)
+ (columns :initarg :columns :type xcb:-ignore)
+ (rows :initarg :rows :type xcb:-ignore)
+ (starting-corner :initarg :starting-corner :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_DESKTOP_LAYOUT (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_LAYOUT)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 4)))
+(defclass xcb:ewmh:get-_NET_DESKTOP_LAYOUT~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_DESKTOP_LAYOUT)
+ nil)
+(defclass xcb:ewmh:set-_NET_DESKTOP_LAYOUT
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_DESKTOP_LAYOUT)
+ ((property :initform 'xcb:Atom:_NET_DESKTOP_LAYOUT)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_SHOWING_DESKTOP
+(defclass xcb:ewmh:get-_NET_SHOWING_DESKTOP (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_SHOWING_DESKTOP)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_SHOWING_DESKTOP~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_SHOWING_DESKTOP (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_SHOWING_DESKTOP)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:_NET_SHOWING_DESKTOP (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_SHOWING_DESKTOP)
+ (show :initarg :show :type xcb:CARD32)))
+
+;;;; Other Root Window Messages
+
+;; _NET_CLOSE_WINDOW
+(defclass xcb:ewmh:_NET_CLOSE_WINDOW (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_CLOSE_WINDOW)
+ (timestamp :initarg :timestamp :type xcb:CARD32)
+ (source-indication :initarg :source-indication :type xcb:CARD32)))
+
+;; _NET_MOVERESIZE_WINDOW
+(defclass xcb:ewmh:_NET_MOVERESIZE_WINDOW (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_MOVERESIZE_WINDOW)
+ (gravity-and-flags :initarg :gravity-and-flags :type xcb:CARD32)
+ (x :initarg :x :type xcb:CARD32)
+ (y :initarg :y :type xcb:CARD32)
+ (width :initarg :width :type xcb:CARD32)
+ (height :initarg :height :type xcb:CARD32)))
+
+;; _NET_WM_MOVERESIZE
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_TOPLEFT 0)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_TOP 1)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_TOPRIGHT 2)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_RIGHT 3)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_BOTTOM 5)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT 6)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_LEFT 7)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_MOVE 8)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_KEYBOARD 9)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_MOVE_KEYBOARD 10)
+(defconst xcb:ewmh:_NET_WM_MOVERESIZE_CANCEL 11)
+;;
+(defclass xcb:ewmh:_NET_WM_MOVERESIZE (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_WM_MOVERESIZE)
+ (x-root :initarg :x-root :type xcb:CARD32)
+ (y-root :initarg :y-root :type xcb:CARD32)
+ (direction :initarg :direction :type xcb:CARD32)
+ (button :initarg :button :type xcb:CARD32)
+ (source-indication :initarg :source-indication :type xcb:CARD32)))
+
+;; _NET_RESTACK_WINDOW
+(defclass xcb:ewmh:_NET_RESTACK_WINDOW (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_RESTACK_WINDOW)
+ (source-indication :initarg :source-indication :type xcb:CARD32)
+ (sibling :initarg :sibling :type xcb:WINDOW)
+ (detail :initarg :detail :type xcb:CARD32)))
+
+;; _NET_REQUEST_FRAME_EXTENTS
+(defclass xcb:ewmh:_NET_REQUEST_FRAME_EXTENTS (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_REQUEST_FRAME_EXTENTS)))
+
+;;;; Application Window Properties
+
+;; _NET_WM_NAME
+(defclass xcb:ewmh:get-_NET_WM_NAME (xcb:ewmh:-GetProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_NAME)))
+(defclass xcb:ewmh:get-_NET_WM_NAME~reply (xcb:ewmh:-GetProperty-utf8~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_NAME (xcb:ewmh:-ChangeProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_NAME)))
+
+;; _NET_WM_VISIBLE_NAME
+(defclass xcb:ewmh:get-_NET_WM_VISIBLE_NAME (xcb:ewmh:-GetProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_VISIBLE_NAME)))
+(defclass xcb:ewmh:get-_NET_WM_VISIBLE_NAME~reply
+ (xcb:ewmh:-GetProperty-utf8~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_VISIBLE_NAME (xcb:ewmh:-ChangeProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_VISIBLE_NAME)))
+
+;; _NET_WM_ICON_NAME
+(defclass xcb:ewmh:get-_NET_WM_ICON_NAME (xcb:ewmh:-GetProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_ICON_NAME)))
+(defclass xcb:ewmh:get-_NET_WM_ICON_NAME~reply
+ (xcb:ewmh:-GetProperty-utf8~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_ICON_NAME (xcb:ewmh:-ChangeProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_ICON_NAME)))
+
+;; _NET_WM_VISIBLE_ICON_NAME
+(defclass xcb:ewmh:get-_NET_WM_VISIBLE_ICON_NAME (xcb:ewmh:-GetProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_VISIBLE_ICON_NAME)))
+(defclass xcb:ewmh:get-_NET_WM_VISIBLE_ICON_NAME~reply
+ (xcb:ewmh:-GetProperty-utf8~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_VISIBLE_ICON_NAME
+ (xcb:ewmh:-ChangeProperty-utf8)
+ ((property :initform 'xcb:Atom:_NET_WM_VISIBLE_ICON_NAME)))
+
+;; _NET_WM_DESKTOP
+(defclass xcb:ewmh:get-_NET_WM_DESKTOP (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_DESKTOP)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WM_DESKTOP~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_DESKTOP (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_DESKTOP)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:_NET_WM_DESKTOP (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_WM_DESKTOP)
+ (new-desktop :initarg :new-desktop :type xcb:CARD32)
+ (source-indication :initarg :source-indication :type xcb:CARD32)))
+
+;; _NET_WM_WINDOW_TYPE
+(defclass xcb:ewmh:get-_NET_WM_WINDOW_TYPE (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_WINDOW_TYPE)
+ (type :initform 'xcb:Atom:ATOM)))
+(defclass xcb:ewmh:get-_NET_WM_WINDOW_TYPE~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_WINDOW_TYPE (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_WINDOW_TYPE)
+ (type :initform 'xcb:Atom:ATOM)))
+
+;; _NET_WM_STATE
+(defconst xcb:ewmh:_NET_WM_STATE_REMOVE 0)
+(defconst xcb:ewmh:_NET_WM_STATE_ADD 1)
+(defconst xcb:ewmh:_NET_WM_STATE_TOGGLE 2)
+;;
+(defclass xcb:ewmh:get-_NET_WM_STATE (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_STATE)
+ (type :initform 'xcb:Atom:ATOM)))
+(defclass xcb:ewmh:get-_NET_WM_STATE~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_STATE (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_STATE)
+ (type :initform 'xcb:Atom:ATOM)))
+(defclass xcb:ewmh:_NET_WM_STATE (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:_NET_WM_STATE)
+ (action :initarg :action :type xcb:CARD32)
+ (first-property :initarg :first-property :type xcb:CARD32)
+ (second-property :initarg :second-property :type xcb:CARD32)
+ (source-indication :initarg :source-indication :type xcb:CARD32)))
+
+;; _NET_WM_ALLOWED_ACTIONS
+(defclass xcb:ewmh:get-_NET_WM_ALLOWED_ACTIONS (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_ALLOWED_ACTIONS)
+ (type :initform 'xcb:Atom:ATOM)))
+(defclass xcb:ewmh:get-_NET_WM_ALLOWED_ACTIONS~reply
+ (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_ALLOWED_ACTIONS (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_ALLOWED_ACTIONS)
+ (type :initform 'xcb:Atom:ATOM)))
+
+;; _NET_WM_STRUT
+(defclass xcb:ewmh:-_NET_WM_STRUT (xcb:--struct)
+ ((left :initarg :left :type xcb:-ignore)
+ (right :initarg :right :type xcb:-ignore)
+ (top :initarg :top :type xcb:-ignore)
+ (bottom :initarg :bottom :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_WM_STRUT (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_WM_STRUT)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 4)))
+(defclass xcb:ewmh:get-_NET_WM_STRUT~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_WM_STRUT)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_STRUT
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_WM_STRUT)
+ ((property :initform 'xcb:Atom:_NET_WM_STRUT)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_STRUT_PARTIAL
+(defclass xcb:ewmh:-_NET_WM_STRUT_PARTIAL (xcb:--struct)
+ ((left :initarg :left :type xcb:-ignore)
+ (right :initarg :right :type xcb:-ignore)
+ (top :initarg :top :type xcb:-ignore)
+ (bottom :initarg :bottom :type xcb:-ignore)
+ (left-start-y :initarg :left-start-y :type xcb:-ignore)
+ (left-end-y :initarg :left-end-y :type xcb:-ignore)
+ (right-start-y :initarg :right-start-y :type xcb:-ignore)
+ (right-end-y :initarg :right-end-y :type xcb:-ignore)
+ (top-start-x :initarg :top-start-x :type xcb:-ignore)
+ (top-end-x :initarg :top-end-x :type xcb:-ignore)
+ (bottom-start-x :initarg :bottom-start-x :type xcb:-ignore)
+ (bottom-end-x :initarg :bottom-end-x :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_WM_STRUT_PARTIAL (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_WM_STRUT_PARTIAL)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 12)))
+(defclass xcb:ewmh:get-_NET_WM_STRUT_PARTIAL~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_WM_STRUT_PARTIAL)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_STRUT_PARTIAL
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_WM_STRUT_PARTIAL)
+ ((property :initform 'xcb:Atom:_NET_WM_STRUT_PARTIAL)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_ICON_GEOMETRY
+(defclass xcb:ewmh:-_NET_WM_ICON_GEOMETRY (xcb:--struct)
+ ((x :initarg :x :type xcb:-ignore)
+ (y :initarg :y :type xcb:-ignore)
+ (width :initarg :width :type xcb:-ignore)
+ (height :initarg :height :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_WM_ICON_GEOMETRY (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_WM_ICON_GEOMETRY)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 4)))
+(defclass xcb:ewmh:get-_NET_WM_ICON_GEOMETRY~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_WM_ICON_GEOMETRY)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_ICON_GEOMETRY
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_WM_ICON_GEOMETRY)
+ ((property :initform 'xcb:Atom:_NET_WM_ICON_GEOMETRY)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_ICON
+(defclass xcb:ewmh:-get-_NET_WM_ICON (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_ICON)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:-get-_NET_WM_ICON~reply (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:-set-_NET_WM_ICON (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_ICON)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_PID
+(defclass xcb:ewmh:get-_NET_WM_PID (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_PID)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WM_PID~reply (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_PID (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_PID)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_HANDLED_ICONS
+(defclass xcb:ewmh:get-_NET_WM_HANDLED_ICONS (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_HANDLED_ICONS)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WM_HANDLED_ICONS~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_HANDLED_ICONS (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_HANDLED_ICONS)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_USER_TIME
+(defclass xcb:ewmh:get-_NET_WM_USER_TIME (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_USER_TIME)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WM_USER_TIME~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_USER_TIME (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_USER_TIME)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_USER_TIME_WINDOW
+(defclass xcb:ewmh:get-_NET_WM_USER_TIME_WINDOW (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_USER_TIME_WINDOW)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WM_USER_TIME_WINDOW~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_USER_TIME_WINDOW
+ (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_USER_TIME_WINDOW)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_FRAME_EXTENTS
+(defclass xcb:ewmh:-_NET_FRAME_EXTENTS (xcb:--struct)
+ ((left :initarg :left :type xcb:-ignore)
+ (right :initarg :right :type xcb:-ignore)
+ (top :initarg :top :type xcb:-ignore)
+ (bottom :initarg :bottom :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_FRAME_EXTENTS (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_FRAME_EXTENTS)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 4)))
+(defclass xcb:ewmh:get-_NET_FRAME_EXTENTS~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_FRAME_EXTENTS)
+ nil)
+(defclass xcb:ewmh:set-_NET_FRAME_EXTENTS
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_FRAME_EXTENTS)
+ ((property :initform 'xcb:Atom:_NET_FRAME_EXTENTS)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_OPAQUE_REGION
+(defclass xcb:ewmh:get-_NET_WM_OPAQUE_REGION (xcb:icccm:-GetProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_OPAQUE_REGION)
+ (type :initform 'xcb:Atom:ATOM)))
+(defclass xcb:ewmh:get-_NET_WM_OPAQUE_REGION~reply
+ (xcb:icccm:-GetProperty~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_OPAQUE_REGION (xcb:icccm:-ChangeProperty)
+ ((property :initform 'xcb:Atom:_NET_WM_OPAQUE_REGION)
+ (type :initform 'xcb:Atom:ATOM)))
+
+;; _NET_WM_BYPASS_COMPOSITOR
+(defclass xcb:ewmh:get-_NET_WM_BYPASS_COMPOSITOR
+ (xcb:icccm:-GetProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_BYPASS_COMPOSITOR)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:get-_NET_WM_BYPASS_COMPOSITOR~reply
+ (xcb:icccm:-GetProperty-single~reply)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_BYPASS_COMPOSITOR
+ (xcb:icccm:-ChangeProperty-single)
+ ((property :initform 'xcb:Atom:_NET_WM_BYPASS_COMPOSITOR)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;;;; Window Manager Protocols
+
+;; _NET_WM_PING
+(defclass xcb:ewmh:_NET_WM_PING (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:WM_PROTOCOLS)
+ (protocol :initform 'xcb:Atom:_NET_WM_PING :type xcb:CARD32)
+ (timestamp :initarg :timestamp :type xcb:CARD32)
+ (client-window :initarg :client-window :type xcb:WINDOW)))
+
+;; _NET_WM_SYNC_REQUEST
+(defclass xcb:ewmh:_NET_WM_SYNC_REQUEST (xcb:ewmh:-ClientMessage)
+ ((type :initform 'xcb:Atom:WM_PROTOCOLS)
+ (protocol :initform 'xcb:Atom:_NET_WM_SYNC_REQUEST :type xcb:CARD32)
+ (timestamp :initarg :timestamp :type xcb:CARD32)
+ (low :initarg :low :type xcb:CARD32)
+ (high :initarg :high :type xcb:CARD32)))
+
+;; _NET_WM_SYNC_REQUEST_COUNTER
+(defclass xcb:ewmh:-_NET_WM_SYNC_REQUEST_COUNTER (xcb:--struct)
+ ((low :initarg :low :type xcb:-ignore)
+ (high :initarg :hight :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_WM_SYNC_REQUEST_COUNTER
+ (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_WM_SYNC_REQUEST_COUNTER)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 2)))
+(defclass xcb:ewmh:get-_NET_WM_SYNC_REQUEST_COUNTER~reply
+ (xcb:icccm:-GetProperty-explicit~reply
+ xcb:ewmh:-_NET_WM_SYNC_REQUEST_COUNTER)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_SYNC_REQUEST_COUNTER
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_WM_SYNC_REQUEST_COUNTER)
+ ((property :initform 'xcb:Atom:_NET_WM_SYNC_REQUEST_COUNTER)
+ (type :initform 'xcb:Atom:CARDINAL)))
+
+;; _NET_WM_FULLSCREEN_MONITORS
+(defclass xcb:ewmh:-_NET_WM_FULLSCREEN_MONITORS (xcb:--struct)
+ ((top :initarg :top :type xcb:-ignore)
+ (bottom :initarg :bottom :type xcb:-ignore)
+ (left :initarg :left :type xcb:-ignore)
+ (right :initarg :right :type xcb:-ignore)))
+;;
+(defclass xcb:ewmh:get-_NET_WM_FULLSCREEN_MONITORS
+ (xcb:icccm:-GetProperty-explicit)
+ ((property :initform 'xcb:Atom:_NET_WM_FULLSCREEN_MONITORS)
+ (type :initform 'xcb:Atom:CARDINAL)
+ (long-length :initform 4)))
+(defclass xcb:ewmh:get-_NET_WM_FULLSCREEN_MONITORS~reply
+ (xcb:icccm:-GetProperty-explicit~reply xcb:ewmh:-_NET_WM_FULLSCREEN_MONITORS)
+ nil)
+(defclass xcb:ewmh:set-_NET_WM_FULLSCREEN_MONITORS
+ (xcb:icccm:-ChangeProperty-explicit xcb:ewmh:-_NET_WM_FULLSCREEN_MONITORS)
+ ((property :initform 'xcb:Atom:_NET_WM_FULLSCREEN_MONITORS)
+ (type :initform 'xcb:Atom:CARDINAL)))
+(defclass xcb:ewmh:_NET_WM_FULLSCREEN_MONITORS
+ (xcb:ewmh:-ClientMessage xcb:ewmh:-_NET_WM_FULLSCREEN_MONITORS)
+ ((type :initform 'xcb:Atom:_NET_WM_FULLSCREEN_MONITORS)))
+
+;;;; Other Properties
+
+;;;; Misc.
+
+(defconst xcb:ewmh:source-indication:none 0)
+(defconst xcb:ewmh:source-indication:normal 1)
+(defconst xcb:ewmh:source-indication:other 2)
+
+
+
+(provide 'xcb-ewmh)
+
+;;; xcb-ewmh.el ends here