X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=fc0dcafdcdad78aa57c8329e4aa48fda930681ba;hb=f747837804445f4bdf5ec5e2b610c560d1d313dc;hp=0884578be394dd890694ef81246b4ceda0cc2504;hpb=7511a23d8ff3455dbc09d11bdd52a4b8c3fe3978;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 0884578..fc0dcaf 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -1442,8 +1442,7 @@ bar_print_legacy(struct swm_region *r, const char *s) /* clear back buffer */ gcv[0] = r->s->c[SWM_S_COLOR_BAR].pixel; xcb_change_gc(conn, r->s->bar_gc, XCB_GC_FOREGROUND, gcv); - xcb_poly_fill_rectangle(conn, r->bar->buffer, r->s->bar_gc, - sizeof(rect), &rect); + xcb_poly_fill_rectangle(conn, r->bar->buffer, r->s->bar_gc, 1, &rect); /* draw back buffer */ gcvd.graphics_exposures = 0; @@ -1496,8 +1495,7 @@ bar_print(struct swm_region *r, const char *s) /* clear back buffer */ gcv[0] = r->s->c[SWM_S_COLOR_BAR].pixel; xcb_change_gc(conn, r->s->bar_gc, XCB_GC_FOREGROUND, gcv); - xcb_poly_fill_rectangle(conn, r->bar->buffer, r->s->bar_gc, - sizeof(rect), &rect); + xcb_poly_fill_rectangle(conn, r->bar->buffer, r->s->bar_gc, 1, &rect); /* draw back buffer */ draw = XftDrawCreate(display, r->bar->buffer, @@ -7128,6 +7126,36 @@ print_win_geom(xcb_window_t w) } #endif +#ifdef SWM_DEBUG +char * +get_stack_mode_name(uint8_t mode) +{ + char *name; + + switch(mode) { + case XCB_STACK_MODE_ABOVE: + name = "Above"; + break; + case XCB_STACK_MODE_BELOW: + name = "Below"; + break; + case XCB_STACK_MODE_TOP_IF: + name = "TopIf"; + break; + case XCB_STACK_MODE_BOTTOM_IF: + name = "BottomIf"; + break; + case XCB_STACK_MODE_OPPOSITE: + name = "Opposite"; + break; + default: + name = "Unknown"; + } + + return name; +} +#endif + void configurerequest(xcb_configure_request_event_t *e) { @@ -7140,72 +7168,95 @@ configurerequest(xcb_configure_request_event_t *e) if ((win = find_unmanaged_window(e->window)) == NULL) new = 1; #ifdef SWM_DEBUG - print_win_geom(e->window); + if (swm_debug & SWM_D_EVENT) { + print_win_geom(e->window); + + DNPRINTF(SWM_D_EVENT, "configurerequest: window: 0x%x, " + "parent: 0x%x, new: %s, value_mask: %u { ", e->window, + e->parent, YESNO(new), e->value_mask); + if (e->value_mask & XCB_CONFIG_WINDOW_X) + DPRINTF("X: %d ", e->x); + if (e->value_mask & XCB_CONFIG_WINDOW_Y) + DPRINTF("Y: %d ", e->y); + if (e->value_mask & XCB_CONFIG_WINDOW_WIDTH) + DPRINTF("W: %u ", e->width); + if (e->value_mask & XCB_CONFIG_WINDOW_HEIGHT) + DPRINTF("H: %u ", e->height); + if (e->value_mask & XCB_CONFIG_WINDOW_BORDER_WIDTH) + DPRINTF("Border: %u ", e->border_width); + if (e->value_mask & XCB_CONFIG_WINDOW_SIBLING) + DPRINTF("Sibling: 0x%x ", e->sibling); + if (e->value_mask & XCB_CONFIG_WINDOW_STACK_MODE) + DPRINTF("StackMode: %s(%u) ", + get_stack_mode_name(e->stack_mode), e->stack_mode); + DPRINTF("}\n"); + } #endif + if (new) { - DNPRINTF(SWM_D_EVENT, "configurerequest: new window: 0x%x, " - "value_mask: 0x%x", e->window, e->value_mask); if (e->value_mask & XCB_CONFIG_WINDOW_X) { mask |= XCB_CONFIG_WINDOW_X; wc[i++] = e->x; - DPRINTF(", X: %d", e->x); } if (e->value_mask & XCB_CONFIG_WINDOW_Y) { mask |= XCB_CONFIG_WINDOW_Y; wc[i++] = e->y; - DPRINTF(", Y: %d", e->y); } if (e->value_mask & XCB_CONFIG_WINDOW_WIDTH) { mask |= XCB_CONFIG_WINDOW_WIDTH; wc[i++] = e->width; - DPRINTF(", W: %u", e->width); } if (e->value_mask & XCB_CONFIG_WINDOW_HEIGHT) { mask |= XCB_CONFIG_WINDOW_HEIGHT; wc[i++] = e->height; - DPRINTF(", H: %u", e->height); } if (e->value_mask & XCB_CONFIG_WINDOW_BORDER_WIDTH) { mask |= XCB_CONFIG_WINDOW_BORDER_WIDTH; wc[i++] = e->border_width; - DPRINTF(", Border: %u", e->border_width); } if (e->value_mask & XCB_CONFIG_WINDOW_SIBLING) { mask |= XCB_CONFIG_WINDOW_SIBLING; wc[i++] = e->sibling; - DPRINTF(", Sibling: 0x%x", e->sibling); } if (e->value_mask & XCB_CONFIG_WINDOW_STACK_MODE) { mask |= XCB_CONFIG_WINDOW_STACK_MODE; wc[i++] = e->stack_mode; - DPRINTF(", StackMode: %u", e->stack_mode); } if (mask != 0) xcb_configure_window(conn, e->window, mask, wc); - - DPRINTF(", Sent: %s\n", YESNO((mask != 0))); } else if ((!win->manual || win->quirks & SWM_Q_ANYWHERE) && !(win->ewmh_flags & EWMH_F_FULLSCREEN)) { - win->g_float.x = e->x; - win->g_float.y = e->y; - if (win->ws->r) { - win->g_float.x -= X(win->ws->r); - win->g_float.y -= Y(win->ws->r); - } else if (win->ws->old_r) { - win->g_float.x -= X(win->ws->old_r); - win->g_float.y -= Y(win->ws->old_r); + if (e->value_mask & XCB_CONFIG_WINDOW_X) { + win->g_float.x = e->x; + if (win->ws->r) + win->g_float.x -= X(win->ws->r); + else if (win->ws->old_r) + win->g_float.x -= X(win->ws->old_r); + } + + if (e->value_mask & XCB_CONFIG_WINDOW_Y) { + win->g_float.y = e->y; + if (win->ws->r) + win->g_float.y -= Y(win->ws->r); + else if (win->ws->old_r) + win->g_float.y -= Y(win->ws->old_r); } - win->g_float.w = e->width; - win->g_float.h = e->height; + if (e->value_mask & XCB_CONFIG_WINDOW_WIDTH) + win->g_float.w = e->width; + + if (e->value_mask & XCB_CONFIG_WINDOW_HEIGHT) + win->g_float.h = e->height; + win->g_floatvalid = 1; - if (win->floating) { - win->g.x = e->x; - win->g.y = e->y; - win->g.w = e->width; - win->g.h = e->height; + if (win->floating && win->ws->r) { + /* window is visible and floating; update position. */ + win->g = win->g_float; + X(win) += X(win->ws->r); + Y(win) += Y(win->ws->r); + update_window(win); } else { config_win(win, e);