2 * vim:ts=4:sw=4:expandtab
4 * i3bar - an xcb-based status- and ws-bar for i3
5 * © 2010 Axel Wagner and contributors (see also: LICENSE)
7 * xcb.c: Communicating with X
13 //#include "outputs.h"
16 #define XCB_ATOM_CARDINAL CARDINAL
19 #define _NET_SYSTEM_TRAY_ORIENTATION_HORZ 0
20 #define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1
21 #define SYSTEM_TRAY_REQUEST_DOCK 0
22 #define SYSTEM_TRAY_BEGIN_MESSAGE 1
23 #define SYSTEM_TRAY_CANCEL_MESSAGE 2
24 #define XEMBED_MAPPED (1 << 0)
25 #define XEMBED_EMBEDDED_NOTIFY 0
27 xcb_connection_t *xcb_connection;
29 /* We define xcb_request_failed as a macro to include the relevant line number */
30 #define xcb_request_failed(cookie, err_msg) _xcb_request_failed(cookie, err_msg, __LINE__)
31 int _xcb_request_failed(xcb_void_cookie_t cookie, char *err_msg, int line);
33 struct xcb_color_strings_t {
42 char *active_ws_border;
45 char *inactive_ws_border;
48 char *focus_ws_border;
51 char *urgent_ws_border;
52 char *binding_mode_bg;
53 char *binding_mode_fg;
54 char *binding_mode_border;
57 typedef struct xcb_colors_t xcb_colors_t;
59 /* Cached width of the custom separator if one was set */
60 int separator_symbol_width;
63 * Early initialization of the connection to X11: Everything which does not
67 char *init_xcb_early();
70 * Initialization which depends on 'config' being usable. Called after the
71 * configuration has arrived.
74 void init_xcb_late(char *fontname);
77 * Initialize the colors
80 void init_colors(const struct xcb_color_strings_t *colors);
83 * Cleanup the xcb stuff.
84 * Called once, before the program terminates.
90 * Get the earlier requested atoms and save them in the prepared data structure
96 * Reparents all tray clients of the specified output to the root window. This
97 * is either used when shutting down, when an output appears (xrandr --output
98 * VGA1 --off) or when the primary output changes.
100 * Applications using the tray will start the protocol from the beginning again
104 void kick_tray_clients(i3_output *output);
107 * We need to set the _NET_SYSTEM_TRAY_COLORS atom on the tray selection window
108 * to make GTK+ 3 applets with symbolic icons visible. If the colors are unset,
109 * they assume a light background.
110 * See also https://bugzilla.gnome.org/show_bug.cgi?id=679591
113 void init_tray_colors(void);
116 * Destroy the bar of the specified output
119 void destroy_window(i3_output *output);
122 * Reallocate the statusline buffer
125 void realloc_sl_buffer(void);
128 * Reconfigure all bars and create new for newly activated outputs
131 void reconfig_windows(bool redraw_bars);
134 * Render the bars, with buttons and statusline
137 void draw_bars(bool force_unhide);
140 * Redraw the bars, i.e. simply copy the buffer to the barwindow
143 void redraw_bars(void);
146 * Set the current binding mode
149 void set_current_mode(struct mode *mode);