2009-02-14 02:33:31 +01:00
|
|
|
|
/*
|
|
|
|
|
* vim:ts=8:expandtab
|
|
|
|
|
*
|
|
|
|
|
* i3 - an improved dynamic tiling window manager
|
|
|
|
|
*
|
|
|
|
|
* (c) 2009 Michael Stapelberg and contributors
|
|
|
|
|
*
|
|
|
|
|
* See file LICENSE for license information.
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-02-13 19:04:45 +01:00
|
|
|
|
#include <xcb/xcb.h>
|
|
|
|
|
|
|
|
|
|
#ifndef _LAYOUT_H
|
|
|
|
|
#define _LAYOUT_H
|
|
|
|
|
|
2009-05-03 14:29:58 +02:00
|
|
|
|
/**
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* 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.
|
2009-05-03 14:29:58 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-05-09 17:48:35 +02:00
|
|
|
|
int get_unoccupied_x(Workspace *workspace);
|
2009-05-03 14:29:58 +02:00
|
|
|
|
|
2009-04-07 19:02:07 +02:00
|
|
|
|
/**
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* (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.
|
2009-04-07 19:02:07 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-06-29 21:54:51 +02:00
|
|
|
|
void decorate_window(xcb_connection_t *conn, Client *client,
|
|
|
|
|
xcb_drawable_t drawable, xcb_gcontext_t gc, int offset);
|
2009-04-07 19:02:07 +02:00
|
|
|
|
|
|
|
|
|
/**
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* 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.
|
2009-04-07 19:02:07 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-03-03 02:28:26 +01:00
|
|
|
|
void redecorate_window(xcb_connection_t *conn, Client *client);
|
2009-04-07 19:02:07 +02:00
|
|
|
|
|
2009-05-23 16:34:03 +02:00
|
|
|
|
/**
|
|
|
|
|
* Pushes the client’s x and y coordinates to X11
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void reposition_client(xcb_connection_t *conn, Client *client);
|
|
|
|
|
|
|
|
|
|
/**
|
2009-08-08 21:31:42 +02:00
|
|
|
|
* Pushes the client’s width/height to X11 and resizes the child window. This
|
|
|
|
|
* function also updates the client’s position, so if you work on tiling clients
|
|
|
|
|
* only, you can use this function instead of separate calls to reposition_client
|
|
|
|
|
* and resize_client to reduce flickering.
|
2009-05-23 16:34:03 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void resize_client(xcb_connection_t *conn, Client *client);
|
|
|
|
|
|
2009-04-07 19:02:07 +02:00
|
|
|
|
/**
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* Renders the given container. Is called by render_layout() or individually
|
|
|
|
|
* (for example when focus changes in a stacking container)
|
2009-04-07 19:02:07 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-03-04 15:45:12 +01:00
|
|
|
|
void render_container(xcb_connection_t *conn, Container *container);
|
2009-04-07 19:02:07 +02:00
|
|
|
|
|
|
|
|
|
/**
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* 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.
|
2009-04-07 19:02:07 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-06-29 21:54:51 +02:00
|
|
|
|
void ignore_enter_notify_forall(xcb_connection_t *conn, Workspace *workspace,
|
|
|
|
|
bool ignore_enter_notify);
|
2009-04-07 19:02:07 +02:00
|
|
|
|
|
2009-05-09 13:01:23 +02:00
|
|
|
|
/**
|
|
|
|
|
* Renders the given workspace on the given screen
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void render_workspace(xcb_connection_t *conn, i3Screen *screen, Workspace *r_ws);
|
|
|
|
|
|
2009-04-07 19:02:07 +02:00
|
|
|
|
/**
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* Renders the whole layout, that is: Go through each screen, each workspace,
|
|
|
|
|
* each container and render each client. This also renders the bars.
|
2009-04-07 19:02:07 +02:00
|
|
|
|
*
|
2009-06-29 21:54:51 +02:00
|
|
|
|
* If you don’t need to render *everything*, you should call render_container
|
|
|
|
|
* on the container you want to refresh.
|
2009-04-07 19:02:07 +02:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-02-13 19:04:45 +01:00
|
|
|
|
void render_layout(xcb_connection_t *conn);
|
|
|
|
|
|
|
|
|
|
#endif
|