#include "config.h"
-#include "gdkdnd.h"
+#include "gdkdndprivate.h"
#include "gdkmain.h"
#include "gdkx.h"
gdk_window_cache_destroy (GdkWindowCache *cache)
{
GdkWindow *root_window = gdk_screen_get_root_window (cache->screen);
+ GdkDisplay *display;
XSelectInput (GDK_WINDOW_XDISPLAY (root_window),
GDK_WINDOW_XID (root_window),
gdk_window_remove_filter (root_window, gdk_window_cache_filter, cache);
gdk_window_remove_filter (NULL, gdk_window_cache_shape_filter, cache);
- gdk_error_trap_push ();
-
- g_list_foreach (cache->children, (GFunc)free_cache_child,
- gdk_screen_get_display (cache->screen));
+ display = gdk_screen_get_display (cache->screen);
- gdk_error_trap_pop_ignored ();
+ gdk_x11_display_error_trap_push (display);
+ g_list_foreach (cache->children, (GFunc)free_cache_child, display);
+ gdk_x11_display_error_trap_pop_ignored (display);
g_list_free (cache->children);
g_hash_table_destroy (cache->child_hash);
GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (display);
cairo_region_t *input_shape;
- child->shape = _xwindow_get_shape (display_x11->xdisplay,
- child->xid, ShapeBounding);
+ child->shape = _gdk_x11_xwindow_get_shape (display_x11->xdisplay,
+ child->xid, ShapeBounding);
#ifdef ShapeInput
- input_shape = _xwindow_get_shape (display_x11->xdisplay,
- child->xid, ShapeInput);
+ input_shape = _gdk_x11_xwindow_get_shape (display_x11->xdisplay,
+ child->xid, ShapeInput);
if (child->shape && input_shape)
{
cairo_region_intersect (child->shape, input_shape);
return None;
}
-static Window
+static Window
get_client_window_at_coords (GdkWindowCache *cache,
Window ignore,
gint x_root,
{
GList *tmp_list;
Window retval = None;
+ GdkDisplay *display;
+
+ display = gdk_screen_get_display (cache->screen);
+
+ gdk_x11_display_error_trap_push (display);
- gdk_error_trap_push ();
-
tmp_list = cache->children;
while (tmp_list && !retval)
if ((x_root >= child->x) && (x_root < child->x + child->width) &&
(y_root >= child->y) && (y_root < child->y + child->height))
{
- GdkDisplay *display = gdk_screen_get_display (cache->screen);
-
if (!is_pointer_within_shape (display, child,
x_root - child->x,
y_root - child->y))
tmp_list = tmp_list->next;
}
- gdk_error_trap_pop_ignored ();
+ gdk_x11_display_error_trap_pop_ignored (display);
if (retval)
return retval;
*/
if (display_x11->motif_drag_window)
{
- display_x11->motif_drag_gdk_window =
- gdk_window_foreign_new_for_display (display, display_x11->motif_drag_window);
+ display_x11->motif_drag_gdk_window =
+ gdk_x11_window_foreign_new_for_display (display, display_x11->motif_drag_window);
gdk_window_add_filter (display_x11->motif_drag_gdk_window,
motif_drag_window_filter,
NULL);
guchar *p;
gboolean success = FALSE;
- gdk_error_trap_push ();
- XGetWindowProperty (display_x11->xdisplay,
- display_x11->motif_drag_window,
- motif_drag_targets_atom,
- 0, (sizeof(MotifTargetTableHeader)+3)/4, FALSE,
- motif_drag_targets_atom,
- &type, &format, &nitems, &bytes_after,
- &data);
+ gdk_x11_display_error_trap_push (display);
+ XGetWindowProperty (display_x11->xdisplay,
+ display_x11->motif_drag_window,
+ motif_drag_targets_atom,
+ 0, (sizeof(MotifTargetTableHeader)+3)/4, FALSE,
+ motif_drag_targets_atom,
+ &type, &format, &nitems, &bytes_after,
+ &data);
- if (gdk_error_trap_pop () || (format != 8) || (nitems < sizeof (MotifTargetTableHeader)))
- goto error;
+ if (gdk_x11_display_error_trap_pop (display) ||
+ (format != 8) || (nitems < sizeof (MotifTargetTableHeader)))
+ goto error;
header = (MotifTargetTableHeader *)data;
header->n_lists = card16_to_host (header->n_lists, header->byte_order);
header->total_size = card32_to_host (header->total_size, header->byte_order);
- gdk_error_trap_push ();
- XGetWindowProperty (display_x11->xdisplay,
- display_x11->motif_drag_window,
- motif_drag_targets_atom,
- (sizeof(MotifTargetTableHeader)+3)/4,
- (header->total_size + 3)/4 - (sizeof(MotifTargetTableHeader) + 3)/4,
- FALSE,
- motif_drag_targets_atom, &type, &format, &nitems,
- &bytes_after, &target_bytes);
-
- if (gdk_error_trap_pop () || (format != 8) || (bytes_after != 0) ||
- (nitems != header->total_size - sizeof(MotifTargetTableHeader)))
- goto error;
+ gdk_x11_display_error_trap_push (display);
+ XGetWindowProperty (display_x11->xdisplay,
+ display_x11->motif_drag_window,
+ motif_drag_targets_atom,
+ (sizeof(MotifTargetTableHeader)+3)/4,
+ (header->total_size + 3)/4 - (sizeof(MotifTargetTableHeader) + 3)/4,
+ FALSE,
+ motif_drag_targets_atom, &type, &format, &nitems,
+ &bytes_after, &target_bytes);
+
+ if (gdk_x11_display_error_trap_pop (display) ||
+ (format != 8) || (bytes_after != 0) ||
+ (nitems != header->total_size - sizeof(MotifTargetTableHeader)))
+ goto error;
display_x11->motif_n_target_lists = header->n_lists;
display_x11->motif_target_lists = g_new0 (GList *, display_x11->motif_n_target_lists);
{
gint n_targets;
guint32 *targets;
-
+
if (p + sizeof(guint16) - target_bytes > nitems)
goto error;
unsigned long nitems, after;
Atom motif_drag_receiver_info_atom = gdk_x11_get_xatom_by_name_for_display (display, "_MOTIF_DRAG_RECEIVER_INFO");
- gdk_error_trap_push ();
- XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), win,
- motif_drag_receiver_info_atom,
- 0, (sizeof(*info)+3)/4, False, AnyPropertyType,
- &type, &format, &nitems, &after,
- &data);
+ gdk_x11_display_error_trap_push (display);
+ XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), win,
+ motif_drag_receiver_info_atom,
+ 0, (sizeof(*info)+3)/4, False, AnyPropertyType,
+ &type, &format, &nitems, &after,
+ &data);
- if (gdk_error_trap_pop() == 0)
+ if (gdk_x11_display_error_trap_pop (display) == 0)
{
if (type != None)
{
MOTIF_XCLIENT_LONG (&xev, 3) = context_x11->motif_selection;
MOTIF_XCLIENT_LONG (&xev, 4) = 0;
- if (!_gdk_send_xevent (display,
- GDK_WINDOW_XID (context->dest_window),
- FALSE, 0, &xev))
- GDK_NOTE (DND,
- g_message ("Send event to %lx failed",
- GDK_WINDOW_XID (context->dest_window)));
+ if (!_gdk_x11_display_send_xevent (display,
+ GDK_WINDOW_XID (context->dest_window),
+ FALSE, 0, &xev))
+ GDK_NOTE (DND,
+ g_message ("Send event to %lx failed",
+ GDK_WINDOW_XID (context->dest_window)));
}
static void
MOTIF_XCLIENT_LONG (&xev, 3) = 0;
MOTIF_XCLIENT_LONG (&xev, 4) = 0;
- if (!_gdk_send_xevent (display,
- GDK_WINDOW_XID (context->dest_window),
- FALSE, 0, &xev))
- GDK_NOTE (DND,
- g_message ("Send event to %lx failed",
- GDK_WINDOW_XID (context->dest_window)));
+ if (!_gdk_x11_display_send_xevent (display,
+ GDK_WINDOW_XID (context->dest_window),
+ FALSE, 0, &xev))
+ GDK_NOTE (DND,
+ g_message ("Send event to %lx failed",
+ GDK_WINDOW_XID (context->dest_window)));
}
static gboolean
retval = FALSE;
}
- if (!_gdk_send_xevent (display,
- GDK_WINDOW_XID (context->dest_window),
- FALSE, 0, &xev))
- GDK_NOTE (DND,
- g_message ("Send event to %lx failed",
- GDK_WINDOW_XID (context->dest_window)));
+ if (!_gdk_x11_display_send_xevent (display,
+ GDK_WINDOW_XID (context->dest_window),
+ FALSE, 0, &xev))
+ GDK_NOTE (DND,
+ g_message ("Send event to %lx failed",
+ GDK_WINDOW_XID (context->dest_window)));
return retval;
}
MOTIF_XCLIENT_LONG (&xev, 3) = context_x11->motif_selection;
MOTIF_XCLIENT_LONG (&xev, 4) = GDK_WINDOW_XID (context->source_window);
- if (!_gdk_send_xevent (display,
- GDK_WINDOW_XID (context->dest_window),
- FALSE, 0, &xev))
- GDK_NOTE (DND,
- g_message ("Send event to %lx failed",
- GDK_WINDOW_XID (context->dest_window)));
+ if (!_gdk_x11_display_send_xevent (display,
+ GDK_WINDOW_XID (context->dest_window),
+ FALSE, 0, &xev))
+ GDK_NOTE (DND,
+ g_message ("Send event to %lx failed",
+ GDK_WINDOW_XID (context->dest_window)));
}
/* Target Side */
gulong bytes_after;
guchar *data;
MotifDragInitiatorInfo *initiator_info;
-
+
GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (display);
-
- gdk_error_trap_push ();
+
+ gdk_x11_display_error_trap_push (display);
XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), source_window, atom,
- 0, sizeof(*initiator_info), FALSE,
- gdk_x11_get_xatom_by_name_for_display (display, "_MOTIF_DRAG_INITIATOR_INFO"),
- &type, &format, &nitems, &bytes_after,
- &data);
+ 0, sizeof(*initiator_info), FALSE,
+ gdk_x11_get_xatom_by_name_for_display (display, "_MOTIF_DRAG_INITIATOR_INFO"),
+ &type, &format, &nitems, &bytes_after,
+ &data);
- if (gdk_error_trap_pop () || (format != 8) || (nitems != sizeof (MotifDragInitiatorInfo)) || (bytes_after != 0))
+ if (gdk_x11_display_error_trap_pop (display) ||
+ (format != 8) || (nitems != sizeof (MotifDragInitiatorInfo)) ||
+ (bytes_after != 0))
{
g_warning ("Error reading initiator info\n");
return FALSE;
context->protocol = GDK_DRAG_PROTO_MOTIF;
context->is_source = FALSE;
- context->source_window = gdk_window_lookup_for_display (display, source_window);
+ context->source_window = gdk_x11_window_lookup_for_display (display, source_window);
if (context->source_window)
g_object_ref (context->source_window);
else
{
- context->source_window = gdk_window_foreign_new_for_display (display, source_window);
+ context->source_window = gdk_x11_window_foreign_new_for_display (display, source_window);
if (!context->source_window)
{
g_object_unref (context_x11);
proxy = None;
- gdk_error_trap_push ();
-
+ gdk_x11_display_error_trap_push (display);
if (XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), win,
- xdnd_proxy_atom, 0,
- 1, False, AnyPropertyType,
- &type, &format, &nitems, &after,
- &data) == Success)
+ xdnd_proxy_atom, 0,
+ 1, False, AnyPropertyType,
+ &type, &format, &nitems, &after,
+ &data) == Success)
{
if (type != None)
{
}
}
- gdk_error_trap_pop_ignored ();
+ gdk_x11_display_error_trap_pop_ignored (display);
return retval ? (proxy ? proxy : win) : None;
}
{
/* Get the XdndActionList, if set */
- gdk_error_trap_push ();
-
+ gdk_x11_display_error_trap_push (display);
if (XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display),
- GDK_WINDOW_XID (context->source_window),
- gdk_x11_get_xatom_by_name_for_display (display, "XdndActionList"),
- 0, 65536,
- False, XA_ATOM, &type, &format, &nitems,
- &after, &data) == Success &&
- type == XA_ATOM)
- {
- atoms = (Atom *)data;
-
- context->actions = 0;
-
+ GDK_WINDOW_XID (context->source_window),
+ gdk_x11_get_xatom_by_name_for_display (display, "XdndActionList"),
+ 0, 65536,
+ False, XA_ATOM, &type, &format, &nitems,
+ &after, &data) == Success &&
+ type == XA_ATOM)
+ {
+ atoms = (Atom *)data;
+
+ context->actions = 0;
+
for (i = 0; i < nitems; i++)
context->actions |= xdnd_action_from_atom (display, atoms[i]);
}
if (data)
- XFree (data);
-
- gdk_error_trap_pop_ignored ();
+ XFree (data);
+
+ gdk_x11_display_error_trap_pop_ignored (display);
}
else
{
if (!GDK_WINDOW_DESTROYED (window) &&
gdk_window_get_window_type (window) == GDK_WINDOW_FOREIGN)
{
- gdk_error_trap_push ();
+ gdk_x11_display_error_trap_push (GDK_WINDOW_DISPLAY (window));
if (add_filter)
{
*/
}
- gdk_error_trap_pop_ignored ();
+ gdk_x11_display_error_trap_pop_ignored (GDK_WINDOW_DISPLAY (window));
}
}
device_manager = gdk_display_get_device_manager (display);
gdk_drag_context_set_device (context, gdk_device_manager_get_client_pointer (device_manager));
- context->source_window = gdk_window_lookup_for_display (display, source_window);
+ context->source_window = gdk_x11_window_lookup_for_display (display, source_window);
if (context->source_window)
g_object_ref (context->source_window);
else
{
- context->source_window = gdk_window_foreign_new_for_display (display, source_window);
+ context->source_window = gdk_x11_window_foreign_new_for_display (display, source_window);
if (!context->source_window)
{
g_object_unref (context);
context->targets = NULL;
if (get_types)
{
- gdk_error_trap_push ();
+ gdk_x11_display_error_trap_push (display);
XGetWindowProperty (GDK_WINDOW_XDISPLAY (event->any.window),
source_window,
gdk_x11_get_xatom_by_name_for_display (display, "XdndTypeList"),
False, XA_ATOM, &type, &format, &nitems,
&after, &data);
- if (gdk_error_trap_pop () || (format != 32) || (type != XA_ATOM))
+ if (gdk_x11_display_error_trap_pop (display) || (format != 32) || (type != XA_ATOM))
{
g_object_unref (context);
************************** Public API ***********************
*************************************************************/
void
-_gdk_dnd_init (GdkDisplay *display)
+_gdk_x11_dnd_init (GdkDisplay *display)
{
int i;
init_byte_order ();
gdk_atom_intern_static_string (xdnd_filters[i].atom_name),
xdnd_filters[i].func, NULL);
}
-}
+}
/* Source side */
base_precache_atoms (display);
/* Check for a local drag */
- window = gdk_window_lookup_for_display (display, xid);
+ window = gdk_x11_window_lookup_for_display (display, xid);
if (window && gdk_window_get_window_type (window) != GDK_WINDOW_FOREIGN)
{
if (g_object_get_data (G_OBJECT (window), "gdk-dnd-registered") != NULL)
if (recipient != None)
{
- dest_window = gdk_window_lookup_for_display (display, recipient);
+ dest_window = gdk_x11_window_lookup_for_display (display, recipient);
if (dest_window)
g_object_ref (dest_window);
else
- dest_window = gdk_window_foreign_new_for_display (display, recipient);
+ dest_window = gdk_x11_window_foreign_new_for_display (display, recipient);
}
else
dest_window = NULL;
MOTIF_XCLIENT_LONG (&xev, 3) = 0;
MOTIF_XCLIENT_LONG (&xev, 4) = 0;
- if (!_gdk_send_xevent (display,
- GDK_WINDOW_XID (context->source_window),
- FALSE, 0, &xev))
- GDK_NOTE (DND,
- g_message ("Send event to %lx failed",
- GDK_WINDOW_XID (context->source_window)));
+ if (!_gdk_x11_display_send_xevent (display,
+ GDK_WINDOW_XID (context->source_window),
+ FALSE, 0, &xev))
+ GDK_NOTE (DND,
+ g_message ("Send event to %lx failed",
+ GDK_WINDOW_XID (context->source_window)));
}
else if (context->protocol == GDK_DRAG_PROTO_XDND)
{
xev.xclient.data.l[1] = (action != 0) ? (2 | 1) : 0;
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
+ xev.xclient.data.l[4] = 0;
if (!xdnd_send_xevent (context_x11, context->source_window, FALSE, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
MOTIF_XCLIENT_LONG (&xev, 3) = 0;
MOTIF_XCLIENT_LONG (&xev, 4) = 0;
- _gdk_send_xevent (display,
- GDK_WINDOW_XID (context->source_window),
- FALSE, 0, &xev);
+ _gdk_x11_display_send_xevent (display,
+ GDK_WINDOW_XID (context->source_window),
+ FALSE, 0, &xev);
}
}