X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fdata.h;h=69a79ade09faabf22bca2ddbbebef2243a65c14c;hb=d78fd8d91fa714dec5288322098dec6410927f9e;hp=3a752c2e94e56932bbfaaee4f22e6ae12dbea2ff;hpb=7a77c5f0bb988ec2fff52e231590fff93a4ee6b9;p=i3%2Fi3 diff --git a/include/data.h b/include/data.h index 3a752c2e..69a79ade 100644 --- a/include/data.h +++ b/include/data.h @@ -9,6 +9,8 @@ */ #pragma once +#include "libi3.h" + #define SN_API_NOT_YET_FROZEN 1 #include @@ -17,7 +19,6 @@ #include #include -#include "libi3.h" #include "queue.h" /* @@ -62,7 +63,7 @@ typedef enum { BS_NORMAL = 0, BS_NONE = 1, BS_PIXEL = 2 } border_style_t; -/** parameter to specify whether tree_close() and x_window_kill() should kill +/** parameter to specify whether tree_close_internal() and x_window_kill() should kill * only this specific window or the whole X11 client */ typedef enum { DONT_KILL_WINDOW = 0, KILL_WINDOW = 1, @@ -75,6 +76,12 @@ typedef enum { ADJ_NONE = 0, ADJ_UPPER_SCREEN_EDGE = (1 << 2), ADJ_LOWER_SCREEN_EDGE = (1 << 4) } adjacent_t; +typedef enum { HEBM_NONE = ADJ_NONE, + HEBM_VERTICAL = ADJ_LEFT_SCREEN_EDGE | ADJ_RIGHT_SCREEN_EDGE, + HEBM_HORIZONTAL = ADJ_UPPER_SCREEN_EDGE | ADJ_LOWER_SCREEN_EDGE, + HEBM_BOTH = HEBM_VERTICAL | HEBM_HORIZONTAL, + HEBM_SMART = (1 << 5) } hide_edge_borders_mode_t; + typedef enum { MM_REPLACE, MM_ADD } mark_mode_t; @@ -179,7 +186,7 @@ struct deco_render_params { struct width_height con_rect; struct width_height con_window_rect; Rect con_deco_rect; - uint32_t background; + color_t background; layout_t parent_layout; bool con_is_leaf; }; @@ -192,7 +199,8 @@ struct Workspace_Assignment { char *name; char *output; - TAILQ_ENTRY(Workspace_Assignment) ws_assignments; + TAILQ_ENTRY(Workspace_Assignment) + ws_assignments; }; struct Ignore_Event { @@ -200,7 +208,8 @@ struct Ignore_Event { int response_type; time_t added; - SLIST_ENTRY(Ignore_Event) ignore_events; + SLIST_ENTRY(Ignore_Event) + ignore_events; }; /** @@ -219,7 +228,8 @@ struct Startup_Sequence { * completed) */ time_t delete_at; - TAILQ_ENTRY(Startup_Sequence) sequences; + TAILQ_ENTRY(Startup_Sequence) + sequences; }; /** @@ -237,6 +247,19 @@ struct regex { pcre_extra *extra; }; +/** + * Stores a resolved keycode (from a keysym), including the modifier mask. Will + * be passed to xcb_grab_key(). + * + */ +struct Binding_Keycode { + xcb_keycode_t keycode; + i3_event_state_mask_t modifiers; + + TAILQ_ENTRY(Binding_Keycode) + keycodes; +}; + /****************************************************************************** * Major types *****************************************************************************/ @@ -275,7 +298,9 @@ struct Binding { * title bar (default). */ bool whole_window; - uint32_t number_keycodes; + /** If this is true for a mouse binding, the binding should only be + * executed if the button press was not on the titlebar. */ + bool exclude_titlebar; /** Keycode to bind */ uint32_t keycode; @@ -290,17 +315,17 @@ struct Binding { * if the keyboard mapping changes (using Xmodmap for example) */ char *symbol; - /** Only in use if symbol != NULL. Gets set to the value to which the - * symbol got translated when binding. Useful for unbinding and - * checking which binding was used when a key press event comes in. - * - * This is an array of number_keycodes size. */ - xcb_keycode_t *translated_to; + /** Only in use if symbol != NULL. Contains keycodes which generate the + * specified symbol. Useful for unbinding and checking which binding was + * used when a key press event comes in. */ + TAILQ_HEAD(keycodes_head, Binding_Keycode) + keycodes_head; /** Command, like in command mode */ char *command; - TAILQ_ENTRY(Binding) bindings; + TAILQ_ENTRY(Binding) + bindings; }; /** @@ -316,8 +341,12 @@ struct Autostart { /** no_startup_id flag for start_application(). Determines whether a * startup notification context/ID should be created. */ bool no_startup_id; - TAILQ_ENTRY(Autostart) autostarts; - TAILQ_ENTRY(Autostart) autostarts_always; + + TAILQ_ENTRY(Autostart) + autostarts; + + TAILQ_ENTRY(Autostart) + autostarts_always; }; /** @@ -350,7 +379,8 @@ struct xoutput { /** x, y, width, height */ Rect rect; - TAILQ_ENTRY(xoutput) outputs; + TAILQ_ENTRY(xoutput) + outputs; }; /** @@ -376,8 +406,6 @@ struct Window { /** The name of the window. */ i3String *name; - /** The format with which the window's name should be displayed. */ - char *title_format; /** The WM_WINDOW_ROLE of this window (for example, the pidgin buddy window * sets "buddy list"). Useful to match specific windows in assignments or @@ -400,6 +428,9 @@ struct Window { /** The _NET_WM_WINDOW_TYPE for this window. */ xcb_atom_t window_type; + /** The _NET_WM_DESKTOP for this window. */ + uint32_t wm_desktop; + /** Whether the window says it is a dock window */ enum { W_NODOCK = 0, W_DOCK_TOP = 1, @@ -423,6 +454,10 @@ struct Window { int width_increment; int height_increment; + /* Minimum size specified for the window. */ + int min_width; + int min_height; + /* aspect ratio from WM_NORMAL_HINTS (MPlayer uses this for example) */ double aspect_ratio; }; @@ -436,6 +471,9 @@ struct Window { * */ struct Match { + /* Set if a criterion was specified incorrectly. */ + char *error; + struct regex *title; struct regex *application; struct regex *class; @@ -457,9 +495,9 @@ struct Match { M_DOCK_BOTTOM = 3 } dock; xcb_window_t id; - enum { M_ANY = 0, - M_TILING, - M_FLOATING } floating; + enum { WM_ANY = 0, + WM_TILING, + WM_FLOATING } window_mode; Con *con_id; /* Where the window looking for a match should be inserted: @@ -475,7 +513,8 @@ struct Match { M_ASSIGN_WS, M_BELOW } insert_where; - TAILQ_ENTRY(Match) matches; + TAILQ_ENTRY(Match) + matches; /* Whether this match was generated when restarting i3 inplace. * Leads to not setting focus when managing a new window, because the old @@ -519,7 +558,8 @@ struct Assignment { char *workspace; } dest; - TAILQ_ENTRY(Assignment) assignments; + TAILQ_ENTRY(Assignment) + assignments; }; /** Fullscreen modes. Used by Con.fullscreen_mode. */ @@ -530,7 +570,8 @@ typedef enum { CF_NONE = 0, struct mark_t { char *name; - TAILQ_ENTRY(mark_t) marks; + TAILQ_ENTRY(mark_t) + marks; }; /** @@ -551,11 +592,10 @@ struct Con { * change. */ uint8_t ignore_unmap; - /* ids/pixmap/graphics context for the frame window */ + /* The surface used for the frame window. */ + surface_t frame; + surface_t frame_buffer; bool pixmap_recreated; - xcb_window_t frame; - xcb_pixmap_t pixmap; - xcb_gcontext_t pm_gc; enum { CT_ROOT = 0, @@ -572,21 +612,31 @@ struct Con { struct Con *parent; + /* The position and size for this con. These coordinates are absolute. Note + * that the rect of a container does not include the decoration. */ struct Rect rect; + /* The position and size of the actual client window. These coordinates are + * relative to the container's rect. */ struct Rect window_rect; + /* The position and size of the container's decoration. These coordinates + * are relative to the container's parent's rect. */ struct Rect deco_rect; /** the geometry this window requested when getting mapped */ struct Rect geometry; char *name; + /** The format with which the window's name should be displayed. */ + char *title_format; + /* a sticky-group is an identifier which bundles several containers to a * group. The contents are shared between all of them, that is they are * displayed on whichever of the containers is currently visible */ char *sticky_group; /* user-definable marks to jump to this container later */ - TAILQ_HEAD(marks_head, mark_t) marks_head; + TAILQ_HEAD(marks_head, mark_t) + marks_head; /* cached to decide whether a redraw is needed */ bool mark_changed; @@ -605,12 +655,17 @@ struct Con { struct deco_render_params *deco_render_params; /* Only workspace-containers can have floating clients */ - TAILQ_HEAD(floating_head, Con) floating_head; + TAILQ_HEAD(floating_head, Con) + floating_head; + + TAILQ_HEAD(nodes_head, Con) + nodes_head; - TAILQ_HEAD(nodes_head, Con) nodes_head; - TAILQ_HEAD(focus_head, Con) focus_head; + TAILQ_HEAD(focus_head, Con) + focus_head; - TAILQ_HEAD(swallow_head, Match) swallow_head; + TAILQ_HEAD(swallow_head, Match) + swallow_head; fullscreen_mode_t fullscreen_mode; @@ -648,10 +703,17 @@ struct Con { FLOATING_USER_ON = 3 } floating; - TAILQ_ENTRY(Con) nodes; - TAILQ_ENTRY(Con) focused; - TAILQ_ENTRY(Con) all_cons; - TAILQ_ENTRY(Con) floating_windows; + TAILQ_ENTRY(Con) + nodes; + + TAILQ_ENTRY(Con) + focused; + + TAILQ_ENTRY(Con) + all_cons; + + TAILQ_ENTRY(Con) + floating_windows; /** callbacks */ void (*on_remove_child)(Con *); @@ -674,4 +736,7 @@ struct Con { /* Depth of the container window */ uint16_t depth; + + /* The colormap for this con if a custom one is used. */ + xcb_colormap_t colormap; };