/* win32 DDE management library globals */
#ifdef HAVE_DRAGNDROP
DWORD mswindows_dde_mlid;
+int mswindows_dde_enable;
HSZ mswindows_dde_service;
HSZ mswindows_dde_topic_system;
HSZ mswindows_dde_item_open;
#endif
}
+#ifdef HAVE_DRAGNDROP
static void
-mswindows_finish_init_device (struct device *d, Lisp_Object props)
+mswindows_init_dde ()
{
/* Initialize DDE management library and our related globals. We execute a
* dde Open("file") by simulating a drop, so this depends on dnd support. */
-#ifdef HAVE_DRAGNDROP
# if !(defined(CYGWIN) || defined(MINGW))
CoInitialize (NULL);
# endif
mswindows_dde_mlid = 0;
+ mswindows_dde_enable = 0;
DdeInitialize (&mswindows_dde_mlid, (PFNCALLBACK)mswindows_dde_callback,
APPCMD_FILTERINITS|CBF_FAIL_SELFCONNECTIONS|CBF_FAIL_ADVISES|
CBF_FAIL_POKES|CBF_FAIL_REQUESTS|CBF_SKIP_ALLNOTIFICATIONS,
mswindows_dde_item_open = DdeCreateStringHandle (mswindows_dde_mlid,
TEXT(MSWINDOWS_DDE_ITEM_OPEN), 0);
DdeNameService (mswindows_dde_mlid, mswindows_dde_service, 0L, DNS_REGISTER);
+}
+#endif
+
+void
+init_mswindows_very_early()
+{
+#ifdef HAVE_DRAGNDROP
+ /* Initializing dde when the device is created is too late - the
+ client will give up waiting. Instead we initialize here and tell
+ the client we're too busy until the rest of initialization has
+ happened. */
+ mswindows_init_dde();
+#endif
+}
+
+static void
+mswindows_finish_init_device (struct device *d, Lisp_Object props)
+{
+#ifdef HAVE_DRAGNDROP
+ /* Tell pending clients we are ready. */
+ mswindows_dde_enable = 1;
#endif
}
return Qunbound;
}
-static unsigned int
-mswindows_device_implementation_flags (void)
-{
- return XDEVIMPF_PIXEL_GEOMETRY;
-}
-
\f
/************************************************************************/
/* printer helpers */
mark_object (DEVICE_MSPRINTER_DEVMODE (d));
}
-static unsigned int
-msprinter_device_implementation_flags (void)
-{
- return ( XDEVIMPF_PIXEL_GEOMETRY
- | XDEVIMPF_IS_A_PRINTER
- | XDEVIMPF_NO_AUTO_REDISPLAY
- | XDEVIMPF_FRAMELESS_OK );
-}
\f
/************************************************************************/
/* printer Lisp subroutines */
if (EQ (prop, Qright_margin)) return 1440;
if (EQ (prop, Qtop_margin)) return 720;
if (EQ (prop, Qbottom_margin)) return 720;
- abort ();
+ ABORT ();
return 0;
}
static int
-plist_get_margin (Lisp_Object plist, Lisp_Object prop)
+plist_get_margin (Lisp_Object plist, Lisp_Object prop, int mm_p)
{
Lisp_Object val =
Fplist_get (plist, prop, make_int (mswindows_get_default_margin (prop)));
if (!INTP (val))
invalid_argument ("Margin value must be an integer", val);
- return MulDiv (XINT (val), 100, 144);
+ return MulDiv (XINT (val), mm_p ? 254 : 100, 144);
}
static Lisp_Object
plist_set_margin (Lisp_Object plist, Lisp_Object prop, int margin, int mm_p)
{
- Lisp_Object val = make_int (MulDiv (margin, 144, mm_p ? 2450 : 100));
+ Lisp_Object val = make_int (MulDiv (margin, 144, mm_p ? 254 : 100));
return Fcons (prop, Fcons (val, plist));
}
{
Lisp_Devmode *ldm = decode_devmode (device);
PAGESETUPDLG pd;
+ TCHAR measure[2];
+ int data;
+
+ GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_IMEASURE,
+ measure, sizeof(measure));
+ data = (strcmp (measure, "0"));
memset (&pd, 0, sizeof (pd));
pd.lStructSize = sizeof (pd);
pd.hwndOwner = mswindows_get_selected_frame_hwnd ();
pd.Flags = PSD_MARGINS;
- pd.rtMargin.left = plist_get_margin (plist, Qleft_margin);
- pd.rtMargin.top = plist_get_margin (plist, Qtop_margin);
- pd.rtMargin.right = plist_get_margin (plist, Qright_margin);
- pd.rtMargin.bottom = plist_get_margin (plist, Qbottom_margin);
+ pd.rtMargin.left = plist_get_margin (plist, Qleft_margin, !data);
+ pd.rtMargin.top = plist_get_margin (plist, Qtop_margin, !data);
+ pd.rtMargin.right = plist_get_margin (plist, Qright_margin, !data);
+ pd.rtMargin.bottom = plist_get_margin (plist, Qbottom_margin, !data);
pd.hDevMode = devmode_to_hglobal (ldm);
if (!PageSetupDlg (&pd))
CONSOLE_HAS_METHOD (mswindows, mark_device);
CONSOLE_HAS_METHOD (mswindows, delete_device);
CONSOLE_HAS_METHOD (mswindows, device_system_metrics);
- CONSOLE_HAS_METHOD (mswindows, device_implementation_flags);
+ CONSOLE_IMPLEMENTATION_FLAGS (mswindows, XDEVIMPF_PIXEL_GEOMETRY);
CONSOLE_HAS_METHOD (msprinter, init_device);
CONSOLE_HAS_METHOD (msprinter, mark_device);
CONSOLE_HAS_METHOD (msprinter, delete_device);
CONSOLE_HAS_METHOD (msprinter, device_system_metrics);
- CONSOLE_HAS_METHOD (msprinter, device_implementation_flags);
+ CONSOLE_IMPLEMENTATION_FLAGS (msprinter, (XDEVIMPF_PIXEL_GEOMETRY
+ | XDEVIMPF_IS_A_PRINTER
+ | XDEVIMPF_NO_AUTO_REDISPLAY
+ | XDEVIMPF_DONT_PREEMPT_REDISPLAY
+ | XDEVIMPF_FRAMELESS_OK));
}