Bug 54523

Summary: Disable Resize request and MWM_FUNC_RESIZE bug
Product: [Plasma] kwin Reporter: russell
Component: generalAssignee: KWin default assignee <kwin-bugs-null>
Status: RESOLVED DUPLICATE    
Severity: normal    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:

Description russell 2003-02-12 09:56:49 UTC
Version:            (using KDE KDE 3.1)
Installed from:    Compiled From Sources
Compiler:          gcc 3.2 
OS:          Linux

One request and one Bug report in kwin.

The request; would it be possible to have a mechanism to disable resizing for certain classes of window. Other WM's allow this; for example in fvwm a system.fvwmrc entry of the form:

Style "MyApp" NoHandles

which causes fvwm to not provide window resize handles on windows of the class "MyApp".

Second, the bug report (found as I resorted to trying the MWM hints to provide the functionality requested above; if anyone can suggest a way of telling kwin not to allow user-resizing I'd love to hear it).

If you set MWM_FUNC_RESIZE off then Kwin lowlights the "Size" option in the pulldown menu and does not change the cursor when the mouse hovers over the borders or corners. This is Good.

However, one can still resize the window by dragging on the border or corners. This is Not Good :-(

I realise (from the comments in the source) that support for the MWM hints is somewhat reluctant but it *is* broken in this respect.

A sample program top illustrate is provided below. Compile with
(for me) gcc -I/usr/X11R6/include breakkwin.c -L/usr/X11R6/lib -lX11

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <Xm/MwmUtil.h>

main(argc, argv)
int argc;
char *argv[];
{
    Display *Xdisplay;  /* X display connection */
    Window window;      /* X window identifier */
    XEvent event;       /* holds X server events */
    XWMHints *xwmh;     /* Window state hints for window manager */
    XSizeHints *xsh;    /* Size hints for window manager */
    XClassHint class_hints;     /* Class hints for window manager */
    char *name = "Decor";
    XTextProperty window_name;
    XTextProperty icon_name;
    PropMotifWmHints mwm_hints;
    Atom xa_MOTIF_WM_HINTS;

    if ((Xdisplay = XOpenDisplay(NULL)) == NULL) {
        fprintf(stderr, "Can't open %s\n", XDisplayName(NULL));
        return(1);
    }

    xwmh = XAllocWMHints();
    xwmh->flags = InputHint|StateHint;
    xwmh->input = True;
    xwmh->initial_state = NormalState;

    xsh = XAllocSizeHints();
    xsh->flags = (PSize | PMinSize);
    xsh->height = 150;
    xsh->width = 150;
    xsh->min_height = 100;
    xsh->min_width = 100;

    class_hints.res_class = "Decor";
    if (strrchr(argv[0], '/') == NULL)
        class_hints.res_name = argv[0];
    else
        class_hints.res_name = strrchr(argv[0], '/') + 1;

    window = XCreateSimpleWindow(Xdisplay,
        DefaultRootWindow(Xdisplay),
        xsh->x, xsh->y,   xsh->width, xsh->height,   2,
        WhitePixel(Xdisplay, DefaultScreen(Xdisplay)),
        BlackPixel(Xdisplay, DefaultScreen(Xdisplay)));

    XStringListToTextProperty( &name, 1, &window_name );
    XStringListToTextProperty( &name, 1, &icon_name );



    XSetWMProperties(Xdisplay, window, &window_name, &icon_name, argv,
        argc, xsh, xwmh, &class_hints);

    mwm_hints.flags = MWM_HINTS_FUNCTIONS;
    mwm_hints.functions = MWM_FUNC_ALL;
    mwm_hints.functions |= MWM_FUNC_RESIZE;
    xa_MOTIF_WM_HINTS = XInternAtom(Xdisplay, _XA_MOTIF_WM_HINTS, False);
    XChangeProperty(Xdisplay, window,
        xa_MOTIF_WM_HINTS, xa_MOTIF_WM_HINTS, 32, PropModeReplace,
        (unsigned char *) &mwm_hints, 5);

    XSelectInput(Xdisplay, window, StructureNotifyMask | ButtonPressMask);

    XMapWindow(Xdisplay, window);
    XSync(Xdisplay, 0);

    for (;;) {
        XNextEvent(Xdisplay, &event);
        switch (event.type) {
        case ButtonPress:
        case DestroyNotify:
            XCloseDisplay(Xdisplay);
            return(0);
        }
    }
}
Comment 1 Lubos Lunak 2003-02-12 11:14:09 UTC

*** This bug has been marked as a duplicate of 54495 ***