diff src/device-msw.c @ 249:83b3d10dcba9 r20-5b23

Import from CVS: tag r20-5b23
author cvs
date Mon, 13 Aug 2007 10:19:09 +0200
parents 51092a27c943
children 727739f917cb
line wrap: on
line diff
--- a/src/device-msw.c	Mon Aug 13 10:18:22 2007 +0200
+++ b/src/device-msw.c	Mon Aug 13 10:19:09 2007 +0200
@@ -35,16 +35,22 @@
 #include "console-msw.h"
 #include "console-stream.h"
 #include "events.h"
-#include "event-msw.h"
 #include "faces.h"
 #include "frame.h"
+#include "sysdep.h"
+
+/* win32 DDE management library globals */
+DWORD mswindows_dde_mlid;
+HSZ mswindows_dde_service;
+HSZ mswindows_dde_topic_system;
+HSZ mswindows_dde_item_open;
 
 Lisp_Object Qinit_pre_mswindows_win, Qinit_post_mswindows_win;
 
 static void
 mswindows_init_device (struct device *d, Lisp_Object props)
 {
-  WNDCLASS wc;
+  WNDCLASSEX wc;
   HWND desktop;
   HDC hdc;
 
@@ -71,6 +77,7 @@
   DEVICE_CLASS(d) = Qcolor;
 
   /* Register the main window class */
+  wc.cbSize = sizeof (WNDCLASSEX);
   wc.style = CS_OWNDC;	/* One DC per window */
   wc.lpfnWndProc = (WNDPROC) mswindows_wnd_proc;
   wc.cbClsExtra = 0;
@@ -83,7 +90,32 @@
   wc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
   wc.lpszMenuName = NULL;
   wc.lpszClassName = XEMACS_CLASS;
-  RegisterClass(&wc);		/* XXX FIXME: Should use RegisterClassEx */
+  wc.hIconSm = LoadImage (GetModuleHandle (NULL), XEMACS_CLASS,
+			  IMAGE_ICON, 16, 16, 0);
+  RegisterClassEx (&wc);
+}
+
+static void
+mswindows_finish_init_device (struct device *d, Lisp_Object props)
+{
+  /* Initialise DDE management library and our related globals */
+  mswindows_dde_mlid = 0;
+  DdeInitialize (&mswindows_dde_mlid, mswindows_dde_callback,
+		 APPCMD_FILTERINITS|CBF_FAIL_SELFCONNECTIONS|CBF_FAIL_ADVISES|
+		 CBF_FAIL_POKES|CBF_FAIL_REQUESTS|CBF_SKIP_ALLNOTIFICATIONS, 0);
+  
+  mswindows_dde_service = DdeCreateStringHandle (mswindows_dde_mlid, XEMACS_CLASS, 0);
+  mswindows_dde_topic_system = DdeCreateStringHandle (mswindows_dde_mlid, SZDDESYS_TOPIC, 0);
+  mswindows_dde_item_open = DdeCreateStringHandle (mswindows_dde_mlid,
+						   TEXT(MSWINDOWS_DDE_ITEM_OPEN), 0);
+  DdeNameService (mswindows_dde_mlid, mswindows_dde_service, 0L, DNS_REGISTER);
+}
+
+static void
+mswindows_delete_device (struct device *d)
+{
+  DdeNameService (mswindows_dde_mlid, 0L, 0L, DNS_REGISTER);
+  DdeUninitialize (mswindows_dde_mlid);
 }
 
 static int
@@ -138,9 +170,9 @@
 console_type_create_device_mswindows (void)
 {
   CONSOLE_HAS_METHOD (mswindows, init_device);
-/*  CONSOLE_HAS_METHOD (mswindows, finish_init_device); */
+  CONSOLE_HAS_METHOD (mswindows, finish_init_device);
 /*  CONSOLE_HAS_METHOD (mswindows, mark_device); */
-/*  CONSOLE_HAS_METHOD (mswindows, delete_device); */
+  CONSOLE_HAS_METHOD (mswindows, delete_device);
   CONSOLE_HAS_METHOD (mswindows, device_pixel_width);
   CONSOLE_HAS_METHOD (mswindows, device_pixel_height);
   CONSOLE_HAS_METHOD (mswindows, device_mm_width);