2 * vim:ts=4:sw=4:expandtab
4 * i3 - an improved dynamic tiling window manager
5 * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
7 * x.c: Interface to X11, transfers our in-memory state to X11 (see also
8 * render.c). Basically a big state machine.
13 /** Stores the X11 window ID of the currently focused window */
14 extern xcb_window_t focused_id;
17 * Initializes the X11 part for the given container. Called exactly once for
18 * every container from con_new().
21 void x_con_init(Con *con, uint16_t depth);
24 * Moves a child window from Container src to Container dest.
27 void x_move_win(Con *src, Con *dest);
30 * Reparents the child window of the given container (necessary for sticky
31 * containers). The reparenting happens in the next call of x_push_changes().
34 void x_reparent_child(Con *con, Con *old);
37 * Re-initializes the associated X window state for this container. You have
38 * to call this when you assign a client to an empty container to ensure that
39 * its state gets updated correctly.
42 void x_reinit(Con *con);
45 * Kills the window decoration associated with the given container.
48 void x_con_kill(Con *con);
51 * Returns true if the client supports the given protocol atom (like WM_DELETE_WINDOW)
54 bool window_supports_protocol(xcb_window_t window, xcb_atom_t atom);
57 * Kills the given X11 window using WM_DELETE_WINDOW (if supported).
60 void x_window_kill(xcb_window_t window, kill_window_t kill_window);
63 * Draws the decoration of the given container onto its parent.
66 void x_draw_decoration(Con *con);
69 * Recursively calls x_draw_decoration. This cannot be done in x_push_node
70 * because x_push_node uses focus order to recurse (see the comment above)
71 * while drawing the decoration needs to happen in the actual order.
74 void x_deco_recurse(Con *con);
77 * This function pushes the properties of each node of the layout tree to
78 * X11 if they have changed (like the map state, position of the window, …).
79 * It recursively traverses all children of the given node.
82 void x_push_node(Con *con);
85 * Pushes all changes (state of each node, see x_push_node() and the window
89 void x_push_changes(Con *con);
92 * Raises the specified container in the internal stack of X windows. The
93 * next call to x_push_changes() will make the change visible in X11.
96 void x_raise_con(Con *con);
99 * Sets the WM_NAME property (so, no UTF8, but used only for debugging anyways)
100 * of the given name. Used for properly tagging the windows for easily spotting
101 * i3 windows in xwininfo -root -all.
104 void x_set_name(Con *con, const char *name);
107 * Set up the SHMLOG_PATH atom.
110 void update_shmlog_atom(void);
113 * Sets up i3 specific atoms (I3_SOCKET_PATH and I3_CONFIG_PATH)
116 void x_set_i3_atoms(void);
119 * Set warp_to coordinates. This will trigger on the next call to
123 void x_set_warp_to(Rect *rect);
126 * Applies the given mask to the event mask of every i3 window decoration X11
127 * window. This is useful to disable EnterNotify while resizing so that focus
131 void x_mask_event_mask(uint32_t mask);