slackbuilds/games/xtetris/patches/close_button_no_resize.diff

54 lines
1.7 KiB
Diff

diff -Naur xtetris-2.6/main.c xtetris-2.6.patched/main.c
--- xtetris-2.6/main.c 1995-02-11 01:39:36.000000000 -0500
+++ xtetris-2.6.patched/main.c 2024-11-29 16:49:29.916217179 -0500
@@ -104,6 +104,27 @@
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Box.h>
+Atom wm_delete_window;
+
+/* Xt decides the geometry of the toplevel window, based on the layout of
+ its child widgets. pin_geometry() gets the toplevel window geometry
+ and makes that the only size allowed. Normal window manages won't
+ allow resizing the window after this. Tiling WMs ignore size hints,
+ but there's nothing we can do about that... */
+static void pin_geometry(Display *display, Widget widget) {
+ XtWidgetGeometry geom;
+ Window *win;
+ XSizeHints size_hints;
+
+ win = XtWindow(widget);
+ XtQueryGeometry(widget, NULL, &geom);
+
+ size_hints.flags = PMinSize | PMaxSize;
+ size_hints.min_width = size_hints.max_width = geom.width;
+ size_hints.min_height = size_hints.max_height = geom.height;
+ XSetWMNormalHints(display, win, &size_hints);
+}
+
int main(argc, argv, envp)
int argc;
char **argv;
@@ -161,6 +182,9 @@
Resources, XtNumber(Resources),
NULL, (Cardinal) 0);
XtAppAddActions( context, actions, XtNumber(actions) );
+
+ XtOverrideTranslations(toplevel,
+ XtParseTranslationTable("<Message>WM_PROTOCOLS: Quit()\n"));
if (resources.quayle) resources.usescorefile = False;
@@ -221,6 +245,11 @@
XtInstallAllAccelerators( frame, toplevel );
XtRealizeWidget(toplevel);
+ pin_geometry(display, toplevel);
+
+ wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
+ (void) XSetWMProtocols(display, XtWindow(toplevel), &wm_delete_window, 1);
+
XtMapWidget(toplevel);
{