summaryrefslogtreecommitdiff
path: root/src/xwindow.h
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@gnugeneration.com>2016-08-28 00:36:53 -0700
committerVito Caputo <vcaputo@gnugeneration.com>2016-09-09 14:14:31 -0700
commit4642216f70dd98134a79f9299b7ca4bc876649c7 (patch)
treebdf9fd892bc54a2f2a678a9828c6af9d9fc8bed2 /src/xwindow.h
parente99f5ac1293a0ae1f498bc4c73c4c04e4edb8665 (diff)
*: refactor all the things
Long overdue house cleaning. The addition of compositing/monitoring overlays in vwm3 pushed vwm well past what is a reasonable size for a simple thousand line file. This is a first step towards restoring sanity in the code, but no behavioral differences are intended, this is mostly just shuffling around and organizing code. I expect some performance regressions initially, follow-on commits will make more improvements to that end as the dust settles.
Diffstat (limited to 'src/xwindow.h')
-rw-r--r--src/xwindow.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/xwindow.h b/src/xwindow.h
new file mode 100644
index 0000000..f3be681
--- /dev/null
+++ b/src/xwindow.h
@@ -0,0 +1,52 @@
+#ifndef _XWIN_H
+#define _XWIN_H
+
+#include <X11/extensions/Xdamage.h>
+#include <X11/extensions/Xrender.h>
+#include <X11/Xlib.h>
+
+#include "libvmon/vmon.h"
+#include "list.h"
+#include "overlay.h"
+
+typedef struct _vwm_t vwm_t;
+typedef struct _vwm_window_t vwm_window_t;
+
+/* every window gets this, even non-managed ones. For compositing vwm must track everything visible, even popup menus. */
+typedef struct _vwm_xwindow_t {
+ list_head_t xwindows; /* global list of all windows kept in X stacking order */
+
+ Window id; /* X Window backing this instance */
+ XWindowAttributes attrs; /* X window's current attributes, kept up-to-date in handling of ConfigureNotify events */
+ Damage damage; /* X damage object associated with the window (for compositing) */
+ Picture picture; /* X picture object representing the window (for compositing) */
+ Pixmap pixmap; /* X pixmap object representing the window (for compositing) */
+
+ vmon_proc_t *monitor; /* vmon process monitor handle, may be NULL if for example the X client doesn't supply a PID */
+ vwm_overlay_t overlay; /* monitoring overlay state */
+
+ char *name; /* client name */
+ unsigned int mapped:1; /* is the window currently mapped (by client) */
+ unsigned int occluded:1; /* is the window occluded entirely by another window? (used and valid only during paint_all()) */
+ /* if only Xorg could send VisibilityNotify events when requested for redirected windows :( */
+ vwm_window_t *managed; /* is the window "managed"? NULL or this points to the managed context of the window */
+} vwm_xwindow_t;
+
+/* creates and potentially manages a new window (called in response to CreateNotify events, and during startup for all existing windows) */
+/* if the window is already mapped and not an override_redirect window, it becomes managed here. */
+typedef enum _vwm_grab_mode_t {
+ VWM_NOT_GRABBED = 0,
+ VWM_GRABBED
+} vwm_grab_mode_t;
+
+void vwm_xwin_message(vwm_t *vwm, vwm_xwindow_t *xwin, Atom type, long foo);
+vwm_xwindow_t * vwm_xwin_lookup(vwm_t *vwm, Window win);
+int vwm_xwin_is_mapped(vwm_t *vwm, vwm_xwindow_t *xwin);
+void vwm_xwin_monitor(vwm_t *vwm, vwm_xwindow_t *xwin);
+vwm_xwindow_t * vwm_xwin_create(vwm_t *vwm, Window win, vwm_grab_mode_t grabbed);
+void vwm_xwin_destroy(vwm_t *vwm, vwm_xwindow_t *xwin);
+void vwm_xwin_restack(vwm_t *vwm, vwm_xwindow_t *xwin, Window new_above);
+int vwm_xwin_create_existing(vwm_t *vwm);
+
+
+#endif
© All Rights Reserved