]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtksocket-x11.c
Display an error when we come to the root.
[~andy/gtk] / gtk / gtksocket-x11.c
index 160af72e5c217ce36b68f77dd547093f96ce8ca4..9554d67ffcc0b50618f9688aa27354895e4171ed 100644 (file)
 
 #include "x11/gdkx.h"
 
+#ifdef HAVE_XFIXES
+#include <X11/extensions/Xfixes.h>
+#endif
+
 #include "gtkxembed.h"
 #include "gtkalias.h"
 
@@ -97,13 +101,13 @@ _gtk_socket_windowing_size_request (GtkSocket *socket)
     {
       if (hints.flags & PMinSize)
        {
-         socket->request_width = hints.min_width;
-         socket->request_height = hints.min_height;
+         socket->request_width = MAX (hints.min_width, 1);
+         socket->request_height = MAX (hints.min_height, 1);
        }
       else if (hints.flags & PBaseSize)
        {
-         socket->request_width = hints.base_width;
-         socket->request_height = hints.base_height;
+         socket->request_width = MAX (hints.base_width, 1);
+         socket->request_height = MAX (hints.base_height, 1);
        }
     }
   socket->have_size = TRUE;
@@ -263,6 +267,13 @@ _gtk_socket_windowing_embed_get_info (GtkSocket *socket)
 void
 _gtk_socket_windowing_embed_notify (GtkSocket *socket)
 {
+#ifdef HAVE_XFIXES
+  GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (socket));
+
+  XFixesChangeSaveSet (GDK_DISPLAY_XDISPLAY (display),
+                      GDK_WINDOW_XWINDOW (socket->plug_window),
+                      SetModeInsert, SaveSetRoot, SaveSetUnmap);
+#endif
   _gtk_xembed_send_message (socket->plug_window,
                            XEMBED_EMBEDDED_NOTIFY, 0,
                            GDK_WINDOW_XWINDOW (GTK_WIDGET (socket)->window),
@@ -494,7 +505,7 @@ _gtk_socket_windowing_filter_func (GdkXEvent *gdk_xevent,
            _gtk_socket_end_embedding (socket);
 
            g_object_ref (widget);
-           g_signal_emit_by_name (widget, "plug_removed", 0, &result);
+           g_signal_emit_by_name (widget, "plug_removed", &result);
            if (!result)
              gtk_widget_destroy (widget);
            g_object_unref (widget);