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. * + * + * + * Since 2.18, 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. + * **/ 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,