diff --git a/ChangeLog b/ChangeLog index 3218a03a..72a6bfd5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -49,6 +49,7 @@ Changes since version 0.80.2: (this is to be consistent with deminiaturizing application's miniwindows which also happens in this case, since shading is a form of miniaturization) - Fixed bug with tpixmap from previous xinerama patch +- Fixed edge resistance and move/resize frame drawing for borderless windows Changes since version 0.80.1: diff --git a/src/moveres.c b/src/moveres.c index 0054816e..0a812dfe 100644 --- a/src/moveres.c +++ b/src/moveres.c @@ -62,6 +62,13 @@ #define DOWN 8 #define VERTICAL (UP|DOWN) + +/* True if window currently has a border. This also includes borderless + * windows which are currently selected + */ +#define HAS_BORDER(w) ((w)->flags.selected || !WFLAGP((w), no_border)) + + /****** Global Variables ******/ extern Time LastTimestamp; @@ -256,6 +263,17 @@ showGeometry(WWindow *wwin, int x1, int y1, int x2, int y2, int direction) WMColor *color; WMPixel pixel; + /* This seems necessary for some odd reason (too lazy to write x1-1 and + * x2-1 everywhere below in the code). But why only for x? */ + x1--; x2--; + + if (HAS_BORDER(wwin)) { + x1 += FRAME_BORDER_WIDTH; + x2 += FRAME_BORDER_WIDTH; + y1 += FRAME_BORDER_WIDTH; + y2 += FRAME_BORDER_WIDTH; + } + ty = y1 + wwin->frame->top_width; by = y2 - wwin->frame->bottom_width; @@ -503,24 +521,27 @@ drawTransparentFrame(WWindow *wwin, int x, int y, int width, int height) int h = 0; int bottom = 0; + if (HAS_BORDER(wwin)) { + x += FRAME_BORDER_WIDTH; + y += FRAME_BORDER_WIDTH; + } + if (!WFLAGP(wwin, no_titlebar) && !wwin->flags.shaded) { h = WMFontHeight(wwin->screen_ptr->title_font) + (wPreferences.window_title_clearance + TITLEBAR_EXTEND_SPACE) * 2; } if (!WFLAGP(wwin, no_resizebar) && !wwin->flags.shaded) { /* Can't use wwin-frame->bottom_width because, in some cases (e.g. interactive placement), frame does not point to anything. */ - bottom = RESIZEBAR_HEIGHT - 1; + bottom = RESIZEBAR_HEIGHT; } - XDrawRectangle(dpy, root, gc, x, y, width + 1, height + 1); + XDrawRectangle(dpy, root, gc, x - 1, y - 1, width + 1, height + 1); if (h > 0) { - XDrawLine(dpy, root, gc, x + 1, y + h, x + width + 1, y + h); + XDrawLine(dpy, root, gc, x, y + h - 1, x + width, y + h - 1); } if (bottom > 0) { - XDrawLine(dpy, root, gc, x + 1, - y + height - bottom, - x + width + 1, - y + height - bottom); + XDrawLine(dpy, root, gc, x, y + height - bottom, + x + width, y + height - bottom); } } @@ -642,8 +663,10 @@ typedef struct { #define WTOP(w) (w)->frame_y #define WLEFT(w) (w)->frame_x -#define WRIGHT(w) ((w)->frame_x + (int)(w)->frame->core->width + FRAME_BORDER_WIDTH) -#define WBOTTOM(w) ((w)->frame_y + (int)(w)->frame->core->height + FRAME_BORDER_WIDTH) +#define WRIGHT(w) ((w)->frame_x + (int)(w)->frame->core->width - 1 + \ + (HAS_BORDER(w) ? 2*FRAME_BORDER_WIDTH : 0)) +#define WBOTTOM(w) ((w)->frame_y + (int)(w)->frame->core->height - 1 + \ + (HAS_BORDER(w) ? 2*FRAME_BORDER_WIDTH : 0)) static int compareWTop(const void *a, const void *b) @@ -901,8 +924,10 @@ initMoveData(WWindow *wwin, MoveData *data) data->calcX = wwin->frame_x; data->calcY = wwin->frame_y; - data->winWidth = wwin->frame->core->width + 2; - data->winHeight = wwin->frame->core->height + 2; + data->winWidth = wwin->frame->core->width + + (HAS_BORDER(wwin) ? 2*FRAME_BORDER_WIDTH : 0); + data->winHeight = wwin->frame->core->height + + (HAS_BORDER(wwin) ? 2*FRAME_BORDER_WIDTH : 0); } diff --git a/util/wmsetbg.c b/util/wmsetbg.c index c999bb87..8c79f3b8 100644 --- a/util/wmsetbg.c +++ b/util/wmsetbg.c @@ -1425,7 +1425,7 @@ main(int argc, char **argv) WMPropList *val; #if 0 /* some problem with Alpha... TODO: check if its right */ val = WMGetFromPLDictionary(domain, - WMCreatePLString("SmoothWorkspaceBack")); + WMCreatePLString("SmoothWorkspaceBack")); #else val = getValueForKey(domain, "SmoothWorkspaceBack"); #endif @@ -1439,7 +1439,7 @@ main(int argc, char **argv) wfatal("could not open display"); exit(1); } -#if 1 +#if 0 XSynchronize(dpy, 1); #endif