/* from https://bugs.kde.org/show_bug.cgi?id=201523 */ #include #include #include #include /* Compile with "gcc -o decorations -Wall decorations.c -lX11" */ /* Set the decorations part of a window's _MOTIF_WM_HINTS property to * enable or disable window decorations. */ static void SetMotifDecorationsHint( Display* display, Window win, int show_decorations) { fprintf(stderr, "Setting hint to %s decorations on 0x%x\n", (show_decorations ? "show" : "hide"), win); int values[3] = { 1 << 1, /* flags */ 0, /* functions */ show_decorations }; Atom atom = XInternAtom(display, "_MOTIF_WM_HINTS", False); XChangeProperty( display, win, atom, /* property */ atom, /* type */ 32, /* format */ PropModeReplace, (unsigned char*) values, 3); /* nelements */ } int main(int argc, char** argv) { if (argc != 2 || strcmp(argv[1], "-h") == 0) { fprintf(stderr, "Usage: %s [show_decorations]\n", argv[0]); return 1; } Display* display = XOpenDisplay(NULL); if (!display) { fprintf(stderr, "Couldn't open display\n"); return 1; } int screen = DefaultScreen(display); const int width = 300, height = 200; unsigned long black = BlackPixel(display, screen); unsigned long white = WhitePixel(display, screen); Window win = XCreateSimpleWindow(display, RootWindow(display, screen), 0, /* x */ 0, /* y */ width, height, 0, /* border_width */ black, /* border */ white); /* background */ int showing_decorations = (strcmp(argv[1], "0") != 0); SetMotifDecorationsHint(display, win, showing_decorations); XSelectInput(display, win, ButtonPressMask); XMapWindow(display, win); while (1) { XEvent event; XNextEvent(display, &event); if (event.type == ButtonPress) { XButtonEvent be = event.xbutton; if (be.button == 2) { showing_decorations = !showing_decorations; SetMotifDecorationsHint(display, win, showing_decorations); } } } return 0; }