X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fdata.h;h=9a814f4517edb63d5ccc10694773070ddad69c35;hb=c127ac3855ac3fef150d0583cb7ae8a764d7e955;hp=6df3f6fc5a082b10080b068b91803ac330ad065f;hpb=4622cde7b785b522b29d66c7d9bdcc9aa1eeb452;p=i3%2Fi3 diff --git a/include/data.h b/include/data.h index 6df3f6fc..9a814f45 100644 --- a/include/data.h +++ b/include/data.h @@ -7,14 +7,13 @@ * include/data.h: This file defines all data structures used by i3 * */ -#ifndef _DATA_H -#define _DATA_H +#ifndef I3_DATA_H +#define I3_DATA_H #define SN_API_NOT_YET_FROZEN 1 #include #include -#include #include #include #include @@ -55,7 +54,7 @@ typedef struct Window i3Window; *****************************************************************************/ typedef enum { D_LEFT, D_RIGHT, D_UP, D_DOWN } direction_t; typedef enum { NO_ORIENTATION = 0, HORIZ, VERT } orientation_t; -typedef enum { BS_NORMAL = 0, BS_NONE = 1, BS_1PIXEL = 2 } border_style_t; +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 * only this specific window or the whole X11 client */ @@ -135,6 +134,7 @@ struct deco_render_params { Rect con_deco_rect; uint32_t background; bool con_is_leaf; + orientation_t parent_orientation; }; /** @@ -168,6 +168,9 @@ struct Startup_Sequence { char *workspace; /** libstartup-notification context for this launch */ SnLauncherContext *context; + /** time at which this sequence should be deleted (after it was marked as + * completed) */ + time_t delete_at; TAILQ_ENTRY(Startup_Sequence) sequences; }; @@ -193,10 +196,25 @@ struct regex { /** * Holds a keybinding, consisting of a keycode combined with modifiers and the - * command which is executed as soon as the key is pressed (see src/cfgparse.y) + * command which is executed as soon as the key is pressed (see + * src/config_parser.c) * */ struct Binding { + /** If true, the binding should be executed upon a KeyRelease event, not a + * KeyPress (the default). */ + enum { + /* This binding will only be executed upon KeyPress events */ + B_UPON_KEYPRESS = 0, + /* This binding will be executed either upon a KeyRelease event, or… */ + B_UPON_KEYRELEASE = 1, + /* …upon a KeyRelease event, even if the modifiers don’t match. This + * state is triggered from get_binding() when the corresponding + * KeyPress (!) happens, so that users can release the modifier keys + * before releasing the actual key. */ + B_UPON_KEYRELEASE_IGNORE_MODS = 2, + } release; + /** Symbol the user specified in configfile, if any. This needs to be * stored with the binding to be able to re-convert it into a keycode * if the keyboard mapping changes (using Xmodmap for example) */ @@ -423,8 +441,6 @@ struct Assignment { */ struct Con { bool mapped; - /** whether this is a split container or not */ - bool split; enum { CT_ROOT = 0, CT_OUTPUT = 1, @@ -468,6 +484,7 @@ struct Con { /* the x11 border pixel attribute */ int border_width; + int current_border_width; /* minimum increment size specified for the window (in pixels) */ int width_increment; @@ -479,6 +496,9 @@ struct Con { * inside this container (if any) sets the urgency hint, for example. */ bool urgent; + /* timer used for disabling urgency */ + struct ev_timer *urgency_timer; + /* ids/pixmap/graphics context for the frame window */ xcb_window_t frame; xcb_pixmap_t pixmap; @@ -497,6 +517,20 @@ struct Con { TAILQ_HEAD(swallow_head, Match) swallow_head; enum { CF_NONE = 0, CF_OUTPUT = 1, CF_GLOBAL = 2 } fullscreen_mode; + /* layout is the layout of this container: one of split[v|h], stacked or + * tabbed. Special containers in the tree (above workspaces) have special + * layouts like dockarea or output. + * + * last_split_layout is one of splitv or splith to support the old "layout + * default" command which by now should be "layout splitv" or "layout + * splith" explicitly. + * + * workspace_layout is only for type == CT_WORKSPACE cons. When you change + * the layout of a workspace without any children, i3 cannot just set the + * layout (because workspaces need to be splitv/splith to allow focus + * parent and opening new containers). Instead, it stores the requested + * layout in workspace_layout and creates a new split container with that + * layout whenever a new container is attached to the workspace. */ enum { L_DEFAULT = 0, L_STACKED = 1, @@ -505,7 +539,7 @@ struct Con { L_OUTPUT = 4, L_SPLITV = 5, L_SPLITH = 6 - } layout, last_split_layout; + } layout, last_split_layout, workspace_layout; border_style_t border_style; /** floating? (= not in tiling layout) This cannot be simply a bool * because we want to keep track of whether the status was set by the