Use separate buffers for i3bar statusline for each workspace, track short and long renders separately, fixes #1824
This commit is contained in:
@ -31,6 +31,14 @@ typedef enum {
|
||||
ALIGN_RIGHT
|
||||
} blockalign_t;
|
||||
|
||||
/* This data structure describes the way a status block should be rendered. These
|
||||
* variables are updated each time the statusline is re-rendered. */
|
||||
struct status_block_render_desc {
|
||||
uint32_t width;
|
||||
uint32_t x_offset;
|
||||
uint32_t x_append;
|
||||
};
|
||||
|
||||
/* This data structure represents one JSON dictionary, multiple of these make
|
||||
* up one status line. */
|
||||
struct status_block {
|
||||
@ -56,11 +64,9 @@ struct status_block {
|
||||
/* The amount of pixels necessary to render a separater after the block. */
|
||||
uint32_t sep_block_width;
|
||||
|
||||
/* The amount of pixels necessary to render this block. These variables are
|
||||
* only temporarily used in refresh_statusline(). */
|
||||
uint32_t width;
|
||||
uint32_t x_offset;
|
||||
uint32_t x_append;
|
||||
/* Continuously-updated information on how to render this status block. */
|
||||
struct status_block_render_desc full_render;
|
||||
struct status_block_render_desc short_render;
|
||||
|
||||
/* Optional */
|
||||
char *name;
|
||||
|
@ -46,8 +46,14 @@ struct i3_output {
|
||||
int ws; /* The number of the currently visible ws */
|
||||
rect rect; /* The rect (relative to the root window) */
|
||||
|
||||
/* Off-screen buffer for preliminary rendering. */
|
||||
/* Off-screen buffer for preliminary rendering of the bar. */
|
||||
surface_t buffer;
|
||||
/* Off-screen buffer for pre-rendering the statusline, separated to make clipping easier. */
|
||||
surface_t statusline_buffer;
|
||||
/* How much of statusline_buffer's horizontal space was used on last statusline render. */
|
||||
int statusline_width;
|
||||
/* Whether statusline block short texts where used on last statusline render. */
|
||||
bool statusline_short_text;
|
||||
/* The actual window on which we draw. */
|
||||
surface_t bar;
|
||||
|
||||
|
Reference in New Issue
Block a user