i3
Functions
src/xcb.c File Reference
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <xcb/xcb.h>
#include <xcb/xcb_keysyms.h>
#include "i3.h"
#include "util.h"
#include "xcb.h"
#include "log.h"
Include dependency graph for xcb.c:

Go to the source code of this file.

Functions

 TAILQ_HEAD (cached_fonts_head, Font)
uint32_t get_colorpixel (xcb_connection_t *conn, char *hex)
 Returns the colorpixel to use for the given hex color (think of HTML).
xcb_window_t create_window (xcb_connection_t *conn, Rect dims, uint16_t window_class, int cursor, bool map, uint32_t mask, uint32_t *values)
 Convenience wrapper around xcb_create_window which takes care of depth, generating an ID and checking for errors.
void xcb_change_gc_single (xcb_connection_t *conn, xcb_gcontext_t gc, uint32_t mask, uint32_t value)
 Changes a single value in the graphic context (so one doesn’t have to define an array of values)
void xcb_draw_line (xcb_connection_t *conn, xcb_drawable_t drawable, xcb_gcontext_t gc, uint32_t colorpixel, uint32_t x, uint32_t y, uint32_t to_x, uint32_t to_y)
 Draws a line from x,y to to_x,to_y using the given color.
void xcb_draw_rect (xcb_connection_t *conn, xcb_drawable_t drawable, xcb_gcontext_t gc, uint32_t colorpixel, uint32_t x, uint32_t y, uint32_t width, uint32_t height)
 Draws a rectangle from x,y with width,height using the given color.
void fake_configure_notify (xcb_connection_t *conn, Rect r, xcb_window_t window)
 Generates a configure_notify event and sends it to the given window Applications need this to think they’ve configured themselves correctly.
void fake_absolute_configure_notify (xcb_connection_t *conn, Client *client)
 Generates a configure_notify_event with absolute coordinates (relative to the X root window, not to the client’s frame) for the given client.
void xcb_get_numlock_mask (xcb_connection_t *conn)
 Finds out which modifier mask is the one for numlock, as the user may change this.
void xcb_raise_window (xcb_connection_t *conn, xcb_window_t window)
 Raises the given window (typically client->frame) above all other windows.
void cached_pixmap_prepare (xcb_connection_t *conn, struct Cached_Pixmap *pixmap)
 Prepares the given Cached_Pixmap for usage (checks whether the size of the object this pixmap is related to (e.g.
int predict_text_width (xcb_connection_t *conn, const char *font_pattern, char *text, int length)
 Calculate the width of the given text (16-bit characters, UCS) with given real length (amount of glyphs) using the given font.
void xcb_set_window_rect (xcb_connection_t *conn, xcb_window_t window, Rect r)
 Configures the given window to have the size/position specified by given rect.

Function Documentation

void cached_pixmap_prepare ( xcb_connection_t *  conn,
struct Cached_Pixmap pixmap 
)

Prepares the given Cached_Pixmap for usage (checks whether the size of the object this pixmap is related to (e.g.

a window) has changed and re-creates the pixmap if so).

Definition at line 270 of file xcb.c.

References DLOG, Cached_Pixmap::gc, Rect::height, Cached_Pixmap::id, Cached_Pixmap::rect, Cached_Pixmap::referred_drawable, Cached_Pixmap::referred_rect, root_depth, and Rect::width.

Referenced by render_container().

xcb_window_t create_window ( xcb_connection_t *  conn,
Rect  dims,
uint16_t  window_class,
int  cursor,
bool  map,
uint32_t  mask,
uint32_t *  values 
)

Convenience wrapper around xcb_create_window which takes care of depth, generating an ID and checking for errors.

Definition at line 93 of file xcb.c.

References Rect::height, Font::id, load_font(), root, Rect::width, Rect::x, XCB_CURSOR_LEFT_PTR, and Rect::y.

Referenced by initialize_output(), reparent_window(), resize_graphical_handler(), and switch_layout_mode().

Here is the call graph for this function:

void fake_absolute_configure_notify ( xcb_connection_t *  conn,
Client client 
)

Generates a configure_notify_event with absolute coordinates (relative to the X root window, not to the client’s frame) for the given client.

Definition at line 189 of file xcb.c.

References Client::child, Client::child_rect, fake_configure_notify(), Rect::height, Client::rect, Rect::width, Rect::x, and Rect::y.

Referenced by DRAGGING_CB(), floating_move(), handle_configure_request(), and resize_client().

Here is the call graph for this function:

void fake_configure_notify ( xcb_connection_t *  conn,
Rect  r,
xcb_window_t  window 
)

Generates a configure_notify event and sends it to the given window Applications need this to think they’ve configured themselves correctly.

The truth is, however, that we will manage them.

Definition at line 164 of file xcb.c.

References Rect::height, Rect::width, Stack_Window::window, Rect::x, and Rect::y.

Referenced by client_enter_fullscreen(), fake_absolute_configure_notify(), and handle_configure_request().

uint32_t get_colorpixel ( xcb_connection_t *  conn,
char *  hex 
)

Returns the colorpixel to use for the given hex color (think of HTML).

The hex_color has to start with #, for example #FF00FF.

NOTE that get_colorpixel() does _NOT_ check the given color code for validity. This has to be done by the caller.

Definition at line 77 of file xcb.c.

Referenced by load_configuration(), render_internal_bar(), sig_draw_window(), and yyparse().

int predict_text_width ( xcb_connection_t *  conn,
const char *  font_pattern,
char *  text,
int  length 
)

Calculate the width of the given text (16-bit characters, UCS) with given real length (amount of glyphs) using the given font.

Definition at line 300 of file xcb.c.

References ELOG, Font::id, load_font(), and width.

Referenced by handle_signal(), load_configuration(), and workspace_set_name().

Here is the call graph for this function:

TAILQ_HEAD ( cached_fonts_head  ,
Font   
)

Definition at line 26 of file xcb.c.

References check_error(), die, exit_if_null, Font::pattern, smalloc(), sstrdup(), TAILQ_FOREACH, and TAILQ_INSERT_TAIL.

Here is the call graph for this function:

void xcb_change_gc_single ( xcb_connection_t *  conn,
xcb_gcontext_t  gc,
uint32_t  mask,
uint32_t  value 
)

Changes a single value in the graphic context (so one doesn’t have to define an array of values)

Definition at line 132 of file xcb.c.

Referenced by decorate_window(), handle_expose_event(), handle_signal(), render_container(), render_internal_bar(), sig_draw_window(), xcb_draw_line(), and xcb_draw_rect().

void xcb_draw_line ( xcb_connection_t *  conn,
xcb_drawable_t  drawable,
xcb_gcontext_t  gc,
uint32_t  colorpixel,
uint32_t  x,
uint32_t  y,
uint32_t  to_x,
uint32_t  to_y 
)

Draws a line from x,y to to_x,to_y using the given color.

Definition at line 140 of file xcb.c.

References x, and xcb_change_gc_single().

Referenced by decorate_window().

Here is the call graph for this function:

void xcb_draw_rect ( xcb_connection_t *  conn,
xcb_drawable_t  drawable,
xcb_gcontext_t  gc,
uint32_t  colorpixel,
uint32_t  x,
uint32_t  y,
uint32_t  width,
uint32_t  height 
)

Draws a rectangle from x,y with width,height using the given color.

Definition at line 151 of file xcb.c.

References Stack_Window::rect, width, x, xcb_change_gc_single(), and y.

Referenced by render_internal_bar().

Here is the call graph for this function:

void xcb_get_numlock_mask ( xcb_connection_t *  conn)

Finds out which modifier mask is the one for numlock, as the user may change this.

Definition at line 204 of file xcb.c.

References keysyms, XCB_NUM_LOCK, and xcb_numlock_mask.

Referenced by handle_mapping_notify(), main(), and xkb_got_event().

void xcb_raise_window ( xcb_connection_t *  conn,
xcb_window_t  window 
)

Raises the given window (typically client->frame) above all other windows.

Definition at line 258 of file xcb.c.

Referenced by handle_button_press(), reparent_window(), and toggle_floating_mode().

void xcb_set_window_rect ( xcb_connection_t *  conn,
xcb_window_t  window,
Rect  r 
)

Configures the given window to have the size/position specified by given rect.

Definition at line 327 of file xcb.c.

References Rect::x.

Referenced by client_enter_fullscreen(), output_change_mode(), and resize_client().