Emmanuel Thomas-Maurin <manutm007 gmail com> wrote: > On 04/20/2011 09:42 PM, Fabian Keil wrote: > > I think even not showing a tooltip at all, or replacing the > > text provided by the application with something like > > "tooltip doesn't fit screen" would be a behaviour that is > > vastly superior to crashing and less surprising for developers > > that are reading the GTK documentation but aren't familiar > > with the actual code. > > I've been searching a little bit in the source code for the GDK warning: > "Native Windows wider or taller than 65535 pixels are not supported". > It appears (in gdkwindow-x11.c and gdkgeometry-x11.c) that, in case > width or height is > 65535, then it's set to 65535. But (if I'm right), > as supported width / height go down to 32767 for X, the app get a GDK > error and crashes anyways. Maybe setting the width / height limit to > 32767 in GDK could fix that. The attached patch limits the width and height to 16384 and prevents the crashes for me. I previously tried both 32767 and 32767-1 but still got the crashes. I didn't try anything between 16384 and 32767-1 so the actual limit may be higher (and not connected to 2**n). > BTW, have you file a bug for the issue? It's the best way to have it fixed. I haven't filed a bug report yet as it wasn't clear to me if the behaviour is actually considered a bug. If there's an agreement that the behaviour is a bug, I wouldn't mind filing one. Fabian
From 4620a5e9bcd25eafe62936393d72487f3adeeb03 Mon Sep 17 00:00:00 2001 From: Fabian Keil <fk fabiankeil de> Date: Thu, 21 Apr 2011 13:52:12 +0200 Subject: [PATCH] Limit the width and height in _gdk_window_impl_new() to 16384 instead of 65535. The latter limit is too high to prevent crashes later on. --- gdk/x11/gdkwindow-x11.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 175adb6..4bc2257 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -665,6 +665,7 @@ _gdk_window_impl_new (GdkWindow *window, unsigned int class; const char *title; int i; + static const height_and_width_limit = 16384; private = (GdkWindowObject *) window; @@ -776,15 +777,16 @@ _gdk_window_impl_new (GdkWindow *window, g_object_ref (draw_impl->colormap); } - if (private->width > 65535 || - private->height > 65535) + if (private->width > height_and_width_limit || + private->height > height_and_width_limit) { - g_warning ("Native Windows wider or taller than 65535 pixels are not supported"); + g_warning ("Native Windows wider or taller than %d pixels are not supported", + height_and_width_limit); - if (private->width > 65535) - private->width = 65535; - if (private->height > 65535) - private->height = 65535; + if (private->width > height_and_width_limit) + private->width = height_and_width_limit; + if (private->height > height_and_width_limit) + private->height = height_and_width_limit; } xid = draw_impl->xid = XCreateWindow (xdisplay, xparent, -- 1.7.4.1
Attachment:
signature.asc
Description: PGP signature