ewmh: correctly set _NET_CURRENT_DESKTOP to the number of the active workspace
This commit is contained in:
parent
ba82a3e63b
commit
0641e6a1a3
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* 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
|
|
@ -21,7 +21,7 @@
|
|||
#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;
|
||||
|
|
|
@ -61,7 +61,8 @@ enum { _NET_SUPPORTED = 0,
|
|||
WM_DELETE_WINDOW,
|
||||
UTF8_STRING,
|
||||
WM_STATE,
|
||||
WM_CLIENT_LEADER
|
||||
WM_CLIENT_LEADER,
|
||||
_NET_CURRENT_DESKTOP
|
||||
};
|
||||
|
||||
extern unsigned int xcb_numlock_mask;
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* 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);
|
||||
}
|
|
@ -248,6 +248,7 @@ int main(int argc, char *argv[], char *env[]) {
|
|||
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;
|
||||
|
@ -410,6 +411,7 @@ int main(int argc, char *argv[], char *env[]) {
|
|||
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 */
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#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);
|
||||
|
@ -230,6 +231,7 @@ void set_focus(xcb_connection_t *conn, Client *client, bool set_anyways) {
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue