X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fdata.h;h=fe648d3d196adc11b41485067d7d0f7fd2d7164a;hb=c7ea8c42b679be191e843f653f5024846ce42fe9;hp=40fffbfc4cebf8c71d2a4d18f38003968083357f;hpb=752b1019162b13ac9975634d5974ebd1f34c14a5;p=i3%2Fi3 diff --git a/include/data.h b/include/data.h index 40fffbfc..fe648d3d 100644 --- a/include/data.h +++ b/include/data.h @@ -2,7 +2,7 @@ * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager - * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE) + * © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE) * * include/data.h: This file defines all data structures used by i3 * @@ -21,13 +21,20 @@ #include "queue.h" /* - * To get the big concept: There are helper structures like struct Colorpixel - * or struct Stack_Window. Everything which is also defined as type (see + * To get the big concept: There are helper structures like struct + * Workspace_Assignment. Every struct which is also defined as type (see * forward definitions) is considered to be a major structure, thus important. * - * Let’s start from the biggest to the smallest: + * The following things are all stored in a 'Con', from very high level (the + * biggest Cons) to very small (a single window): * - * TODO + * 1) X11 root window (as big as all your outputs combined) + * 2) output (like LVDS1) + * 3) content container, dockarea containers + * 4) workspaces + * 5) split containers + * ... (you can arbitrarily nest split containers) + * 6) X11 window containers * */ @@ -177,7 +184,7 @@ 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/command.c) + * command which is executed as soon as the key is pressed (see src/cfgparse.y) * */ struct Binding { @@ -256,6 +263,11 @@ struct xoutput { TAILQ_ENTRY(xoutput) outputs; }; +/** + * A 'Window' is a type which contains an xcb_window_t and all the related + * information (hints like _NET_WM_NAME for that window). + * + */ struct Window { xcb_window_t id; @@ -292,6 +304,10 @@ struct Window { /** Whether the application needs to receive WM_TAKE_FOCUS */ bool needs_take_focus; + /** Whether this window accepts focus. We store this inverted so that the + * default will be 'accepts focus'. */ + bool doesnt_accept_focus; + /** Whether the window says it is a dock window */ enum { W_NODOCK = 0, W_DOCK_TOP = 1, W_DOCK_BOTTOM = 2 } dock; @@ -304,6 +320,14 @@ struct Window { Assignment **ran_assignments; }; +/** + * A "match" is a data structure which acts like a mask or expression to match + * certain windows or not. For example, when using commands, you can specify a + * command like this: [title="*Firefox*"] kill. The title member of the match + * data structure will then be filled and i3 will check each window using + * match_matches_window() to find the windows affected by this command. + * + */ struct Match { struct regex *title; struct regex *application; @@ -333,15 +357,20 @@ struct Match { */ enum { M_HERE = 0, M_ASSIGN_WS, M_BELOW } insert_where; + /* Whether this match was generated when restarting i3 inplace. + * Leads to not setting focus when managing a new window, because the old + * focus stack should be restored. */ + bool restart_mode; + TAILQ_ENTRY(Match) matches; }; /** * An Assignment makes specific windows go to a specific workspace/output or * run a command for that window. With this mechanism, the user can -- for - * example -- make specific windows floating or assign his browser to workspace - * "www". Checking if a window is assigned works by comparing the Match data - * structure with the window (see match_matches_window()). + * example -- assign his browser to workspace "www". Checking if a window is + * assigned works by comparing the Match data structure with the window (see + * match_matches_window()). * */ struct Assignment { @@ -376,6 +405,10 @@ struct Assignment { TAILQ_ENTRY(Assignment) assignments; }; +/** + * A 'Con' represents everything from the X11 root window down to a single X11 window. + * + */ struct Con { bool mapped; enum { @@ -480,6 +513,16 @@ struct Con { /** callbacks */ void(*on_remove_child)(Con *); + + enum { + SCRATCHPAD_NONE = 0, + SCRATCHPAD_FRESH = 1, + SCRATCHPAD_CHANGED = 2 + } scratchpad_state; + + /* The ID of this container before restarting. Necessary to correctly + * interpret back-references in the JSON (such as the focus stack). */ + int old_id; }; #endif