]> git.sur5r.net Git - i3/i3/commitdiff
Merge branch 'master' into next
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Dec 2011 18:48:14 +0000 (18:48 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Dec 2011 18:48:14 +0000 (18:48 +0000)
1  2 
src/x.c

diff --combined src/x.c
index 070fae91b1e74097e9caf910099ad7c4302aec41,e8bfaeb4ecd1c2e4576c0c0b9a1dabb880d14c6c..6c5a11ecaf9cd22fd7e73284fa8d21c769a1f19d
+++ b/src/x.c
@@@ -307,6 -307,7 +307,6 @@@ void x_draw_decoration(Con *con) 
      p->con_deco_rect = con->deco_rect;
      p->background = config.client.background;
      p->con_is_leaf = con_is_leaf(con);
 -    p->font = config.font.id;
  
      if (con->deco_render_params != NULL &&
          (con->window == NULL || !con->window->name_x_changed) &&
      xcb_poly_segment(conn, parent->pixmap, parent->pm_gc, 2, segments);
  
      /* 6: draw the title */
 -    uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND | XCB_GC_FONT;
 -    uint32_t values[] = { p->color->text, p->color->background, config.font.id };
 -    xcb_change_gc(conn, parent->pm_gc, mask, values);
 -    int text_offset_y = config.font.height + (con->deco_rect.height - config.font.height) / 2 - 1;
 +    set_font_colors(parent->pm_gc, p->color->text, p->color->background);
 +    int text_offset_y = (con->deco_rect.height - config.font.height) / 2;
  
      struct Window *win = con->window;
      if (win == NULL || win->name_x == NULL) {
          /* this is a non-leaf container, we need to make up a good description */
          // TODO: use a good description instead of just "another container"
 -        xcb_image_text_8(
 -            conn,
 -            strlen("another container"),
 -            parent->pixmap,
 -            parent->pm_gc,
 -            con->deco_rect.x + 2,
 -            con->deco_rect.y + text_offset_y,
 -            "another container"
 -        );
 -
 +        draw_text("another container", strlen("another container"), false,
 +                parent->pixmap, parent->pm_gc,
 +                con->deco_rect.x + 2, con->deco_rect.y + text_offset_y,
 +                con->deco_rect.width - 2);
          goto copy_pixmaps;
      }
  
      //DLOG("indent_level = %d, indent_mult = %d\n", indent_level, indent_mult);
      int indent_px = (indent_level * 5) * indent_mult;
  
 -    if (win->uses_net_wm_name)
 -        xcb_image_text_16(
 -            conn,
 -            win->name_len,
 -            parent->pixmap,
 -            parent->pm_gc,
 -            con->deco_rect.x + 2 + indent_px,
 -            con->deco_rect.y + text_offset_y,
 -            (xcb_char2b_t*)win->name_x
 -        );
 -    else
 -        xcb_image_text_8(
 -            conn,
 -            win->name_len,
 -            parent->pixmap,
 -            parent->pm_gc,
 -            con->deco_rect.x + 2 + indent_px,
 -            con->deco_rect.y + text_offset_y,
 -            win->name_x
 -        );
 +    draw_text(win->name_x, win->name_len, win->uses_net_wm_name,
 +            parent->pixmap, parent->pm_gc,
 +            con->deco_rect.x + 2 + indent_px, con->deco_rect.y + text_offset_y,
 +            con->deco_rect.width - 2 - indent_px);
  
  copy_pixmaps:
      xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
@@@ -939,3 -964,19 +939,19 @@@ void x_set_warp_to(Rect *rect
  {
      warp_to = rect;
  }
+ /*
+  * Applies the given mask to the event mask of every i3 window decoration X11
+  * window. This is useful to disable EnterNotify while resizing so that focus
+  * is untouched.
+  *
+  */
+ void x_mask_event_mask(uint32_t mask) {
+     uint32_t values[] = { FRAME_EVENT_MASK & mask };
+     con_state *state;
+     CIRCLEQ_FOREACH_REVERSE(state, &state_head, state) {
+         if (state->mapped)
+             xcb_change_window_attributes(conn, state->id, XCB_CW_EVENT_MASK, values);
+     }
+ }