rem: if (WFLAGP(wwin, no_resizable))
add: if (!IS_RESIZABLE(wwin))
context: wMaximizeWindow(WWindow *wwin, int directions){    int new_width, new_height, new_x, new_y;    int changed_h, changed_v, shrink_h, shrink_v;    WArea usableArea, totalArea;    if (WFLAGP(wwin, no_resizable))        return;    totalArea.x1 = 0;    totalArea.y1 = 0;    totalArea.x2 = wwin->screen_ptr->scr_width;    totalArea.y2 = wwin->screen_ptr->scr_height;    usableArea = totalArea;    if (!(directions & MAX_IGNORE_XINERAMA)) {        WScreen *scr = wwin->screen_ptr;        int head;        if (directions & MAX_KEYBOARD)            head = wGetHeadForWindow(wwin);        else            head = wGetHeadForPointerLocation(scr);        usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);    }    if (WFLAGP(wwin, full_maximize)) {        usableArea = totalArea;    }    if (wwin->flags.shaded) {        wwin->flags.skip_next_animation = 1;        wUnshadeWindow(wwin);    }    /* Only save directions, not kbd or xinerama hints */    directions &= (MAX_HORIZONTAL|MAX_VERTICAL);    changed_h = ((wwin->flags.maximized ^ directions) & MAX_HORIZONTAL);    changed_v = ((wwin->flags.maximized ^ directions) & MAX_VERTICAL);    shrink_h = (changed_h && (directions & MAX_HORIZONTAL)==0);    shrink_v = (changed_v && (directions & MAX_VERTICAL)==0);    if (wwin->flags.maximized) {        /* if already maximized in some direction, we only update the         * appropriate old x, old y coordinates. This is necessary to         * allow succesive maximizations in different directions without         * the need to first do an un-maximize (to avoid flicker).         */        if (!(wwin->flags.maximized & MAX_HORIZONTAL)) {            wwin->old_geometry.x = wwin->frame_x;        }        if (!(wwin->flags.maximized & MAX_VERTICAL)) {            wwin->old_geometry.y = wwin->frame_y;        }    } else {        wwin->old_geometry.width = wwin->client.width;        wwin->old_geometry.height = wwin->client.height;        wwin->old_geometry.x = wwin->frame_x;        wwin->old_geometry.y = wwin->frame_y;    }    wwin->flags.maximized = directions;#ifdef KWM_HINTS    wKWMUpdateClientGeometryRestore(wwin);#endif    if (directions & MAX_HORIZONTAL) {        new_width = (usableArea.x2-usableArea.x1)-FRAME_BORDER_WIDTH*2;        new_x = usableArea.x1;    } else if (shrink_h) {        new_x = wwin->old_geometry.x;        new_width = wwin->old_geometry.width;    } else {        new_x = wwin->frame_x;        new_width = wwin->frame->core->width;    }    if (directions & MAX_VERTICAL) {        new_height = (usableArea.y2-usableArea.y1)-FRAME_BORDER_WIDTH*2;        new_y = usableArea.y1;        if (WFLAGP(wwin, full_maximize)) {            new_y -= wwin->frame->top_width;            new_height += wwin->frame->bottom_width - 1;        }    } else if (shrink_v) {        new_y = wwin->old_geometry.y;        new_height = wwin->old_geometry.height;    } else {        new_y = wwin->frame_y;        new_height = wwin->frame->core->height;    }    if (!WFLAGP(wwin, full_maximize)) {        new_height -= wwin->frame->top_width+wwin->frame->bottom_width;    }    wWindowConstrainSize(wwin, &new_width, &new_height);    wWindowCropSize(wwin, usableArea.x2-usableArea.x1,                    usableArea.y2-usableArea.y1,                    &new_width, &new_height);    wWindowConfigure(wwin, new_x, new_y, new_width, new_height);    WMPostNotificationName(WMNChangedState, wwin, "maximize");    wSoundPlay(WSOUND_MAXIMIZE);}