Subject: Re: bug#58489: 29.0.50; commit 74c07733698b95eb455edcafab8634a700a3194f breaks GTK version for some Ubuntu distributions

From: Uwe Brauer <[email-masked]>
Date: Fri, 14 Oct 2022 09:44:22 +0200

>>> "PL" == Po Lu <[email-masked]> writes:

   > Uwe Brauer <[email-masked]> writes:
   >>>>> "PL" == Po Lu <[email-masked]> writes:
   >> 
   >>> Uwe Brauer <[email-masked]> writes:
>>> Then the screenshot with the early-init
>>> 
>>> It seems to look ok but when it finishes loading all my init files, it
>>> looks like emacs -Q
   >> 
   >>> Sigh.  If you instrument emacsgtkfixed.c as follows:
   >> 
   >>> if (hints->width_inc && data[5] % hints->width_inc)
   >>> data[5] += (hints->width_inc - (data[5] % hints->width_inc));
   >>> if (hints->height_inc && data[6] % hints->height_inc)
   >>> data[6] += (hints->height_inc - (data[6] % hints->height_inc));
   >>> (Add instrumentation following this line)
   >>> fprintf (stderr, "XSetWMSizeHints: %l %l width_inc: %l height_inc: %l\n",
   >>> data[5], data[6], hints->width_inc, hints->height_inc)
   >> 
   >>> what is printed when you start Emacs with "-Q", and Kwin shrinks your
   >>> window?
   >> 
   >> I don't know anything about that C code (and the last time, I did some C coding is some 10 years ago)
   >> 
   >> 
   >> Not sure I understand, I apply the patch attached below and run make again:
   >> 
   >> Then I get an error (so most likely I misunderstood you)
   >> 
   >> 
   >> GEN      globals.h
   >> CC       emacsgtkfixed.o
   >> emacsgtkfixed.c: In function ‘XSetWMSizeHints’:
   >> emacsgtkfixed.c:190:21: warning: unknown conversion type character 0x20 in format [-Wformat=]
   >> fprintf (stderr, "XSetWMSizeHints: %l %l width_inc: %l height_inc: %l\n", /* new code for testing */
   >> ^
   >> emacsgtkfixed.c:190:21: warning: unknown conversion type character 0x20 in format [-Wformat=]
   >> emacsgtkfixed.c:190:21: warning: unknown conversion type character 0x20 in format [-Wformat=]
   >> emacsgtkfixed.c:190:21: warning: unknown conversion type character 0xa in format [-Wformat=]
   >> emacsgtkfixed.c:190:21: warning: too many arguments for format [-Wformat-extra-args]
   >> emacsgtkfixed.c:192:6: error: expected ‘;’ before ‘}’ token
   >> }
   >> ^
   >> Makefile:414: recipe for target 'emacsgtkfixed.o' failed
   >> make: *** [emacsgtkfixed.o] Error 1

   > Ah, silly me.  Please replace %l with %ld.
,----
| 
| make
|   GEN      globals.h
|   CC       emacsgtkfixed.o
| emacsgtkfixed.c: In function ‘XSetWMSizeHints’:
| emacsgtkfixed.c:190:21: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 5 has type ‘int’ [-Wformat=]
|     fprintf (stderr, "XSetWMSizeHints: %ld %ld width_inc: %ld height_inc: %ld\n",
|                      ^
| emacsgtkfixed.c:190:21: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 6 has type ‘int’ [-Wformat=]
| make -C ../admin/charsets all
`----

And 

,----
| ./emacs -Q
| XSetWMSizeHints: 297 51 width_inc: 9 height_inc: 17
| XSetWMSizeHints: 414 51 width_inc: 9 height_inc: 17
| 
| (emacs:2027): Gtk-WARNING **: Allocating size to Emacs 0x2be63e0 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?
| XSetWMSizeHints: 414 51 width_inc: 9 height_inc: 17
| XSetWMSizeHints: 414 85 width_inc: 9 height_inc: 17
| XSetWMSizeHints: 414 85 width_inc: 9 height_inc: 17
| XSetWMSizeHints: 414 153 width_inc: 9 height_inc: 17
| XSetWMSizeHints: 414 153 width_inc: 9 height_inc: 17
`----

diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -187,7 +187,9 @@
 	    data[5] += (hints->width_inc - (data[5] % hints->width_inc));
 	  if (data[6] % hints->height_inc)
 	    data[6] += (hints->height_inc - (data[6] % hints->height_inc));
-	}
+	  fprintf (stderr, "XSetWMSizeHints: %ld %ld width_inc: %ld height_inc: %ld\n",
+		   data[5], data[6], hints->width_inc, hints->height_inc);
+	    }
     }
 
   XChangeProperty (d, w, prop, XA_WM_SIZE_HINTS, 32, PropModeReplace,