OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gtk2?expand=0&rev=bde113e23b28c3b449097b5c8d1746a7
168 lines
6.0 KiB
Diff
168 lines
6.0 KiB
Diff
diff --git a/README b/README
|
|
index bc2f857..84d6329 100644
|
|
--- a/README
|
|
+++ b/README
|
|
@@ -44,6 +44,11 @@ Release notes for 2.18
|
|
GDK_NATIVE_WINDOWS makes GDK create a native X11 window for each
|
|
GDK window, which might make problematic applications work better.
|
|
|
|
+* GTK+ calls signal (SIGPIPE, SIG_IGN) during initialization, to ignore
|
|
+ SIGPIPE signals, since these are almost never wanted in graphical
|
|
+ applications. If you do need to handle SIGPIPE for some reason, reset
|
|
+ the handler after gtk_init(), but notice that other libraries (e.g.
|
|
+ libdbus or gvfs) might do similar things.
|
|
|
|
Release notes for 2.16
|
|
======================
|
|
diff --git a/gdk/directfb/gdkwindow-directfb.c b/gdk/directfb/gdkwindow-directfb.c
|
|
index c0ff8e1..30ec834 100644
|
|
--- a/gdk/directfb/gdkwindow-directfb.c
|
|
+++ b/gdk/directfb/gdkwindow-directfb.c
|
|
@@ -2077,7 +2077,8 @@ GdkWindow *
|
|
_gdk_windowing_window_at_pointer (GdkDisplay *display,
|
|
gint *win_x,
|
|
gint *win_y,
|
|
- GdkModifierType *mask)
|
|
+ GdkModifierType *mask,
|
|
+ gboolean get_toplevel)
|
|
{
|
|
GdkWindow *retval;
|
|
gint wx, wy;
|
|
@@ -2137,7 +2138,8 @@ _gdk_windowing_get_pointer (GdkDisplay *display,
|
|
gdk_directfb_window_get_pointer (_gdk_windowing_window_at_pointer (display,
|
|
NULL,
|
|
NULL,
|
|
- NULL),
|
|
+ NULL,
|
|
+ FALSE),
|
|
x, y, mask);
|
|
}
|
|
|
|
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
|
|
index 7f3572f..2bb5551 100644
|
|
--- a/gdk/gdkwindow.c
|
|
+++ b/gdk/gdkwindow.c
|
|
@@ -2624,6 +2624,8 @@ gdk_window_end_implicit_paint (GdkWindow *window)
|
|
/* Reset clip region of the cached GdkGC */
|
|
gdk_gc_set_clip_region (tmp_gc, NULL);
|
|
}
|
|
+ else
|
|
+ gdk_region_destroy (paint->region);
|
|
|
|
g_object_unref (paint->pixmap);
|
|
g_free (paint);
|
|
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
|
|
index f98290b..a8dd83b 100644
|
|
--- a/gdk/x11/gdkwindow-x11.c
|
|
+++ b/gdk/x11/gdkwindow-x11.c
|
|
@@ -1726,7 +1726,7 @@ gdk_window_x11_restack_toplevel (GdkWindow *window,
|
|
changes.stack_mode = above ? Above : Below;
|
|
XReconfigureWMWindow (GDK_WINDOW_XDISPLAY (window),
|
|
GDK_WINDOW_XID (window),
|
|
- GDK_WINDOW_SCREEN (window),
|
|
+ gdk_screen_get_number (GDK_WINDOW_SCREEN (window)),
|
|
CWStackMode | CWSibling, &changes);
|
|
}
|
|
|
|
@@ -3252,12 +3252,15 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
|
|
while (xwindow)
|
|
{
|
|
xwindow_last = xwindow;
|
|
- if (get_toplevel &&
|
|
- (window = gdk_window_lookup_for_display (display, xwindow)) != NULL &&
|
|
- GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
- break;
|
|
XQueryPointer (xdisplay, xwindow,
|
|
&root, &xwindow, &rootx, &rooty, &winx, &winy, &xmask);
|
|
+ if (get_toplevel &&
|
|
+ (window = gdk_window_lookup_for_display (display, xwindow_last)) != NULL &&
|
|
+ GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
+ {
|
|
+ xwindow = xwindow_last;
|
|
+ break;
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
@@ -3315,16 +3318,16 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
|
|
while (xwindow)
|
|
{
|
|
xwindow_last = xwindow;
|
|
- if (get_toplevel &&
|
|
- (window = gdk_window_lookup_for_display (display, xwindow)) != NULL &&
|
|
- GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
- break;
|
|
gdk_error_trap_push ();
|
|
XQueryPointer (xdisplay, xwindow,
|
|
&root, &xwindow, &rootx, &rooty, &winx, &winy, &xmask);
|
|
gdk_flush ();
|
|
if (gdk_error_trap_pop ())
|
|
break;
|
|
+ if (get_toplevel &&
|
|
+ (window = gdk_window_lookup_for_display (display, xwindow_last)) != NULL &&
|
|
+ GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
|
|
index e47e1be..2bbc96d 100644
|
|
--- a/gtk/gtkmain.c
|
|
+++ b/gtk/gtkmain.c
|
|
@@ -686,6 +686,8 @@ do_post_parse_initialization (int *argc,
|
|
|
|
gettext_initialization ();
|
|
|
|
+ signal (SIGPIPE, SIG_IGN);
|
|
+
|
|
if (g_fatal_warnings)
|
|
{
|
|
GLogLevelFlags fatal_mask;
|
|
@@ -985,6 +987,15 @@ gtk_init_check (int *argc,
|
|
* the GUI for some reason. If you want your program to fall back to a
|
|
* textual interface you want to call gtk_init_check() instead.
|
|
* </para></note>
|
|
+ *
|
|
+ * <note><para>
|
|
+ * Since 2.18, GTK+ calls <literal>signal (SIGPIPE, SIG_IGN)</literal>
|
|
+ * during initialization, to ignore SIGPIPE signals, since these are
|
|
+ * almost never wanted in graphical applications. If you do need to
|
|
+ * handle SIGPIPE for some reason, reset the handler after gtk_init(),
|
|
+ * but notice that other libraries (e.g. libdbus or gvfs) might do
|
|
+ * similar things.
|
|
+ * </para></note>
|
|
**/
|
|
void
|
|
gtk_init (int *argc, char ***argv)
|
|
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
|
|
index c0815a9..36c5a65 100644
|
|
--- a/gtk/gtkwindow.c
|
|
+++ b/gtk/gtkwindow.c
|
|
@@ -5648,6 +5648,13 @@ gtk_window_compute_configure_request_size (GtkWindow *window,
|
|
if (info->resize_height > 0)
|
|
*height = info->resize_height;
|
|
}
|
|
+
|
|
+ /* Don't ever request zero width or height, its not supported by
|
|
+ gdk. The size allocation code will round it to 1 anyway but if
|
|
+ we do it then the value returned from this function will is
|
|
+ not comparable to the size allocation read from the GtkWindow. */
|
|
+ *width = MAX (*width, 1);
|
|
+ *height = MAX (*height, 1);
|
|
}
|
|
|
|
static GtkWindowPosition
|
|
diff --git a/modules/printbackends/lpr/gtkprintbackendlpr.c b/modules/printbackends/lpr/gtkprintbackendlpr.c
|
|
index eeaaa99..72d9c33 100644
|
|
--- a/modules/printbackends/lpr/gtkprintbackendlpr.c
|
|
+++ b/modules/printbackends/lpr/gtkprintbackendlpr.c
|
|
@@ -278,8 +278,6 @@ lpr_write (GIOChannel *source,
|
|
{
|
|
gsize bytes_written;
|
|
|
|
- signal (SIGPIPE, SIG_IGN);
|
|
-
|
|
g_io_channel_write_chars (ps->in,
|
|
buf,
|
|
bytes_read,
|