#include "lisp.h"
#include "xterm.h"
+#include "menu.h"
#include "frame.h"
#include "window.h"
#include "character.h"
#define MAXREQUEST(dpy) (XMaxRequestSize (dpy))
-static Lisp_Object Qsuppress_icon;
static Lisp_Object Qundefined_color;
static Lisp_Object Qcompound_text, Qcancel_timer;
Lisp_Object Qfont_param;
*yptr = real_y;
}
-\f
+/* Get the mouse position in frame relative coordinates. */
+
+void
+x_relative_mouse_position (struct frame *f, int *x, int *y)
+{
+ Window root, dummy_window;
+ int dummy;
+
+ eassert (FRAME_X_P (f));
+
+ block_input ();
+
+ XQueryPointer (FRAME_X_DISPLAY (f),
+ DefaultRootWindow (FRAME_X_DISPLAY (f)),
+
+ /* The root window which contains the pointer. */
+ &root,
+
+ /* Window pointer is on, not used */
+ &dummy_window,
+
+ /* The position on that root window. */
+ x, y,
+ /* x/y in dummy_window coordinates, not used. */
+ &dummy, &dummy,
+
+ /* Modifier keys and pointer buttons, about which
+ we don't care. */
+ (unsigned int *) &dummy);
+
+ unblock_input ();
+
+ /* Translate root window coordinates to window coordinates. */
+ *x -= f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
+ *y -= f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
+}
/* Gamma-correct COLOR on frame F. */
coding.mode |= (CODING_MODE_SAFE_ENCODING | CODING_MODE_LAST_BLOCK);
/* We suppress producing escape sequences for composition. */
coding.common_flags &= ~CODING_ANNOTATION_MASK;
- coding.destination = xnmalloc (SCHARS (string), 2);
+ coding.destination = xnmalloc_atomic (SCHARS (string), 2);
coding.dst_bytes = SCHARS (string) * 2;
encode_coding_object (&coding, string, 0, 0,
SCHARS (string), SBYTES (string), Qnil);
if (xic_default_fontset == base_fontname)
{
/* There is no base font name, use the default. */
- fontsetname = xmalloc (strlen (base_fontname) + 2);
+ fontsetname = xmalloc_atomic (strlen (base_fontname) + 2);
strcpy (fontsetname, base_fontname);
}
else
/* As the font name doesn't conform to XLFD, we can't
modify it to generalize it to allcs and allfamilies.
Use the specified font plus the default. */
- fontsetname = xmalloc (strlen (base_fontname)
- + strlen (xic_default_fontset) + 3);
+ fontsetname = xmalloc_atomic (strlen (base_fontname)
+ + strlen (xic_default_fontset) + 3);
strcpy (fontsetname, base_fontname);
strcat (fontsetname, sep);
strcat (fontsetname, xic_default_fontset);
/* Build the actual font set name. */
len = strlen (base_fontname) + strlen (font_allcs)
+ strlen (font_allfamilies) + strlen (font_all) + 5;
- fontsetname = xmalloc (len);
+ fontsetname = xmalloc_atomic (len);
strcpy (fontsetname, base_fontname);
strcat (fontsetname, sep);
strcat (fontsetname, font_allcs);
int minibuffer_only = 0;
long window_prompting = 0;
int width, height;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
Lisp_Object display;
struct x_display_info *dpyinfo = NULL;
could get an infloop in next_frame since the frame is not yet in
Vframe_list. */
{
- ptrdiff_t count2 = SPECPDL_INDEX ();
+ dynwind_begin ();
record_unwind_protect (unwind_create_frame_1, inhibit_lisp_code);
inhibit_lisp_code = Qt;
? make_number (0) : make_number (1),
NULL, NULL, RES_TYPE_NUMBER);
- unbind_to (count2, Qnil);
+ dynwind_end ();
}
x_default_parameter (f, parms, Qbuffer_predicate, Qnil,
and similar functions. */
Vwindow_list = Qnil;
- return unbind_to (count, frame);
+ dynwind_end ();
+ return frame;
}
This applies even if long is more than 32 bits. The X library
converts to 32 bits before sending to the X server. */
elsize = element_format == 32 ? sizeof (long) : element_format >> 3;
- data = xnmalloc (nelements, elsize);
+ data = xnmalloc_atomic (nelements, elsize);
x_fill_property_data (FRAME_X_DISPLAY (f), value, data, element_format);
}
Lisp_Object frame;
Lisp_Object name;
int width, height;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
struct gcpro gcpro1, gcpro2, gcpro3;
int face_change_count_before = face_change_count;
Lisp_Object buffer;
face_change_count = face_change_count_before;
/* Discard the unwind_protect. */
- return unbind_to (count, frame);
+ dynwind_end ();
+ return frame;
}
int i, width, height, seen_reversed_p;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
int old_windows_or_buffers_changed = windows_or_buffers_changed;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
specbind (Qinhibit_redisplay, Qt);
intern ("x-hide-tip"));
UNGCPRO;
- return unbind_to (count, Qnil);
+ dynwind_end ();
+ return Qnil;
}
GCPRO2 (frame, timer);
tip_frame = tip_timer = deleted = Qnil;
- count = SPECPDL_INDEX ();
+ dynwind_begin ();
specbind (Qinhibit_redisplay, Qt);
specbind (Qinhibit_quit, Qt);
}
UNGCPRO;
- return unbind_to (count, deleted);
+ dynwind_end ();
+ return deleted;
}
Arg al[10];
int ac = 0;
XmString dir_xmstring, pattern_xmstring;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
check_window_system (f);
decoded_file = DECODE_FILE (file);
- return unbind_to (count, decoded_file);
+ dynwind_end ();
+ return decoded_file;
}
#endif /* USE_MOTIF */
char *fn;
Lisp_Object file = Qnil;
Lisp_Object decoded_file;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
char *cdef_file;
decoded_file = DECODE_FILE (file);
- return unbind_to (count, decoded_file);
+ dynwind_end ();
+ return decoded_file;
}
Lisp_Object font_param;
char *default_name = NULL;
struct gcpro gcpro1, gcpro2;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
if (popup_activated ())
error ("Trying to use a menu from within a menu-entry");
if (NILP (font))
Fsignal (Qquit, Qnil);
- return unbind_to (count, font);
+ dynwind_end ();
+ return font;
}
#endif /* HAVE_FREETYPE */
void
syms_of_xfns (void)
{
- /* The section below is built by the lisp expression at the top of the file,
- just above where these variables are declared. */
- /*&&& init symbols here &&&*/
- DEFSYM (Qsuppress_icon, "suppress-icon");
+#include "xfns.x"
+
DEFSYM (Qundefined_color, "undefined-color");
DEFSYM (Qcompound_text, "compound-text");
DEFSYM (Qcancel_timer, "cancel-timer");
DEFSYM (Qfont_param, "font-parameter");
- /* This is the end of symbol initialization. */
Fput (Qundefined_color, Qerror_conditions,
listn (CONSTYPE_PURE, 2, Qundefined_color, Qerror));
}
#endif /* USE_GTK */
- /* X window properties. */
- defsubr (&Sx_change_window_property);
- defsubr (&Sx_delete_window_property);
- defsubr (&Sx_window_property);
-
- defsubr (&Sxw_display_color_p);
- defsubr (&Sx_display_grayscale_p);
- defsubr (&Sxw_color_defined_p);
- defsubr (&Sxw_color_values);
- defsubr (&Sx_server_max_request_size);
- defsubr (&Sx_server_vendor);
- defsubr (&Sx_server_version);
- defsubr (&Sx_display_pixel_width);
- defsubr (&Sx_display_pixel_height);
- defsubr (&Sx_display_mm_width);
- defsubr (&Sx_display_mm_height);
- defsubr (&Sx_display_screens);
- defsubr (&Sx_display_planes);
- defsubr (&Sx_display_color_cells);
- defsubr (&Sx_display_visual_class);
- defsubr (&Sx_display_backing_store);
- defsubr (&Sx_display_save_under);
- defsubr (&Sx_display_monitor_attributes_list);
- defsubr (&Sx_wm_set_size_hint);
- defsubr (&Sx_create_frame);
- defsubr (&Sx_open_connection);
- defsubr (&Sx_close_connection);
- defsubr (&Sx_display_list);
- defsubr (&Sx_synchronize);
- defsubr (&Sx_backspace_delete_keys_p);
-
- defsubr (&Sx_show_tip);
- defsubr (&Sx_hide_tip);
tip_timer = Qnil;
staticpro (&tip_timer);
tip_frame = Qnil;
last_show_tip_args = Qnil;
staticpro (&last_show_tip_args);
-
- defsubr (&Sx_uses_old_gtk_dialog);
-#if defined (USE_MOTIF) || defined (USE_GTK)
- defsubr (&Sx_file_dialog);
-#endif
-
-#if defined (USE_GTK) && defined (HAVE_FREETYPE)
- defsubr (&Sx_select_font);
-#endif
}