i3
Typedefs | Functions | Variables
randr.c File Reference
#include "all.h"
#include <time.h>
#include <xcb/randr.h>
Include dependency graph for randr.c:

Go to the source code of this file.

Typedefs

typedef xcb_randr_get_crtc_info_reply_t crtc_info
 
typedef xcb_randr_get_screen_resources_current_reply_t resources_reply
 

Functions

static Outputget_output_by_id (xcb_randr_output_t id)
 
Outputget_output_by_name (const char *name)
 Returns the output with the given name if it is active (!) or NULL. More...
 
Outputget_first_output (void)
 Returns the first output which is active. More...
 
static bool any_randr_output_active (void)
 
Outputget_output_containing (unsigned int x, unsigned int y)
 Returns the active (!) output which contains the coordinates x, y or NULL if there is no output which contains these coordinates. More...
 
Outputget_output_with_dimensions (Rect rect)
 Returns the active output which spans exactly the area specified by rect or NULL if there is no output like this. More...
 
bool contained_by_output (Rect rect)
 
Outputget_output_next_wrap (direction_t direction, Output *current)
 Like get_output_next with close_far == CLOSEST_OUTPUT, but wraps. More...
 
Outputget_output_next (direction_t direction, Output *current, output_close_far_t close_far)
 Gets the output which is the next one in the given direction. More...
 
Outputcreate_root_output (xcb_connection_t *conn)
 
void output_init_con (Output *output)
 Initializes a CT_OUTPUT Con (searches existing ones from inplace restart before) to use for the given Output. More...
 
void init_ws_for_output (Output *output, Con *content)
 Initializes at least one workspace for this output, trying the following steps until there is at least one workspace: More...
 
static void output_change_mode (xcb_connection_t *conn, Output *output)
 
static void handle_output (xcb_connection_t *conn, xcb_randr_output_t id, xcb_randr_get_output_info_reply_t *output, xcb_timestamp_t cts, resources_reply *res)
 
void randr_query_outputs (void)
 Initializes the specified output, assigning the specified workspace to it. More...
 
void randr_disable_output (Output *output)
 Disables the output and moves its content. More...
 
void randr_init (int *event_base)
 We have just established a connection to the X server and need the initial XRandR information to setup workspaces for each screen. More...
 

Variables

xcb_randr_get_output_primary_reply_t * primary
 
struct outputs_head outputs = TAILQ_HEAD_INITIALIZER(outputs)
 
static Outputroot_output
 

Typedef Documentation

◆ crtc_info

typedef xcb_randr_get_crtc_info_reply_t crtc_info

Definition at line 19 of file randr.c.

◆ resources_reply

typedef xcb_randr_get_screen_resources_current_reply_t resources_reply

Definition at line 20 of file randr.c.

Function Documentation

◆ any_randr_output_active()

static bool any_randr_output_active ( void  )
static

Definition at line 78 of file randr.c.

References xoutput::active, outputs, TAILQ_FOREACH, and xoutput::to_be_disabled.

Referenced by randr_query_outputs().

◆ contained_by_output()

bool contained_by_output ( Rect  rect)

Definition at line 138 of file randr.c.

References xoutput::active, DLOG, Rect::height, outputs, xoutput::rect, TAILQ_FOREACH, Rect::width, Rect::x, and Rect::y.

Referenced by floating_reposition().

◆ create_root_output()

Output* create_root_output ( xcb_connection_t *  conn)

Definition at line 261 of file randr.c.

References xoutput::active, Rect::height, xoutput::name, xoutput::rect, root_screen, scalloc(), Rect::width, Rect::x, and Rect::y.

Referenced by randr_init(), and use_root_output().

Here is the call graph for this function:

◆ get_first_output()

Output* get_first_output ( void  )

Returns the first output which is active.

Definition at line 64 of file randr.c.

References xoutput::active, die, outputs, and TAILQ_FOREACH.

Referenced by main(), and randr_disable_output().

◆ get_output_by_id()

static Output* get_output_by_id ( xcb_randr_output_t  id)
static

Definition at line 37 of file randr.c.

References xoutput::id, outputs, and TAILQ_FOREACH.

Referenced by handle_output().

◆ get_output_by_name()

Output* get_output_by_name ( const char *  name)

Returns the output with the given name if it is active (!) or NULL.

Definition at line 50 of file randr.c.

References xoutput::active, xoutput::name, outputs, and TAILQ_FOREACH.

Referenced by get_output_for_con(), get_output_from_string(), and init_ws_for_output().

◆ get_output_containing()

Output* get_output_containing ( unsigned int  x,
unsigned int  y 
)

Returns the active (!) output which contains the coordinates x, y or NULL if there is no output which contains these coordinates.

Definition at line 94 of file randr.c.

References xoutput::active, DLOG, Rect::height, outputs, xoutput::rect, TAILQ_FOREACH, Rect::width, Rect::x, and Rect::y.

Referenced by _tree_next(), check_crossing_screen_boundary(), floating_enable(), floating_maybe_reassign_ws(), floating_move_to_pointer(), handle_configure_request(), main(), manage_window(), and x_push_changes().

◆ get_output_next()

Output* get_output_next ( direction_t  direction,
Output current,
output_close_far_t  close_far 
)

Gets the output which is the next one in the given direction.

If close_far == CLOSEST_OUTPUT, then the output next to the current one will selected. If close_far == FARTHEST_OUTPUT, the output which is the last one in the given direction will be selected.

NULL will be returned when no active outputs are present in the direction specified (note that ‘current’ counts as such an output).

Definition at line 196 of file randr.c.

References xoutput::active, CLOSEST_OUTPUT, D_DOWN, D_LEFT, D_RIGHT, D_UP, DLOG, Rect::height, xoutput::name, outputs, xoutput::rect, TAILQ_FOREACH, Rect::width, Rect::x, and Rect::y.

Referenced by _tree_next(), get_output_next_wrap(), and move_to_output_directed().

◆ get_output_next_wrap()

Output* get_output_next_wrap ( direction_t  direction,
Output current 
)

Like get_output_next with close_far == CLOSEST_OUTPUT, but wraps.

For example if get_output_next(D_DOWN, x, FARTHEST_OUTPUT) = NULL, then get_output_next_wrap(D_DOWN, x) will return the topmost output.

This function always returns a output: if no active outputs can be found, current itself is returned.

Definition at line 164 of file randr.c.

References CLOSEST_OUTPUT, D_DOWN, D_LEFT, D_RIGHT, D_UP, DLOG, FARTHEST_OUTPUT, get_output_next(), and xoutput::name.

Referenced by get_output_from_string().

Here is the call graph for this function:

◆ get_output_with_dimensions()

Output* get_output_with_dimensions ( Rect  rect)

Returns the active output which spans exactly the area specified by rect or NULL if there is no output like this.

Definition at line 114 of file randr.c.

References xoutput::active, DLOG, Rect::height, outputs, xoutput::rect, TAILQ_FOREACH, Rect::width, Rect::x, and Rect::y.

Referenced by manage_window().

◆ handle_output()

static void handle_output ( xcb_connection_t *  conn,
xcb_randr_output_t  id,
xcb_randr_get_output_info_reply_t *  output,
xcb_timestamp_t  cts,
resources_reply res 
)
static

Definition at line 544 of file randr.c.

References DLOG, FREE, get_output_by_id(), outputs, primary, sasprintf(), scalloc(), TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, and update_if_necessary().

Referenced by randr_query_outputs().

Here is the call graph for this function:

◆ init_ws_for_output()

void init_ws_for_output ( Output output,
Con content 
)

Initializes at least one workspace for this output, trying the following steps until there is at least one workspace:

• Move existing workspaces, which are assigned to be on the given output, to the output. • Create the first assigned workspace for this output. • Create the first unused workspace.

Definition at line 383 of file randr.c.

References CF_OUTPUT, xoutput::con, con_attach(), con_detach(), con_focus(), con_get_output(), create_workspace_on_output(), croot, DLOG, floating_fix_coordinates(), focused, Con::fullscreen_mode, get_output_by_name(), GREP_FIRST, init_ws_for_output(), LOG, Workspace_Assignment::name, xoutput::name, Con::name, Workspace_Assignment::output, output_get_content(), Con::rect, render_con(), TAILQ_EMPTY, TAILQ_FIRST, TAILQ_FOREACH, TAILQ_NEXT, workspace_is_visible(), workspace_show(), workspace_show_by_name(), and ws_assignments.

Referenced by fake_outputs_init(), init_ws_for_output(), query_screens(), randr_init(), randr_query_outputs(), and use_root_output().

Here is the call graph for this function:

◆ output_change_mode()

static void output_change_mode ( xcb_connection_t *  conn,
Output output 
)
static

◆ output_init_con()

void output_init_con ( Output output)

Initializes a CT_OUTPUT Con (searches existing ones from inplace restart before) to use for the given Output.

Definition at line 279 of file randr.c.

References xoutput::con, con_attach(), con_fix_percent(), con_new(), croot, DLOG, Match::dock, FREE, Match::insert_where, L_DOCKAREA, L_OUTPUT, L_SPLITH, Con::layout, match_init(), xoutput::name, Con::name, xoutput::rect, Con::rect, sasprintf(), scalloc(), sstrdup(), TAILQ_FOREACH, TAILQ_INSERT_TAIL, Con::type, and x_set_name().

Referenced by fake_outputs_init(), main(), query_screens(), randr_init(), randr_query_outputs(), and use_root_output().

Here is the call graph for this function:

◆ randr_disable_output()

void randr_disable_output ( Output output)

◆ randr_init()

void randr_init ( int *  event_base)

We have just established a connection to the X server and need the initial XRandR information to setup workspaces for each screen.

Definition at line 865 of file randr.c.

References xoutput::active, xoutput::con, conn, create_root_output(), DLOG, init_ws_for_output(), output_get_content(), output_init_con(), outputs, randr_query_outputs(), root, and TAILQ_INSERT_TAIL.

Referenced by main().

Here is the call graph for this function:

◆ randr_query_outputs()

void randr_query_outputs ( void  )

Variable Documentation

◆ outputs

struct outputs_head outputs = TAILQ_HEAD_INITIALIZER(outputs)

◆ primary

xcb_randr_get_output_primary_reply_t* primary

Definition at line 23 of file randr.c.

Referenced by handle_output(), and randr_query_outputs().

◆ root_output

Output* root_output
static

Definition at line 29 of file randr.c.