diff --git a/src/backend/x11.c b/src/backend/x11.c index 1cc8247..278b234 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -325,9 +325,13 @@ static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsign } static void MwLLSetXYImpl(MwLL handle, int x, int y) { - XSizeHints sh; - long r; - XWindowChanges xwc; + XSizeHints sh; + long r; + XWindowChanges xwc; + XWindowAttributes xwa; + + XGetWindowAttributes(handle->x11.display, handle->x11.window, &xwa); + if(xwa.x == x && xwa.y == y) return; sh.flags = 0; XGetWMNormalHints(handle->x11.display, handle->x11.window, &sh, &r); @@ -349,9 +353,14 @@ static void MwLLSetXYImpl(MwLL handle, int x, int y) { } static void MwLLSetWHImpl(MwLL handle, int w, int h) { - XSizeHints sh; - long r; - XWindowChanges xwc; + XSizeHints sh; + long r; + XWindowChanges xwc; + XWindowAttributes xwa; + + XGetWindowAttributes(handle->x11.display, handle->x11.window, &xwa); + if(xwa.width == w && xwa.height == h) return; + printf("%d %d %d %d\n", xwa.width, xwa.height, w, h); sh.flags = 0; XGetWMNormalHints(handle->x11.display, handle->x11.window, &sh, &r); diff --git a/src/widget/menu.c b/src/widget/menu.c index 9314b43..3b8f801 100644 --- a/src/widget/menu.c +++ b/src/widget/menu.c @@ -6,8 +6,8 @@ static void set_xywh(MwWidget handle) { int height = 0; - int diff = MwDefaultBorderWidth(handle); - diff = 0; + int diff = MwDefaultBorderWidth(handle); + diff = 0; height = MwTextHeight(handle, "M") + 10; diff --git a/src/widget/treeview.c b/src/widget/treeview.c index 1d99316..1224bec 100644 --- a/src/widget/treeview.c +++ b/src/widget/treeview.c @@ -249,6 +249,7 @@ static void resize(MwWidget handle) { int w = MwGetInteger(handle, MwNwidth); int h = MwGetInteger(handle, MwNheight); int ih = 0; + int m = 0; if(tv->vscroll == NULL) { tv->vscroll = MwCreateWidget(MwScrollBarClass, "vscroll", handle, w - 16, 0, 16, h); @@ -263,8 +264,18 @@ static void resize(MwWidget handle) { NULL); } + ih = recursive_length(tv->tree); + if(ih == 0) ih = 1; + + if(ih <= (h / (LinePadding + MwTextHeight(handle, "M")))) { + MwLLShow(tv->vscroll->lowlevel, 0); + m = 16; + } else { + MwLLShow(tv->vscroll->lowlevel, 1); + } + if(tv->frame == NULL) { - tv->frame = MwVaCreateWidget(MwFrameClass, "frame", handle, 0, 0, w - 16, h, + tv->frame = MwVaCreateWidget(MwFrameClass, "frame", handle, 0, 0, w - m, h, MwNhasBorder, 1, MwNinverted, 1, NULL); @@ -275,25 +286,15 @@ static void resize(MwWidget handle) { MwVaApply(tv->frame, MwNx, 0, MwNy, 0, - MwNwidth, w - 16, + MwNwidth, w - m, MwNheight, h, NULL); } - ih = recursive_length(tv->tree); - if(ih == 0) ih = 1; - MwVaApply(tv->vscroll, MwNareaShown, h / (LinePadding + MwTextHeight(handle, "M")), MwNmaxValue, ih, NULL); - - if(ih <= (h / (LinePadding + MwTextHeight(handle, "M")))) { - MwLLShow(tv->vscroll->lowlevel, 0); - MwSetInteger(tv->frame, MwNwidth, w); - } else { - MwLLShow(tv->vscroll->lowlevel, 1); - } } static int create(MwWidget handle) {