i3
Data Structures | Macros | Functions | Variables
floating.c File Reference
#include "all.h"
Include dependency graph for floating.c:

Go to the source code of this file.

Data Structures

struct  resize_window_callback_params
 

Macros

#define I3__FILE__   "floating.c"
 

Functions

static Rect total_outputs_dimensions (void)
 
void floating_check_size (Con *floating_con)
 Called when a floating window is created or resized.
 
void floating_enable (Con *con, bool automatic)
 Enables floating mode for the given container by detaching it from its parent, creating a new container around it and storing this container in the floating_windows list of the workspace.
 
void floating_disable (Con *con, bool automatic)
 Disables floating mode for the given container by re-attaching the container to its old parent.
 
void toggle_floating_mode (Con *con, bool automatic)
 Calls floating_enable() for tiling containers and floating_disable() for floating containers.
 
void floating_raise_con (Con *con)
 Raises the given container in the list of floating containers.
 
bool floating_maybe_reassign_ws (Con *con)
 Checks if con’s coordinates are within its workspace and re-assigns it to the actual workspace if not.
 
 DRAGGING_CB (drag_window_callback)
 
void floating_drag_window (Con *con, const xcb_button_press_event_t *event)
 Called when the user clicked on the titlebar of a floating window.
 
 DRAGGING_CB (resize_window_callback)
 
void floating_resize_window (Con *con, const bool proportional, const xcb_button_press_event_t *event)
 Called when the user clicked on a floating window while holding the floating_modifier and the right mouse button.
 
void drag_pointer (Con *con, const xcb_button_press_event_t *event, xcb_window_t confine_to, border_t border, int cursor, callback_t callback, const void *extra)
 This function grabs your pointer and lets you drag stuff around (borders).
 
void floating_reposition (Con *con, Rect newrect)
 Repositions the CT_FLOATING_CON to have the coordinates specified by newrect, but only if the coordinates are not out-of-bounds.
 
void floating_fix_coordinates (Con *con, Rect *old_rect, Rect *new_rect)
 Fixes the coordinates of the floating window whenever the window gets reassigned to a different output (or when the output’s rect changes).
 

Variables

xcb_connection_t * conn
 

Macro Definition Documentation

#define I3__FILE__   "floating.c"

Definition at line 2 of file floating.c.

Function Documentation

void drag_pointer ( Con con,
const xcb_button_press_event_t *  event,
xcb_window_t  confine_to,
border_t  border,
int  cursor,
callback_t  callback,
const void *  extra 
)

This function grabs your pointer and lets you drag stuff around (borders).

Every time you move your mouse, an XCB_MOTION_NOTIFY event will be received and the given callback will be called with the parameters specified (client, border on which the click originally was), the original rect of the client, the event and the new coordinates (x, y).

Definition at line 520 of file floating.c.

References conn, DLOG, ELOG, FREE, handle_event(), Con::rect, root, xcursor_get_cursor(), and xcursor_supported.

Referenced by floating_drag_window(), floating_resize_window(), and resize_graphical_handler().

Here is the call graph for this function:

DRAGGING_CB ( drag_window_callback  )

Definition at line 381 of file floating.c.

References conn, floating_maybe_reassign_ws(), render_con(), tree_render(), and x_push_node().

Here is the call graph for this function:

DRAGGING_CB ( resize_window_callback  )
void floating_check_size ( Con floating_con)

Called when a floating window is created or resized.

This function resizes the window if its size is higher or lower than the configured maximum/minimum size, respectively.

Definition at line 37 of file floating.c.

References config, Config::floating_maximum_height, Config::floating_maximum_width, Config::floating_minimum_height, Config::floating_minimum_width, Rect::height, max(), min(), Con::rect, total_outputs_dimensions(), and Rect::width.

Referenced by cmd_resize_floating(), and floating_enable().

Here is the call graph for this function:

void floating_disable ( Con con,
bool  automatic 
)

Disables floating mode for the given container by re-attaching the container to its old parent.

Definition at line 283 of file floating.c.

References con_attach(), con_descend_tiling_focused(), con_fix_percent(), con_focus(), con_get_workspace(), con_is_floating(), DONT_KILL_WINDOW, Con::floating, focused, LOG, Con::parent, Con::percent, TAILQ_REMOVE, tree_close(), and Con::type.

Referenced by cmd_floating(), toggle_floating_mode(), and tree_move().

Here is the call graph for this function:

void floating_drag_window ( Con con,
const xcb_button_press_event_t *  event 
)

Called when the user clicked on the titlebar of a floating window.

Calls the drag_pointer function with the drag_window callback

Definition at line 403 of file floating.c.

References BORDER_TOP, DLOG, drag_pointer(), tree_render(), and XCURSOR_CURSOR_MOVE.

Referenced by route_click().

Here is the call graph for this function:

void floating_enable ( Con con,
bool  automatic 
)
void floating_fix_coordinates ( Con con,
Rect old_rect,
Rect new_rect 
)

Fixes the coordinates of the floating window whenever the window gets reassigned to a different output (or when the output’s rect changes).

Definition at line 641 of file floating.c.

References DLOG, Rect::height, Con::rect, Rect::width, Rect::x, and Rect::y.

Referenced by cmd_move_workspace_to_output(), con_move_to_workspace(), floating_enable(), init_ws_for_output(), output_change_mode(), and randr_query_outputs().

bool floating_maybe_reassign_ws ( Con con)

Checks if con’s coordinates are within its workspace and re-assigns it to the actual workspace if not.

Definition at line 356 of file floating.c.

References xoutput::con, con_descend_focused(), con_focus(), con_get_output(), con_move_to_workspace(), DLOG, ELOG, get_output_containing(), Rect::height, Con::name, output_get_content(), Con::rect, TAILQ_FIRST, Rect::width, Rect::x, and Rect::y.

Referenced by cmd_move_window_to_center(), cmd_move_window_to_position(), DRAGGING_CB(), floating_enable(), and floating_reposition().

Here is the call graph for this function:

void floating_raise_con ( Con con)

Raises the given container in the list of floating containers.

Definition at line 345 of file floating.c.

References DLOG, Con::name, Con::parent, TAILQ_INSERT_TAIL, and TAILQ_REMOVE.

Referenced by route_click().

void floating_reposition ( Con con,
Rect  newrect 
)

Repositions the CT_FLOATING_CON to have the coordinates specified by newrect, but only if the coordinates are not out-of-bounds.

Also reassigns the floating con to a different workspace if this move was across different outputs.

Definition at line 618 of file floating.c.

References ELOG, floating_maybe_reassign_ws(), get_output_containing(), Rect::height, Con::rect, tree_render(), Rect::width, Rect::x, and Rect::y.

Referenced by cmd_move_direction(), cmd_move_window_to_center(), cmd_move_window_to_position(), and handle_configure_request().

Here is the call graph for this function:

void floating_resize_window ( Con con,
const bool  proportional,
const xcb_button_press_event_t *  event 
)

Called when the user clicked on a floating window while holding the floating_modifier and the right mouse button.

Calls the drag_pointer function with the resize_window callback

Definition at line 483 of file floating.c.

References BORDER_BOTTOM, BORDER_LEFT, BORDER_RIGHT, BORDER_TOP, resize_window_callback_params::corner, DLOG, drag_pointer(), Rect::height, resize_window_callback_params::proportional, Con::rect, Rect::width, XCURSOR_CURSOR_BOTTOM_LEFT_CORNER, XCURSOR_CURSOR_BOTTOM_RIGHT_CORNER, XCURSOR_CURSOR_TOP_LEFT_CORNER, and XCURSOR_CURSOR_TOP_RIGHT_CORNER.

Referenced by route_click().

Here is the call graph for this function:

void toggle_floating_mode ( Con con,
bool  automatic 
)

Calls floating_enable() for tiling containers and floating_disable() for floating containers.

If the automatic flag is set to true, this was an automatic update by a change of the window class from the application which can be overwritten by the user.

Definition at line 329 of file floating.c.

References con_is_floating(), floating_disable(), floating_enable(), and LOG.

Referenced by cmd_floating().

Here is the call graph for this function:

static Rect total_outputs_dimensions ( void  )
static

Definition at line 20 of file floating.c.

References Rect::height, outputs, xoutput::rect, TAILQ_FOREACH, and Rect::width.

Referenced by floating_check_size().

Variable Documentation

xcb_connection_t* conn