5b8e2ecb18
Details which are missing: A command to hide/show all floating clients, moving/resizing clients with your mouse holding Mod1 (click anywhere in the client, not just on its borders), resize/move by keyboard, select next/previous client by keyboard
83 lines
2.5 KiB
C
83 lines
2.5 KiB
C
/*
|
||
* vim:ts=8:expandtab
|
||
*
|
||
* i3 - an improved dynamic tiling window manager
|
||
*
|
||
* (c) 2009 Michael Stapelberg and contributors
|
||
*
|
||
* See file LICENSE for license information.
|
||
*
|
||
*/
|
||
#include <xcb/xcb.h>
|
||
|
||
#ifndef _LAYOUT_H
|
||
#define _LAYOUT_H
|
||
|
||
/**
|
||
* Gets the unoccupied space (= space which is available for windows which were resized by the user)
|
||
* This is necessary to render both, customly resized windows and never touched
|
||
* windows correctly, meaning that the aspect ratio will be maintained when opening new windows.
|
||
*
|
||
*/
|
||
int get_unoccupied_x(Workspace *workspace);
|
||
|
||
/**
|
||
* (Re-)draws window decorations for a given Client onto the given drawable/graphic context.
|
||
* When in stacking mode, the window decorations are drawn onto an own window.
|
||
*
|
||
*/
|
||
void decorate_window(xcb_connection_t *conn, Client *client, xcb_drawable_t drawable, xcb_gcontext_t gc, int offset);
|
||
|
||
/**
|
||
* Redecorates the given client correctly by checking if it’s in a stacking container and
|
||
* re-rendering the stack window or just calling decorate_window if it’s not in a stacking
|
||
* container.
|
||
*
|
||
*/
|
||
void redecorate_window(xcb_connection_t *conn, Client *client);
|
||
|
||
/**
|
||
* Pushes the client’s x and y coordinates to X11
|
||
*
|
||
*/
|
||
void reposition_client(xcb_connection_t *conn, Client *client);
|
||
|
||
/**
|
||
* Pushes the client’s width/height to X11 and resizes the child window
|
||
*
|
||
*/
|
||
void resize_client(xcb_connection_t *conn, Client *client);
|
||
|
||
/**
|
||
* Renders the given container. Is called by render_layout() or individually (for example
|
||
* when focus changes in a stacking container)
|
||
*
|
||
*/
|
||
void render_container(xcb_connection_t *conn, Container *container);
|
||
|
||
/**
|
||
* Modifies the event mask of all clients on the given workspace to either ignore or to handle
|
||
* enter notifies. It is handy to ignore notifies because they will be sent when a window is mapped
|
||
* under the cursor, thus when the user didn’t enter the window actively at all.
|
||
*
|
||
*/
|
||
void ignore_enter_notify_forall(xcb_connection_t *conn, Workspace *workspace, bool ignore_enter_notify);
|
||
|
||
/**
|
||
* Renders the given workspace on the given screen
|
||
*
|
||
*/
|
||
void render_workspace(xcb_connection_t *conn, i3Screen *screen, Workspace *r_ws);
|
||
|
||
/**
|
||
* Renders the whole layout, that is: Go through each screen, each workspace, each container
|
||
* and render each client. This also renders the bars.
|
||
*
|
||
* If you don’t need to render *everything*, you should call render_container on the container
|
||
* you want to refresh.
|
||
*
|
||
*/
|
||
void render_layout(xcb_connection_t *conn);
|
||
|
||
#endif
|