X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fcon.h;h=20e83df935bdf7501ec0da3a8c7918245d8f36a1;hb=8d2799c251cc1c44f1429c36817c346fa56b9701;hp=93497404c3f93dd2b1cbf70f5f158c61970c0be7;hpb=7fca7f029f27847e0e4c3c15773fa1c2db118ffe;p=i3%2Fi3 diff --git a/include/con.h b/include/con.h index 93497404..20e83df9 100644 --- a/include/con.h +++ b/include/con.h @@ -1,3 +1,14 @@ +/* + * vim:ts=4:sw=4:expandtab + * + * i3 - an improved dynamic tiling window manager + * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE) + * + * con.c: Functions which deal with containers directly (creating containers, + * searching containers, getting specific properties from containers, + * …). + * + */ #ifndef _CON_H #define _CON_H @@ -72,7 +83,7 @@ Con *con_inside_floating(Con *con); * Checks if the given container is inside a focused container. * */ -Con *con_inside_focused(Con *con); +bool con_inside_focused(Con *con); /** * Returns the container with the given client window ID or NULL if no such @@ -138,13 +149,20 @@ void con_toggle_fullscreen(Con *con, int fullscreen_mode); * Moves the given container to the currently focused container on the given * workspace. * + * The fix_coordinates flag will translate the current coordinates (offset from + * the monitor position basically) to appropriate coordinates on the + * destination workspace. + * Not enabling this behaviour comes in handy when this function gets called by + * floating_maybe_reassign_ws, which will only "move" a floating window when it + * *already* changed its coordinates to a different output. + * * The dont_warp flag disables pointer warping and will be set when this * function is called while dragging a floating window. * * TODO: is there a better place for this function? * */ -void con_move_to_workspace(Con *con, Con *workspace, bool dont_warp); +void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool dont_warp); /** * Returns the orientation of the given container (for stacked containers, @@ -203,6 +221,12 @@ Con *con_descend_direction(Con *con, direction_t direction); */ Rect con_border_style_rect(Con *con); +/** + * Returns adjacent borders of the window. We need this if hide_edge_borders is + * enabled. + */ +adjacent_t con_adjacent_borders(Con *con); + /** * Use this function to get a container’s border style. This is important * because when inside a stack, the border style is always BS_NORMAL. @@ -215,6 +239,13 @@ Rect con_border_style_rect(Con *con); */ int con_border_style(Con *con); +/** + * Sets the given border style on con, correctly keeping the position/size of a + * floating window. + * + */ +void con_set_border_style(Con *con, int border_style); + /** * This function changes the layout of a given container. Use it to handle * special cases like changing a whole workspace to stacked/tabbed (creates a @@ -223,6 +254,15 @@ int con_border_style(Con *con); */ void con_set_layout(Con *con, int layout); +/** + * This function toggles the layout of a given container. toggle_mode can be + * either 'default' (toggle only between stacked/tabbed/last_split_layout), + * 'split' (toggle only between splitv/splith) or 'all' (toggle between all + * layouts). + * + */ +void con_toggle_layout(Con *con, const char *toggle_mode); + /** * Determines the minimum size of the given con by looking at its children (for * split/stacked/tabbed cons). Will be called when resizing floating cons @@ -230,4 +270,27 @@ void con_set_layout(Con *con, int layout); */ Rect con_minimum_size(Con *con); +/** + * Returns true if changing the focus to con would be allowed considering + * the fullscreen focus constraints. Specifically, if a fullscreen container or + * any of its descendants is focused, this function returns true if and only if + * focusing con would mean that focus would still be visible on screen, i.e., + * the newly focused container would not be obscured by a fullscreen container. + * + * In the simplest case, if a fullscreen container or any of its descendants is + * fullscreen, this functions returns true if con is the fullscreen container + * itself or any of its descendants, as this means focus wouldn't escape the + * boundaries of the fullscreen container. + * + * In case the fullscreen container is of type CF_OUTPUT, this function returns + * true if con is on a different workspace, as focus wouldn't be obscured by + * the fullscreen container that is constrained to a different workspace. + * + * Note that this same logic can be applied to moving containers. If a + * container can be focused under the fullscreen focus constraints, it can also + * become a parent or sibling to the currently focused container. + * + */ +bool con_fullscreen_permits_focusing(Con *con); + #endif