#define DEVICE_TYPE_NAME(d) ((d)->devmeths->name)
#define DEVICE_TYPE(d) ((d)->devmeths->symbol)
+#define DEVICE_IMPL_FLAG(d, f) CONMETH_IMPL_FLAG ((d)->devmeths, (f))
#define DEVICE_SPECIFIC_FRAME_PROPS(d) \
((d)->devmeths->device_specific_frame_props)
unsigned int extents_changed :1;
unsigned int faces_changed :1;
unsigned int frame_changed :1;
+ unsigned int frame_layout_changed :1; /* The layout of frame
+ elements has changed. */
unsigned int glyphs_changed :1;
unsigned int subwindows_changed :1;
unsigned int subwindows_state_changed :1;
DECLARE_LRECORD (device, struct device);
#define XDEVICE(x) XRECORD (x, device, struct device)
#define XSETDEVICE(x, p) XSETRECORD (x, p, device)
+#define wrap_device(p) wrap_object (p)
#define DEVICEP(x) RECORDP (x, device)
#define CHECK_DEVICE(x) CHECK_RECORD (x, device)
#define CONCHECK_DEVICE(x) CONCHECK_RECORD (x, device)
#define DEVICE_TYPE_P(d, type) EQ (DEVICE_TYPE (d), Q##type)
#ifdef ERROR_CHECK_TYPECHECK
-INLINE struct device *
+INLINE_HEADER struct device *
error_check_device_type (struct device *d, Lisp_Object sym);
-INLINE struct device *
+INLINE_HEADER struct device *
error_check_device_type (struct device *d, Lisp_Object sym)
{
assert (EQ (DEVICE_TYPE (d), sym));
(type##_console_methods->predicate_symbol, x); \
} while (0)
+#define DEVICE_DISPLAY_P(dev) \
+ (DEVICE_LIVE_P (dev) && \
+ !DEVICE_IMPL_FLAG (dev, XDEVIMPF_IS_A_PRINTER))
+
+#define CHECK_DISPLAY_DEVICE(dev) \
+ do { \
+ CHECK_DEVICE (dev); \
+ if (!(DEVICEP (dev) \
+ && DEVICE_DISPLAY_P (XDEVICE (dev)))) \
+ dead_wrong_type_argument (Qdisplay, dev); \
+ } while (0)
+
+#define CONCHECK_DISPLAY_DEVICE(dev) \
+ do { \
+ CONCHECK_DEVICE (dev); \
+ if (!(DEVICEP (dev) \
+ && DEVICE_DISPLAY_P (XDEVICE (dev)))) \
+ wrong_type_argument (Qdisplay, dev); \
+ } while (0)
+
+#define DEVICE_PRINTER_P(dev) \
+ (DEVICE_LIVE_P (dev) && !DEVICE_DISPLAY_P (dev))
+
+#define CHECK_PRINTER_DEVICE(dev) \
+ do { \
+ CHECK_DEVICE (dev); \
+ if (!(DEVICEP (dev) \
+ && DEVICE_PRINTER_P (XDEVICE (dev)))) \
+ dead_wrong_type_argument (Qprinter, dev); \
+ } while (0)
+
+#define CONCHECK_PRINTER_DEVICE(dev) \
+ do { \
+ CONCHECK_DEVICE (dev); \
+ if (!(DEVICEP (dev) \
+ && DEVICE_PRINTER_P (XDEVICE (dev)))) \
+ wrong_type_argument (Qprinter, dev); \
+ } while (0)
+
/* #### These should be in the device-*.h files but there are
too many places where the abstraction is broken. Need to
fix. */
#define CHECK_X_DEVICE(z) CHECK_DEVICE_TYPE (z, x)
#define CONCHECK_X_DEVICE(z) CONCHECK_DEVICE_TYPE (z, x)
+#define DEVICE_GTK_P(dev) CONSOLE_TYPESYM_GTK_P (DEVICE_TYPE (dev))
+#define CHECK_GTK_DEVICE(z) CHECK_DEVICE_TYPE (z, gtk)
+#define CONCHECK_GTK_DEVICE(z) CONCHECK_DEVICE_TYPE (z, gtk)
+
#define DEVICE_MSWINDOWS_P(dev) CONSOLE_TYPESYM_MSWINDOWS_P (DEVICE_TYPE (dev))
#define CHECK_MSWINDOWS_DEVICE(z) CHECK_DEVICE_TYPE (z, mswindows)
#define CONCHECK_MSWINDOWS_DEVICE(z) CONCHECK_DEVICE_TYPE (z, mswindows)
EXFUN (Fdevice_console, 1);
EXFUN (Fdevice_name, 1);
+EXFUN (Ffind_device, 2);
EXFUN (Fmake_device, 3);
EXFUN (Fselected_device, 1);
extern Lisp_Object Qcreate_device_hook, Qdelete_device_hook, Qgrayscale;
-extern Lisp_Object Qinit_post_tty_win, Qmono, Vdefault_x_device;
+extern Lisp_Object Qinit_post_tty_win, Qmono, Vdefault_x_device, Vdefault_gtk_device;
extern Lisp_Object Vdevice_class_list;
int valid_device_class_p (Lisp_Object class);
#define MARK_DEVICE_FRAME_CHANGED(d) \
((void) (frame_changed = (d)->frame_changed = 1))
+#define MARK_DEVICE_FRAME_LAYOUT_CHANGED(d) \
+ ((void) (frame_layout_changed = (d)->frame_layout_changed = 1))
+
#define MARK_DEVICE_WINDOWS_CHANGED(d) \
((void) (windows_changed = (d)->windows_changed = 1))
#define MARK_DEVICE_WINDOWS_STRUCTURE_CHANGED(d) \
((void) (windows_structure_changed = (d)->windows_structure_changed = 1))
+/* #### unify this with DOMAIN_DEVICE once the latter has image instances
+ expunged from it. */
/* This turns out to be used heavily so we make it a macro to make it
inline. Also, the majority of the time the object will turn out to
be a window so we move it from being checked last to being checked