mark_fringe_data ();
#endif
+#ifdef HAVE_X_WINDOWS
+ mark_xterm ();
+#endif
+
/* Everything is now marked, except for the data in font caches,
undo lists, and finalizers. The first two are compacted by
removing an items which aren't reachable otherwise. */
#ifdef USE_GTK
current_hold_quit = NULL;
#endif
+ x_dnd_return_frame_object = NULL;
+ x_dnd_movement_frame = NULL;
block_input ();
/* Restore the old event mask. */
if (x_dnd_use_toplevels)
x_dnd_free_toplevels ();
+ x_dnd_return_frame_object = NULL;
+ x_dnd_movement_frame = NULL;
+
FRAME_DISPLAY_INFO (f)->grabbed = 0;
#ifdef USE_GTK
current_hold_quit = NULL;
#ifdef USE_GTK
current_hold_quit = NULL;
#endif
+ x_dnd_movement_frame = NULL;
/* Restore the old event mask. */
XSelectInput (FRAME_X_DISPLAY (f),
unblock_input ();
- if (x_dnd_return_frame == 3)
+ if (x_dnd_return_frame == 3
+ && FRAME_LIVE_P (x_dnd_return_frame_object))
{
x_dnd_return_frame_object->mouse_moved = true;
XSETFRAME (action, x_dnd_return_frame_object);
+ x_dnd_return_frame_object = NULL;
return action;
}
+ x_dnd_return_frame_object = NULL;
+
if (x_dnd_use_toplevels)
x_dnd_free_toplevels ();
FRAME_DISPLAY_INFO (f)->grabbed = 0;
}
#endif
+void
+mark_xterm (void)
+{
+ Lisp_Object val;
+
+ if (x_dnd_return_frame_object)
+ {
+ XSETFRAME (val, x_dnd_return_frame_object);
+ mark_object (val);
+ }
+
+ if (x_dnd_movement_frame)
+ {
+ XSETFRAME (val, x_dnd_movement_frame);
+ mark_object (val);
+ }
+}
+
void
syms_of_xterm (void)
{
struct xi_device_t *xi_device_from_id (struct x_display_info *, int);
#endif
+extern void mark_xterm (void);
+
/* Is the frame embedded into another application? */
#define FRAME_X_EMBEDDED_P(f) (FRAME_X_OUTPUT(f)->explicit_parent != 0)