Make i3 compatible with the very latest xcb
This involves: • Compiling with xcb-util instead of xcb-{atom,aux} (they merged the libraries) • Not using xcb-{event,property} anymore (code removed upstream) • Not using the predefined WINDOW, CARDINEL, … atoms (removed upstream) • Using the new xcb_icccm_* data types/functions instead of just xcb_* (for example xcb_icccm_get_wm_hints instead of xcb_get_wm_hints) Also I refactored the atoms to use x-macros.
This commit is contained in:
@ -26,10 +26,14 @@
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/xcb_aux.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include <xcb/xcb_keysyms.h>
|
||||
#include <xcb/xcb_icccm.h>
|
||||
|
||||
/* Contains compatibility definitions for old libxcb versions */
|
||||
#ifdef XCB_COMPAT
|
||||
#include "xcb_compat.h"
|
||||
#endif
|
||||
|
||||
#include "util.h"
|
||||
#include "ipc.h"
|
||||
#include "tree.h"
|
||||
|
31
include/atoms.xmacro
Normal file
31
include/atoms.xmacro
Normal file
@ -0,0 +1,31 @@
|
||||
xmacro(_NET_SUPPORTED)
|
||||
xmacro(_NET_SUPPORTING_WM_CHECK)
|
||||
xmacro(_NET_WM_NAME)
|
||||
xmacro(_NET_WM_STATE_FULLSCREEN)
|
||||
xmacro(_NET_WM_STATE)
|
||||
xmacro(_NET_WM_WINDOW_TYPE)
|
||||
xmacro(_NET_WM_WINDOW_TYPE_DOCK)
|
||||
xmacro(_NET_WM_WINDOW_TYPE_DIALOG)
|
||||
xmacro(_NET_WM_WINDOW_TYPE_UTILITY)
|
||||
xmacro(_NET_WM_WINDOW_TYPE_TOOLBAR)
|
||||
xmacro(_NET_WM_WINDOW_TYPE_SPLASH)
|
||||
xmacro(_NET_WM_DESKTOP)
|
||||
xmacro(_NET_WM_STRUT_PARTIAL)
|
||||
xmacro(WM_PROTOCOLS)
|
||||
xmacro(WM_DELETE_WINDOW)
|
||||
xmacro(UTF8_STRING)
|
||||
xmacro(WM_STATE)
|
||||
xmacro(WM_CLIENT_LEADER)
|
||||
xmacro(_NET_CURRENT_DESKTOP)
|
||||
xmacro(_NET_ACTIVE_WINDOW)
|
||||
xmacro(_NET_WORKAREA)
|
||||
xmacro(WM_TAKE_FOCUS)
|
||||
xmacro(WM_HINTS)
|
||||
xmacro(WM_NORMAL_HINTS)
|
||||
xmacro(WM_TRANSIENT_FOR)
|
||||
xmacro(ATOM)
|
||||
xmacro(WINDOW)
|
||||
xmacro(WM_NAME)
|
||||
xmacro(WM_CLASS)
|
||||
xmacro(STRING)
|
||||
xmacro(CARDINAL)
|
@ -7,7 +7,6 @@
|
||||
* include/data.h: This file defines all data structures used by i3
|
||||
*
|
||||
*/
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/randr.h>
|
||||
#include <xcb/xcb_atom.h>
|
||||
#include <stdbool.h>
|
||||
|
@ -13,9 +13,24 @@
|
||||
|
||||
#include <xcb/randr.h>
|
||||
|
||||
extern int randr_base;
|
||||
|
||||
void add_ignore_event(const int sequence);
|
||||
|
||||
/**
|
||||
* Takes an xcb_generic_event_t and calls the appropriate handler, based on the
|
||||
* event type.
|
||||
*
|
||||
*/
|
||||
void handle_event(int type, xcb_generic_event_t *event);
|
||||
|
||||
/**
|
||||
* Sets the appropriate atoms for the property handlers after the atoms were
|
||||
* received from X11
|
||||
*
|
||||
*/
|
||||
void property_handlers_init();
|
||||
|
||||
/**
|
||||
* There was a key press. We compare this key code with our bindings table and
|
||||
* pass the bound action to parse_command().
|
||||
|
@ -8,9 +8,6 @@
|
||||
* See file LICENSE for license information.
|
||||
*
|
||||
*/
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/xcb_property.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include <xcb/xcb_keysyms.h>
|
||||
|
||||
#include <X11/XKBlib.h>
|
||||
@ -31,11 +28,8 @@ extern TAILQ_HEAD(bindings_head, Binding) *bindings;
|
||||
extern TAILQ_HEAD(autostarts_head, Autostart) autostarts;
|
||||
extern TAILQ_HEAD(assignments_head, Assignment) assignments;
|
||||
extern SLIST_HEAD(stack_wins_head, Stack_Window) stack_wins;
|
||||
extern xcb_event_handlers_t evenths;
|
||||
extern xcb_property_handlers_t prophs;
|
||||
extern uint8_t root_depth;
|
||||
extern bool xcursor_supported, xkb_supported;
|
||||
extern xcb_atom_t atoms[NUM_ATOMS];
|
||||
extern xcb_window_t root;
|
||||
|
||||
#endif
|
||||
|
@ -8,7 +8,6 @@
|
||||
* See file LICENSE for license information.
|
||||
*
|
||||
*/
|
||||
#include <xcb/xcb.h>
|
||||
|
||||
#include "data.h"
|
||||
|
||||
|
@ -8,7 +8,6 @@
|
||||
* See file LICENSE for license information.
|
||||
*
|
||||
*/
|
||||
#include <xcb/xcb.h>
|
||||
#include <err.h>
|
||||
|
||||
#include "data.h"
|
||||
|
@ -8,7 +8,6 @@
|
||||
* See file LICENSE for license information.
|
||||
*
|
||||
*/
|
||||
#include <xcb/xcb.h>
|
||||
|
||||
#include "data.h"
|
||||
#include "tree.h"
|
||||
|
@ -44,32 +44,9 @@
|
||||
XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | /* …subwindows get notifies */ \
|
||||
XCB_EVENT_MASK_ENTER_WINDOW) /* …user moves cursor inside our window */
|
||||
|
||||
|
||||
enum {
|
||||
_NET_SUPPORTED = 0,
|
||||
_NET_SUPPORTING_WM_CHECK,
|
||||
_NET_WM_NAME,
|
||||
_NET_WM_STATE_FULLSCREEN,
|
||||
_NET_WM_STATE,
|
||||
_NET_WM_WINDOW_TYPE,
|
||||
_NET_WM_WINDOW_TYPE_DOCK,
|
||||
_NET_WM_WINDOW_TYPE_DIALOG,
|
||||
_NET_WM_WINDOW_TYPE_UTILITY,
|
||||
_NET_WM_WINDOW_TYPE_TOOLBAR,
|
||||
_NET_WM_WINDOW_TYPE_SPLASH,
|
||||
_NET_WM_DESKTOP,
|
||||
_NET_WM_STRUT_PARTIAL,
|
||||
WM_PROTOCOLS,
|
||||
WM_DELETE_WINDOW,
|
||||
UTF8_STRING,
|
||||
WM_STATE,
|
||||
WM_CLIENT_LEADER,
|
||||
_NET_CURRENT_DESKTOP,
|
||||
_NET_ACTIVE_WINDOW,
|
||||
_NET_WORKAREA,
|
||||
WM_TAKE_FOCUS,
|
||||
NUM_ATOMS
|
||||
};
|
||||
#define xmacro(atom) xcb_atom_t A_ ## atom;
|
||||
#include "atoms.xmacro"
|
||||
#undef xmacro
|
||||
|
||||
extern unsigned int xcb_numlock_mask;
|
||||
|
||||
|
24
include/xcb_compat.h
Normal file
24
include/xcb_compat.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef _XCB_COMPAT_H
|
||||
#define _XCB_COMPAT_H
|
||||
|
||||
#define xcb_icccm_get_wm_protocols_reply_t xcb_get_wm_protocols_reply_t
|
||||
#define xcb_icccm_get_wm_protocols_unchecked xcb_get_wm_protocols_unchecked
|
||||
#define xcb_icccm_get_wm_protocols_reply xcb_get_wm_protocols_reply
|
||||
#define xcb_icccm_get_wm_protocols_reply_wipe xcb_get_wm_protocols_reply_wipe
|
||||
#define XCB_ICCCM_WM_STATE_NORMAL XCB_WM_STATE_NORMAL
|
||||
#define XCB_ICCCM_WM_STATE_WITHDRAWN XCB_WM_STATE_WITHDRAWN
|
||||
#define xcb_icccm_get_wm_size_hints_from_reply xcb_get_wm_size_hints_from_reply
|
||||
#define xcb_icccm_get_wm_normal_hints_reply xcb_get_wm_normal_hints_reply
|
||||
#define xcb_icccm_get_wm_normal_hints_unchecked xcb_get_wm_normal_hints_unchecked
|
||||
#define XCB_ICCCM_SIZE_HINT_P_MIN_SIZE XCB_SIZE_HINT_P_MIN_SIZE
|
||||
#define XCB_ICCCM_SIZE_HINT_P_RESIZE_INC XCB_SIZE_HINT_P_RESIZE_INC
|
||||
#define XCB_ICCCM_SIZE_HINT_BASE_SIZE XCB_SIZE_HINT_BASE_SIZE
|
||||
#define XCB_ICCCM_SIZE_HINT_P_ASPECT XCB_SIZE_HINT_P_ASPECT
|
||||
#define xcb_icccm_wm_hints_t xcb_wm_hints_t
|
||||
#define xcb_icccm_get_wm_hints_from_reply xcb_get_wm_hints_from_reply
|
||||
#define xcb_icccm_get_wm_hints_reply xcb_get_wm_hints_reply
|
||||
#define xcb_icccm_get_wm_hints_unchecked xcb_get_wm_hints_unchecked
|
||||
#define xcb_icccm_wm_hints_get_urgency xcb_wm_hints_get_urgency
|
||||
#define xcb_icccm_get_wm_transient_for_from_reply xcb_get_wm_transient_for_from_reply
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user