#include "gtksocket.h"
#include "gtksocketprivate.h"
#include "gtkdnd.h"
+#include "gtkdebug.h"
#include "x11/gdkx.h"
-#include <X11/Xatom.h>
#ifdef HAVE_XFIXES
#include <X11/extensions/Xfixes.h>
#endif
#include "gtkxembed.h"
-#include "gtkalias.h"
static gboolean xembed_get_info (GdkWindow *gdk_window,
unsigned long *version,
GdkNativeWindow
_gtk_socket_windowing_get_id (GtkSocket *socket)
{
- return GDK_WINDOW_XWINDOW (GTK_WIDGET (socket)->window);
+ return GDK_WINDOW_XWINDOW (gtk_widget_get_window (GTK_WIDGET (socket)));
}
void
_gtk_socket_windowing_realize_window (GtkSocket *socket)
{
- GdkWindow *window = GTK_WIDGET (socket)->window;
+ GdkWindow *window;
XWindowAttributes xattrs;
+ window = gtk_widget_get_window (GTK_WIDGET (socket));
+
XGetWindowAttributes (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XWINDOW (window),
&xattrs);
}
socket->have_size = TRUE;
- gdk_error_trap_pop ();
-}
-
-void
-_gtk_socket_windowing_get_natural_size (GtkSocket *socket)
-{
- GtkSocketPrivate *priv;
- GdkDisplay *display;
-
- Atom property, type;
- int format, status;
-
- unsigned long nitems, bytes_after;
- unsigned char *data;
- gint32 *data_long;
-
- priv = _gtk_socket_get_private (socket);
-
- priv->natural_width = 1;
- priv->natural_height = 1;
-
- if (GTK_WIDGET_MAPPED (socket))
- {
- display = gdk_drawable_get_display (socket->plug_window);
- property = gdk_x11_get_xatom_by_name_for_display (display, "_GTK_NATURAL_SIZE");
-
- gdk_error_trap_push ();
- status = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display),
- GDK_WINDOW_XWINDOW (socket->plug_window),
- property, 0, 2, False, XA_CARDINAL,
- &type, &format, &nitems, &bytes_after,
- &data);
- gdk_error_trap_pop ();
-
- priv->have_natural_size = TRUE;
-
- if (Success != status || !type)
- return;
-
- if (type != XA_CARDINAL)
- {
- g_warning ("_GTK_NATURAL_SIZE property has wrong type: %d\n", (int)type);
- return;
- }
-
- if (nitems < 2)
- {
- g_warning ("_GTK_NATURAL_SIZE too short\n");
- XFree (data);
- return;
- }
-
- data_long = (gint32*) data;
- priv->natural_width = MAX (1, data_long[0]);
- priv->natural_height = MAX (1, data_long[1]);
-
- XFree (data);
- }
+ gdk_error_trap_pop_ignored ();
}
void
gboolean mask_key_presses)
{
XKeyEvent xkey;
- GdkScreen *screen = gdk_drawable_get_screen (socket->plug_window);
+ GdkScreen *screen = gdk_window_get_screen (socket->plug_window);
memset (&xkey, 0, sizeof (xkey));
xkey.type = (gdk_event->type == GDK_KEY_PRESS) ? KeyPress : KeyRelease;
False,
(mask_key_presses ? KeyPressMask : NoEventMask),
(XEvent *)&xkey);
- gdk_display_sync (gdk_screen_get_display (screen));
- gdk_error_trap_pop ();
+ gdk_error_trap_pop_ignored ();
}
void
void
_gtk_socket_windowing_send_configure_event (GtkSocket *socket)
{
+ GtkAllocation allocation;
XConfigureEvent xconfigure;
gint x, y;
*/
gdk_error_trap_push ();
gdk_window_get_origin (socket->plug_window, &x, &y);
- gdk_error_trap_pop ();
-
+ gdk_error_trap_pop_ignored ();
+
+ gtk_widget_get_allocation (GTK_WIDGET(socket), &allocation);
xconfigure.x = x;
xconfigure.y = y;
- xconfigure.width = GTK_WIDGET(socket)->allocation.width;
- xconfigure.height = GTK_WIDGET(socket)->allocation.height;
+ xconfigure.width = allocation.width;
+ xconfigure.height = allocation.height;
xconfigure.border_width = 0;
xconfigure.above = None;
XSendEvent (GDK_WINDOW_XDISPLAY (socket->plug_window),
GDK_WINDOW_XWINDOW (socket->plug_window),
False, NoEventMask, (XEvent *)&xconfigure);
- gdk_display_sync (gtk_widget_get_display (GTK_WIDGET (socket)));
- gdk_error_trap_pop ();
+ gdk_error_trap_pop_ignored ();
}
void
#endif
_gtk_xembed_send_message (socket->plug_window,
XEMBED_EMBEDDED_NOTIFY, 0,
- GDK_WINDOW_XWINDOW (GTK_WIDGET (socket)->window),
+ GDK_WINDOW_XWINDOW (gtk_widget_get_window (GTK_WIDGET (socket))),
socket->xembed_version);
}
unsigned long *version,
unsigned long *flags)
{
- GdkDisplay *display = gdk_drawable_get_display (window);
+ GdkDisplay *display = gdk_window_get_display (window);
Atom xembed_info_atom = gdk_x11_get_xatom_by_name_for_display (display, "_XEMBED_INFO");
Atom type;
int format;
unsigned long *data_long;
int status;
- gdk_error_trap_push();
+ gdk_error_trap_push ();
status = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display),
GDK_WINDOW_XWINDOW (window),
xembed_info_atom,
0, 2, False,
xembed_info_atom, &type, &format,
&nitems, &bytes_after, &data);
- gdk_error_trap_pop();
+ gdk_error_trap_pop_ignored ();
if (status != Success)
return FALSE; /* Window vanished? */
socket->plug_window,
protocol, TRUE);
- gdk_display_sync (display);
- gdk_error_trap_pop ();
+ gdk_error_trap_pop_ignored ();
return_val = GDK_FILTER_REMOVE;
}
else if (xevent->xproperty.atom == gdk_x11_get_xatom_by_name_for_display (display, "_XEMBED_INFO"))
{
gdk_error_trap_push ();
gdk_window_show (socket->plug_window);
- gdk_flush ();
- gdk_error_trap_pop ();
+ gdk_error_trap_pop_ignored ();
_gtk_socket_unmap_notify (socket);
}
}
return_val = GDK_FILTER_REMOVE;
}
- else if (xevent->xproperty.atom == gdk_x11_get_xatom_by_name_for_display (display, "_GTK_NATURAL_SIZE"))
- {
- _gtk_socket_windowing_get_natural_size (socket);
- }
}
break;
case ReparentNotify:
{
+ GdkWindow *window;
XReparentEvent *xre = &xevent->xreparent;
+ window = gtk_widget_get_window (widget);
+
GTK_NOTE (PLUGSOCKET, g_message ("GtkSocket - ReparentNotify received"));
- if (!socket->plug_window && xre->parent == GDK_WINDOW_XWINDOW (widget->window))
+ if (!socket->plug_window &&
+ xre->parent == GDK_WINDOW_XWINDOW (window))
{
_gtk_socket_add_window (socket, xre->window, FALSE);
}
else
{
- if (socket->plug_window && xre->window == GDK_WINDOW_XWINDOW (socket->plug_window) && xre->parent != GDK_WINDOW_XWINDOW (widget->window))
+ if (socket->plug_window &&
+ xre->window == GDK_WINDOW_XWINDOW (socket->plug_window) &&
+ xre->parent != GDK_WINDOW_XWINDOW (window))
{
gboolean result;