--- /dev/null
+/*
+ * vim:ts=8:expandtab
+ *
+ * i3 - an improved dynamic tiling window manager
+ *
+ * © 2009 Michael Stapelberg and contributors
+ *
+ * See file LICENSE for license information.
+ *
+ */
+#ifndef _EWMH_C
+#define _EWMH_C
+
+/**
+ * Updates _NET_CURRENT_DESKTOP with the current desktop number.
+ *
+ * EWMH: The index of the current desktop. This is always an integer between 0
+ * and _NET_NUMBER_OF_DESKTOPS - 1.
+ *
+ */
+void ewmh_update_current_desktop();
+
+#endif
#ifndef _I3_H
#define _I3_H
-#define NUM_ATOMS 18
+#define NUM_ATOMS 19
extern xcb_connection_t *global_conn;
extern xcb_key_symbols_t *keysyms;
WM_DELETE_WINDOW,
UTF8_STRING,
WM_STATE,
- WM_CLIENT_LEADER
+ WM_CLIENT_LEADER,
+ _NET_CURRENT_DESKTOP
};
extern unsigned int xcb_numlock_mask;
--- /dev/null
+/*
+ * vim:ts=8:expandtab
+ *
+ * i3 - an improved dynamic tiling window manager
+ *
+ * © 2009 Michael Stapelberg and contributors
+ *
+ * See file LICENSE for license information.
+ *
+ * ewmh.c: Functions to get/set certain EWMH properties easily.
+ *
+ */
+#include <stdint.h>
+
+#include "data.h"
+#include "table.h"
+#include "i3.h"
+#include "xcb.h"
+
+/*
+ * Updates _NET_CURRENT_DESKTOP with the current desktop number.
+ *
+ * EWMH: The index of the current desktop. This is always an integer between 0
+ * and _NET_NUMBER_OF_DESKTOPS - 1.
+ *
+ */
+void ewmh_update_current_desktop() {
+ uint32_t current_desktop = c_ws->num;
+ xcb_change_property(global_conn, XCB_PROP_MODE_REPLACE, root,
+ atoms[_NET_CURRENT_DESKTOP], CARDINAL, 32, 1,
+ ¤t_desktop);
+}
REQUEST_ATOM(UTF8_STRING);
REQUEST_ATOM(WM_STATE);
REQUEST_ATOM(WM_CLIENT_LEADER);
+ REQUEST_ATOM(_NET_CURRENT_DESKTOP);
/* TODO: this has to be more beautiful somewhen */
int major, minor, error;
GET_ATOM(UTF8_STRING);
GET_ATOM(WM_STATE);
GET_ATOM(WM_CLIENT_LEADER);
+ GET_ATOM(_NET_CURRENT_DESKTOP);
xcb_property_set_handler(&prophs, atoms[_NET_WM_WINDOW_TYPE], UINT_MAX, handle_window_type, NULL);
/* TODO: In order to comply with EWMH, we have to watch _NET_WM_STRUT_PARTIAL */
#include "xcb.h"
#include "client.h"
#include "log.h"
+#include "ewmh.h"
static iconv_t conversion_descriptor = 0;
struct keyvalue_table_head by_parent = TAILQ_HEAD_INITIALIZER(by_parent);
c_ws->current_row = current_row;
c_ws->current_col = current_col;
c_ws = client->workspace;
+ ewmh_update_current_desktop();
/* Load current_col/current_row if we switch to a client without a container */
current_col = c_ws->current_col;
current_row = c_ws->current_row;