X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fx.c;h=267372f93bace95ce5e53ebee6e4d2a208034a9a;hb=becd97e2fbef02e70cf87d0f7eb5ffcb61952228;hp=ceffd30a446255277b8177bda386c4e312f52f13;hpb=6d82753d53f680432f8167bc0b514fb1aa044fbb;p=i3%2Fi3 diff --git a/src/x.c b/src/x.c index ceffd30a..267372f9 100644 --- a/src/x.c +++ b/src/x.c @@ -42,7 +42,7 @@ typedef struct con_state { bool child_mapped; bool is_hidden; - /** The con for which this state is. */ + /* The con for which this state is. */ Con *con; /* For reparenting, we have a flag (need_reparent) and the X ID of the old @@ -105,6 +105,10 @@ static con_state *state_for_frame(xcb_window_t window) { * */ static void change_ewmh_focus(xcb_window_t new_focus, xcb_window_t old_focus) { + if (new_focus == old_focus) { + return; + } + ewmh_update_active_window(new_focus); if (new_focus != XCB_WINDOW_NONE) { @@ -504,14 +508,12 @@ void x_draw_decoration(Con *con) { /* 3: draw a rectangle in border color around the client */ if (p->border_style != BS_NONE && p->con_is_leaf) { /* We might hide some borders adjacent to the screen-edge */ - adjacent_t borders_to_hide = ADJ_NONE; - borders_to_hide = con_adjacent_borders(con) & config.hide_edge_borders; - + adjacent_t borders_to_hide = con_adjacent_borders(con) & config.hide_edge_borders; Rect br = con_border_style_rect(con); /* These rectangles represent the border around the child window * (left, bottom and right part). We don’t just fill the whole - * rectangle because some childs are not freely resizable and we want + * rectangle because some children are not freely resizable and we want * their background color to "shine through". */ if (!(borders_to_hide & ADJ_LEFT_SCREEN_EDGE)) { draw_util_rectangle(&(con->frame_buffer), p->color->child_border, 0, 0, br.x, r->height); @@ -577,31 +579,6 @@ void x_draw_decoration(Con *con) { /* 6: draw the title */ int text_offset_y = (con->deco_rect.height - config.font.height) / 2; - struct Window *win = con->window; - if (win == NULL) { - i3String *title; - if (con->title_format == NULL) { - char *_title; - char *tree = con_get_tree_representation(con); - sasprintf(&_title, "i3: %s", tree); - free(tree); - - title = i3string_from_utf8(_title); - FREE(_title); - } else { - title = con_parse_title_format(con); - } - - draw_util_text(title, &(parent->frame_buffer), - p->color->text, p->color->background, - con->deco_rect.x + logical_px(2), - con->deco_rect.y + text_offset_y, - con->deco_rect.width - 2 * logical_px(2)); - I3STRING_FREE(title); - - goto after_title; - } - const int title_padding = logical_px(2); const int deco_width = (int)con->deco_rect.width; int mark_width = 0; @@ -641,7 +618,23 @@ void x_draw_decoration(Con *con) { FREE(formatted_mark); } - i3String *title = con->title_format == NULL ? win->name : con_parse_title_format(con); + i3String *title = NULL; + struct Window *win = con->window; + if (win == NULL) { + if (con->title_format == NULL) { + char *_title; + char *tree = con_get_tree_representation(con); + sasprintf(&_title, "i3: %s", tree); + free(tree); + + title = i3string_from_utf8(_title); + FREE(_title); + } else { + title = con_parse_title_format(con); + } + } else { + title = con->title_format == NULL ? win->name : con_parse_title_format(con); + } if (title == NULL) { goto copy_pixmaps; } @@ -674,11 +667,10 @@ void x_draw_decoration(Con *con) { con->deco_rect.y + text_offset_y, deco_width - mark_width - 2 * title_padding); - if (con->title_format != NULL) { + if (win == NULL || con->title_format != NULL) { I3STRING_FREE(title); } -after_title: x_draw_decoration_after_title(con, p); copy_pixmaps: draw_util_copy_surface(&(con->frame_buffer), &(con->frame), 0, 0, 0, 0, con->rect.width, con->rect.height); @@ -1283,7 +1275,7 @@ void x_set_name(Con *con, const char *name) { * Set up the I3_SHMLOG_PATH atom. * */ -void update_shmlog_atom() { +void update_shmlog_atom(void) { if (*shmlogname == '\0') { xcb_delete_property(conn, root, A_I3_SHMLOG_PATH); } else {