[Xquartz-changes] xserver: Branch 'master' - 15 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Sun Jul 31 16:47:08 PDT 2011


Rebased ref, commits from common ancestor:
commit e87adcc9e024982fdad974de2876b00cf974dab8
Author: Julien Cristau <jcristau at debian.org>
Date:   Sun Jul 31 21:14:59 2011 +0200

    Xquartz: include new localization files in the tarball
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/bundle/Makefile.am b/hw/xquartz/bundle/Makefile.am
index 6deecae..6e83a42 100644
--- a/hw/xquartz/bundle/Makefile.am
+++ b/hw/xquartz/bundle/Makefile.am
@@ -40,6 +40,9 @@ EXTRA_DIST = \
 	Resources/Dutch.lproj/InfoPlist.strings \
 	Resources/Dutch.lproj/Localizable.strings \
 	Resources/Dutch.lproj/main.nib/keyedobjects.nib \
+	Resources/el.lproj/InfoPlist.strings \
+	Resources/el.lproj/Localizable.strings \
+	Resources/el.lproj/main.nib/keyedobjects.nib \
 	Resources/English.lproj/InfoPlist.strings \
 	Resources/English.lproj/Localizable.strings \
 	Resources/English.lproj/main.nib/designable.nib \
@@ -53,6 +56,9 @@ EXTRA_DIST = \
 	Resources/German.lproj/InfoPlist.strings \
 	Resources/German.lproj/Localizable.strings \
 	Resources/German.lproj/main.nib/keyedobjects.nib \
+	Resources/he.lproj/InfoPlist.strings \
+	Resources/he.lproj/Localizable.strings \
+	Resources/he.lproj/main.nib/keyedobjects.nib \
 	Resources/Italian.lproj/InfoPlist.strings \
 	Resources/Italian.lproj/Localizable.strings \
 	Resources/Italian.lproj/main.nib/keyedobjects.nib \
@@ -77,6 +83,9 @@ EXTRA_DIST = \
 	Resources/ru.lproj/InfoPlist.strings \
 	Resources/ru.lproj/Localizable.strings \
 	Resources/ru.lproj/main.nib/keyedobjects.nib \
+	Resources/sk.lproj/InfoPlist.strings \
+	Resources/sk.lproj/Localizable.strings \
+	Resources/sk.lproj/main.nib/keyedobjects.nib \
 	Resources/Spanish.lproj/InfoPlist.strings \
 	Resources/Spanish.lproj/Localizable.strings \
 	Resources/Spanish.lproj/main.nib/keyedobjects.nib \
commit a1bb5062c72667b2f10b56925c61888acc89e3e4
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Thu Jul 21 10:33:58 2011 -0700

    XQuartz: xpr: Don't FatalError if xp_unlock_window fails
    
    We added the FatalError in 5d1d9d9ae39fab2ee2ac085f9776f82768828dc8 but
    it caused a regression http://xquartz.macosforge.org/trac/ticket/482
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index 4818653..98f1cc3 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -223,7 +223,7 @@ xprDestroyFrame(RootlessFrameID wid)
 
     err = xp_destroy_window(x_cvt_vptr_to_uint(wid));
     if (err != Success)
-        FatalError("Could not destroy window %i.", (int)x_cvt_vptr_to_uint(wid));
+        FatalError("Could not destroy window %d (%d).", (int)x_cvt_vptr_to_uint(wid), (int)err);
 }
 
 
@@ -364,7 +364,7 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow)
 
     err = xp_lock_window(x_cvt_vptr_to_uint(wid), NULL, NULL, data, rowbytes, NULL);
     if (err != Success)
-        FatalError("Could not lock window %i for drawing.", (int)x_cvt_vptr_to_uint(wid));
+        FatalError("Could not lock window %d for drawing (%d).", (int)x_cvt_vptr_to_uint(wid), (int)err);
 
     *pixelData = data[0];
     *bytesPerRow = rowbytes[0];
@@ -380,8 +380,11 @@ xprStopDrawing(RootlessFrameID wid, Bool flush)
     xp_error err;
 
     err = xp_unlock_window(x_cvt_vptr_to_uint(wid), flush);
+    /* This should be a FatalError, but we started tripping over it.  Make it a
+     * FatalError after http://xquartz.macosforge.org/trac/ticket/482 is fixed.
+     */
     if(err != Success)
-        FatalError("Could not unlock window %i after drawing.", (int)x_cvt_vptr_to_uint(wid));
+        ErrorF("Could not unlock window %d after drawing (%d).", (int)x_cvt_vptr_to_uint(wid), (int)err);
 }
 
 
commit c319f7b5b3ee651636cdfd165588f0dc972a22a4
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Wed Jul 20 00:16:42 2011 -0700

    XQuartz: Use CFSTR to avoid implicit cast warning of NSString * to CFStringRef
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 8a03fbe..7fd7dab 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1014,7 +1014,7 @@ void X11ApplicationMain (int argc, char **argv, char **envp) {
 
     if (app_prefs_domain_cfstr == NULL) {
         ErrorF("X11ApplicationMain: Unable to determine bundle identifier.  Your installation of XQuartz may be broken.\n");
-        app_prefs_domain_cfstr = @BUNDLE_ID_PREFIX".X11";
+        app_prefs_domain_cfstr = CFSTR(BUNDLE_ID_PREFIX".X11");
     }
 
     [NSApp read_defaults];
commit 08dfff92e8d0c2b1726634392c147f6634d1706d
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Fri Jul 29 16:12:06 2011 -0700

    randr: Compare all the bytes in RRPostPendingProperties
    
    RRPostPendingProperties tries to compare the pending and current
    property values to decide whether they're actually changing.  However,
    it does this using a memcmp that passes in pending_value->size as the
    number of bytes.  This is actually the number of elements, where each
    element is (pending_value->format / 8) bytes long.  This causes the
    pending value to not be propagated if the first pending_value->size
    bytes are the same and only the end of it is changing.
    
    Fix this by computing the total number of bytes to compare in the
    memcmp.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index ba04c16..61e7bb4 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -283,7 +283,7 @@ RRPostPendingProperties (RROutputPtr output)
 	    pending_value->format == current_value->format &&
 	    pending_value->size == current_value->size &&
 	    !memcmp (pending_value->data, current_value->data,
-		     pending_value->size))
+		     pending_value->size * (pending_value->format / 8)))
 	    continue;
 
 	if (RRChangeOutputProperty (output, property->propertyName,
commit b8f61c11c94708d4f17720a55945dee4621315a4
Merge: 5596f10... f51e42f...
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Jul 29 14:58:58 2011 -0700

    Merge remote-tracking branch 'whot/for-keith'

commit f51e42f583073bde0bc8131887cb7220636c8855
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 20 13:09:05 2011 +1000

    Terminate the log with one last message.
    
    Instead of just closing the log when everything is done, put one more
    message in stating that we're actually terminating. Users or scripts that
    look at the Xorg.log will then know that a) the server has terminated
    properly and b) why the server terminated (to some degree, given that most
    real-world errors will be caused by AbortServer()).
    
    Acked-by: Gaetan Nadon <memsize at videotron.ca>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Tested-by: Jeremy Huddleston <jeremyhu at apple.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
    Tested-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/main.c b/dix/main.c
index 955b7ea..16575ce 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -347,7 +347,7 @@ int main(int argc, char *argv[], char *envp[])
 
 	if (dispatchException & DE_TERMINATE)
 	{
-	    ddxGiveUp();
+	    ddxGiveUp(EXIT_NO_ERROR);
 	    break;
 	}
 
diff --git a/doc/Xserver-spec.xml b/doc/Xserver-spec.xml
index 7d7f915..b14e489 100644
--- a/doc/Xserver-spec.xml
+++ b/doc/Xserver-spec.xml
@@ -4680,8 +4680,8 @@ An Example implementation is miPushPixels() in Xserver/mi/mipushpxl.c.</para>
   <title>Shutdown Procedures</title>
 <para>
 <blockquote><programlisting>
-	void AbortDDX()
-	void ddxGiveUp()
+	void AbortDDX(enum ExitCode error)
+	void ddxGiveUp(enum ExitCode error)
 </programlisting></blockquote>
 Some hardware may require special work to be done before the server
 exits so that it is not left in an intermediate state.  As explained
diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index 74b3582..bc1509b 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -821,7 +821,7 @@ static void dmxSetDefaultFontPath(char *fp)
 /** This function is called in Xserver/os/utils.c from \a AbortServer().
  * We must ensure that backend and console state is restored in the
  * event the server shutdown wasn't clean. */
-void AbortDDX(void)
+void AbortDDX(enum ExitCode error)
 {
     int i;
 
@@ -842,9 +842,9 @@ void ddxBeforeReset(void)
 /** This function is called in Xserver/dix/main.c from \a main() when
  * dispatchException & DE_TERMINATE (which is the only way to exit the
  * main loop without an interruption. */
-void ddxGiveUp(void)
+void ddxGiveUp(enum ExitCode error)
 {
-    AbortDDX();
+    AbortDDX(error);
 }
 
 /** This function is called in Xserver/os/osinit.c from \a OsInit(). */
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index f034ce4..8dd039e 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -232,7 +232,7 @@ KdProcessSwitch (void)
 }
 
 void
-AbortDDX(void)
+AbortDDX(enum ExitCode error)
 {
     KdDisableScreens ();
     if (kdOsFuncs)
@@ -249,9 +249,9 @@ AbortDDX(void)
 }
 
 void
-ddxGiveUp (void)
+ddxGiveUp (enum ExitCode error)
 {
-    AbortDDX ();
+    AbortDDX (error);
 }
 
 Bool	kdDumbDriver;
diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
index 53f82f9..31ed505 100644
--- a/hw/vfb/InitOutput.c
+++ b/hw/vfb/InitOutput.c
@@ -150,7 +150,7 @@ vfbBitsPerPixel(int depth)
 }
 
 void
-ddxGiveUp(void)
+ddxGiveUp(enum ExitCode error)
 {
     int i;
 
@@ -201,9 +201,9 @@ ddxGiveUp(void)
 }
 
 void
-AbortDDX(void)
+AbortDDX(enum ExitCode error)
 {
-    ddxGiveUp();
+    ddxGiveUp(error);
 }
 
 #ifdef __APPLE__
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 9752669..ab07515 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -749,7 +749,7 @@ DoConfigure(void)
 
 bail:
     OsCleanup(TRUE);
-    AbortDDX();
+    AbortDDX(EXIT_ERR_CONFIGURE);
     fflush(stderr);
     exit(0);
 }
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 3cdffdb..f8e6c8b 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -1198,9 +1198,9 @@ xf86LogInit(void)
 }
 
 void
-xf86CloseLog(void)
+xf86CloseLog(enum ExitCode error)
 {
-    LogClose();
+    LogClose(error);
 }
 
 
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 5347bbf..71926f8 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -902,7 +902,7 @@ OsVendorInit(void)
  */
 
 void
-ddxGiveUp(void)
+ddxGiveUp(enum ExitCode error)
 {
     int i;
 
@@ -929,7 +929,7 @@ ddxGiveUp(void)
     if (xorgHWOpenConsole)
 	xf86CloseConsole();
 
-    xf86CloseLog();
+    xf86CloseLog(error);
 
     /* If an unexpected signal was caught, dump a core for debugging */
     if (xf86Info.caughtSignal)
@@ -946,7 +946,7 @@ ddxGiveUp(void)
  */
 
 void
-AbortDDX(void)
+AbortDDX(enum ExitCode error)
 {
   int i;
 
@@ -979,7 +979,7 @@ AbortDDX(void)
    * This is needed for an abnormal server exit, since the normal exit stuff
    * MUST also be performed (i.e. the vt must be left in a defined state)
    */
-  ddxGiveUp();
+  ddxGiveUp(error);
 }
 
 void
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index 5d91ab3..1fe3d7e 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -140,7 +140,7 @@ extern _X_EXPORT pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event);
 
 /* xf86Helper.c */
 extern _X_EXPORT void xf86LogInit(void);
-extern _X_EXPORT void xf86CloseLog(void);
+extern _X_EXPORT void xf86CloseLog(enum ExitCode error);
 
 /* xf86Init.c */
 extern _X_EXPORT Bool xf86LoadModules(char **list, pointer *optlist);
diff --git a/hw/xfree86/common/xf86ShowOpts.c b/hw/xfree86/common/xf86ShowOpts.c
index c0fa80a..a805916 100644
--- a/hw/xfree86/common/xf86ShowOpts.c
+++ b/hw/xfree86/common/xf86ShowOpts.c
@@ -124,7 +124,7 @@ void DoShowOptions (void) {
 	}
 	bail:
 	OsCleanup (TRUE);                             
-	AbortDDX ();                                                           
+	AbortDDX (EXIT_ERR_DRIVERS);
 	fflush (stderr);                        
 	exit (0);
 }
diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
index ea0669a..af57518 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -114,16 +114,16 @@ CloseInput(void)
 /*
  * DDX - specific abort routine.  Called by AbortServer().
  */
-void AbortDDX(void)
+void AbortDDX(enum ExitCode error)
 {
   xnestDoFullGeneration = True;
   xnestCloseDisplay();
 }
 
 /* Called by GiveUp(). */
-void ddxGiveUp(void)
+void ddxGiveUp(enum ExitCode error)
 {
-  AbortDDX();
+  AbortDDX(error);
 }
 
 #ifdef __APPLE__
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 73685b0..f19d7bf 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -766,9 +766,9 @@ void ddxUseMsg( void )
  * ddxGiveUp --
  *      Device dependent cleanup. Called by dix before normal server death.
  */
-void ddxGiveUp( void )
+void ddxGiveUp( enum ExitCode error )
 {
-    ErrorF( "Quitting Xquartz\n" );
+    LogClose(error);
 }
 
 
@@ -779,7 +779,7 @@ void ddxGiveUp( void )
  *      are closed.
  */
 _X_NORETURN
-void AbortDDX( void ) {
+void AbortDDX( enum ExitCode error ) {
     ErrorF( "   AbortDDX\n" );
     OsAbort();
 }
diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
index 22ef8da..4fe5053 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -191,7 +191,7 @@ ddxBeforeReset (void)
 
 /* See Porting Layer Definition - p. 57 */
 void
-ddxGiveUp (void)
+ddxGiveUp (enum ExitCode error)
 {
   int		i;
 
@@ -228,7 +228,7 @@ ddxGiveUp (void)
     g_pszLogFile = LogInit (g_pszLogFile, NULL);
     g_fLogInited = TRUE;
   }  
-  LogClose ();
+  LogClose (error);
 
   /*
    * At this point we aren't creating any new screens, so
@@ -258,12 +258,12 @@ ddxGiveUp (void)
 
 /* See Porting Layer Definition - p. 57 */
 void
-AbortDDX (void)
+AbortDDX (enum ExitCode error)
 {
 #if CYGDEBUG
   winDebug ("AbortDDX\n");
 #endif
-  ddxGiveUp ();
+  ddxGiveUp (error);
 }
 
 #ifdef __CYGWIN__
@@ -901,7 +901,7 @@ ddxUseMsg(void)
     g_pszLogFile = LogInit (g_pszLogFile, NULL);
     g_fLogInited = TRUE;
   }  
-  LogClose ();
+  LogClose (EXIT_NO_ERROR);
 
   /* Notify user where UseMsg text can be found.*/
   if (!g_fNoHelpMessageBox)
diff --git a/hw/xwin/winerror.c b/hw/xwin/winerror.c
index 5e32d09..0440d13 100644
--- a/hw/xwin/winerror.c
+++ b/hw/xwin/winerror.c
@@ -81,7 +81,7 @@ OsVendorFatalError (void)
     g_fLogInited = TRUE;
     g_pszLogFile = LogInit (g_pszLogFile, NULL);
   }
-  LogClose ();
+  LogClose (EXIT_ERR_ABORT);
 
   winMessageBoxF (
           "A fatal error has occurred and " PROJECT_NAME " will now exit.\n" \
diff --git a/include/os.h b/include/os.h
index 506dc5d..a553f57 100644
--- a/include/os.h
+++ b/include/os.h
@@ -459,8 +459,15 @@ typedef struct {
 /* stuff for FlushCallback */
 extern _X_EXPORT CallbackListPtr FlushCallback;
 
-extern _X_EXPORT void AbortDDX(void);
-extern _X_EXPORT void ddxGiveUp(void);
+enum ExitCode {
+    EXIT_NO_ERROR	= 0,
+    EXIT_ERR_ABORT	= 1,
+    EXIT_ERR_CONFIGURE	= 2,
+    EXIT_ERR_DRIVERS	= 3,
+};
+
+extern _X_EXPORT void AbortDDX(enum ExitCode error);
+extern _X_EXPORT void ddxGiveUp(enum ExitCode error);
 extern _X_EXPORT int TimeSinceLastInputEvent(void);
 
 /* strcasecmp.c */
@@ -508,7 +515,7 @@ typedef enum {
 } MessageType;
 
 extern _X_EXPORT const char *LogInit(const char *fname, const char *backup);
-extern _X_EXPORT void LogClose(void);
+extern _X_EXPORT void LogClose(enum ExitCode error);
 extern _X_EXPORT Bool LogSetParameter(LogParameter param, int value);
 extern _X_EXPORT void LogVWrite(int verb, const char *f, va_list args) _X_ATTRIBUTE_PRINTF(2,0);
 extern _X_EXPORT void LogWrite(int verb, const char *f, ...) _X_ATTRIBUTE_PRINTF(2,3);
diff --git a/os/log.c b/os/log.c
index 4a310e6..f519762 100644
--- a/os/log.c
+++ b/os/log.c
@@ -231,9 +231,11 @@ LogInit(const char *fname, const char *backup)
 }
 
 void
-LogClose(void)
+LogClose(enum ExitCode error)
 {
     if (logFile) {
+	ErrorF("Server terminated %s (%d). Closing log file.\n",
+		(error == EXIT_NO_ERROR) ? "successfully" : "with error", error);
 	fclose(logFile);
 	logFile = NULL;
     }
@@ -411,7 +413,7 @@ AbortServer(void)
     CloseWellKnownConnections();
     OsCleanup(TRUE);
     CloseDownDevices();
-    AbortDDX();
+    AbortDDX(EXIT_ERR_ABORT);
     fflush(stderr);
     if (CoreDump)
 	OsAbort();
commit 01de08c7d2c00eef238adba6665896ea3cd7d511
Author: Julien Cristau <jcristau at debian.org>
Date:   Tue Jul 26 20:40:38 2011 +0200

    configure: set default xkb rules to evdev on Linux
    
    If config/udev was enabled, this would default to base, which means that
    after regen the devices would get the wrong rules, and hilarity would
    ensue.
    
    It's probably safe to default to evdev unconditionally on Linux by now.
    
    Reported-by: Bastian Blank <waldi at debian.org>
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 4656a83..2438825 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1187,11 +1187,7 @@ if test "x$XKB_DFLT_RULES" = x; then
     case $host_os in
     linux*)
         dnl doesn't take AutoAddDevices into account, but whatever.
-        if test "x$CONFIG_HAL" = xyes; then
-            XKB_DFLT_RULES="evdev"
-        else
-            XKB_DFLT_RULES="base"
-        fi
+        XKB_DFLT_RULES="evdev"
         ;;
     *)
         XKB_DFLT_RULES="base"
commit 3798dd379c1ecf325f9907128fb66d20372f6876
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 20 09:00:18 2011 +1000

    Initialize the fd to -1 for xorg.conf input devices.
    
    For hotplugged devices, xf86AllocateInput does that for us but the xorg.conf
    path is different. Since not all drivers reset the fd during PreInit but may
    still call close(pInfo->fd) in all cases, this can terminate the logging
    early.
    
    Reproducible: add a wacom driver InputDevice section with no Option Device.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 114bdc3..58b30dd 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1222,6 +1222,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 	    devs = xnfrealloc(servlayoutp->inputs,
 			      (count + 1) * sizeof(InputInfoPtr));
             devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
+            Pointer.fd = -1;
 	    *devs[count - 1] = Pointer;
 	    devs[count - 1]->options =
 				xf86addNewOption(devs[count -1]->options,
@@ -1267,6 +1268,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 	    devs = xnfrealloc(servlayoutp->inputs,
 			      (count + 1) * sizeof(InputInfoPtr));
             devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
+            Pointer.fd = -1;
 	    *devs[count - 1] = Pointer;
 	    devs[count - 1]->options =
 				xf86addNewOption(NULL, xnfstrdup("AlwaysCore"), NULL);
@@ -1363,6 +1365,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 	    devs = xnfrealloc(servlayoutp->inputs,
 			      (count + 1) * sizeof(InputInfoPtr));
             devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
+            Keyboard.fd = -1;
 	    *devs[count - 1] = Keyboard;
 	    devs[count - 1]->options =
 				xf86addNewOption(devs[count - 1]->options,
commit f2a6735cfc07789cca81852b24a85578f200d83d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jul 4 12:34:32 2011 +1000

    xfree86: NULL option values are technically valid, don't strdup them
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
index 480f386..a3a836f 100644
--- a/hw/xfree86/common/xf86Option.c
+++ b/hw/xfree86/common/xf86Option.c
@@ -340,7 +340,7 @@ pointer
 xf86AddNewOption(pointer head, const char *name, const char *val)
 {
     /* XXX These should actually be allocated in the parser library. */
-    char *tmp = strdup(val);
+    char *tmp = val ? strdup(val) : NULL;
     char *tmp_name = strdup(name);
 
     return xf86addNewOption(head, tmp_name, tmp);
commit f0d7e9db28c374a3db359bcb63a7ce79fd84b541
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jul 4 14:14:39 2011 +1000

    xfree86: duplicate xorg.conf device information before xf86NewInputDevice
    
    xf86ConfigLayout.inputs contains the information from the xorg.conf
    file. Passing this into xf86NewInputDevice means the device will get
    cleaned up on exit and the pointers in xf86ConfigLayout.inputs are left
    dangling. In the second server generation, this results in a server
    crash.
    
    Also, rename pDev to pInfo. pDev is pretty much reserved for DeviceIntPtr
    types.
    
    Reproducible: AutoAddDevices off and xorg.conf input sections, trigger
    server regeneration.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 15fdbc3..5347bbf 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -791,6 +791,21 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 				 NULL);
 }
 
+static InputInfoPtr
+duplicateDevice(InputInfoPtr pInfo)
+{
+    InputInfoPtr dup = calloc(1, sizeof(InputInfoRec));
+    if (dup) {
+        dup->name = strdup(pInfo->name);
+        dup->driver = strdup(pInfo->driver);
+        dup->options = xf86OptionListDuplicate(pInfo->options);
+        /* type_name is a const string */
+        dup->type_name = pInfo->type_name;
+        dup->fd = -1;
+    }
+    return dup;
+}
+
 /*
  * InitInput --
  *      Initialize all supported input devices.
@@ -799,7 +814,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 void
 InitInput(int argc, char **argv)
 {
-    InputInfoPtr* pDev;
+    InputInfoPtr* pInfo;
     DeviceIntPtr dev;
 
     xf86Info.vtRequestsPending = FALSE;
@@ -807,14 +822,21 @@ InitInput(int argc, char **argv)
     mieqInit();
 
     /* Initialize all configured input devices */
-    for (pDev = xf86ConfigLayout.inputs; pDev && *pDev; pDev++) {
+    for (pInfo = xf86ConfigLayout.inputs; pInfo && *pInfo; pInfo++) {
+        InputInfoPtr dup;
         /* Replace obsolete keyboard driver with kbd */
-        if (!xf86NameCmp((*pDev)->driver, "keyboard")) {
-            strcpy((*pDev)->driver, "kbd");
+        if (!xf86NameCmp((*pInfo)->driver, "keyboard")) {
+            strcpy((*pInfo)->driver, "kbd");
         }
 
+        /* Data passed into xf86NewInputDevice will be freed on shutdown.
+         * Duplicate from xf86ConfigLayout.inputs, otherwise we don't have any
+         * xorg.conf input devices in the second generation
+         */
+        dup = duplicateDevice(*pInfo);
+
         /* If one fails, the others will too */
-        if (xf86NewInputDevice(*pDev, &dev, TRUE) == BadAlloc)
+        if (xf86NewInputDevice(dup, &dev, TRUE) == BadAlloc)
             break;
     }
 
commit 8ffddbcf72170e246826ee0f39f18989a29fa218
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jun 27 16:30:28 2011 +1000

    xfree86: Remove devices that failed to enable on startup
    
    Devices that succeeded during PreInit and DEVICE_INIT but failed in
    DEVICE_ON would be deleted through xf86DeleteInput but not removed from the
    list of input devices (and not turned off). The result was a double free on
    server shutdown.
    
    Fix this by calling RemoveDevice if EnableDevice fails.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 26051ad..d22fdc8 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -844,6 +844,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable)
         {
             OsReleaseSignals();
             xf86Msg(X_ERROR, "Couldn't init device \"%s\"\n", pInfo->name);
+            RemoveDevice(dev, TRUE);
             rval = BadMatch;
             goto unwind;
         }
commit 6cea28fe4b7a4a22ad270d8c71403db84a9bfb2c
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Jul 18 21:18:27 2011 +0200

    config: don't fail if a device vanished by the time we managed to look at it
    
    The nature of hotplug is that a device we enumerated might already be
    gone by the time we look at it, so don't assume otherwise.
    
    Signed-off-by: Lennart Poettering <lennart at poettering.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/config/udev.c b/config/udev.c
index 0763cc9..e7383dc 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -301,6 +301,11 @@ config_udev_init(void)
     udev_list_entry_foreach(device, devices) {
         const char *syspath = udev_list_entry_get_name(device);
         struct udev_device *udev_device = udev_device_new_from_syspath(udev, syspath);
+
+        /* Device might be gone by the time we try to open it */
+        if (!udev_device)
+            continue;
+
         device_added(udev_device);
         udev_device_unref(udev_device);
     }
commit f13de9ca1b7c4dd0dd5c08037c6bd53f88ac30f5
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Jul 18 21:17:49 2011 +0200

    config: limit the kernel subsystems we look for devices in
    
    Don't enumerate/monitor all devices of the system (since that can be
    quite a few), but limit our search to devices from the "input"
    subsystem, as well as the "tty" subsystem (to cover Wacom tablets).
    
    This should make X start up a bit faster and reduce the number of
    unnecessary wake-ups of the X server.
    
    Signed-off-by: Lennart Poettering <lennart at poettering.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/config/udev.c b/config/udev.c
index 5ac52a1..0763cc9 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -281,6 +281,9 @@ config_udev_init(void)
     if (!udev_monitor)
         return 0;
 
+    udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "input", NULL);
+    udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "tty", NULL); /* For Wacom serial devices */
+
     if (udev_monitor_enable_receiving(udev_monitor)) {
         ErrorF("config/udev: failed to bind the udev monitor\n");
         return 0;
@@ -289,6 +292,10 @@ config_udev_init(void)
     enumerate = udev_enumerate_new(udev);
     if (!enumerate)
         return 0;
+
+    udev_enumerate_add_match_subsystem(enumerate, "input");
+    udev_enumerate_add_match_subsystem(enumerate, "tty");
+
     udev_enumerate_scan_devices(enumerate);
     devices = udev_enumerate_get_list_entry(enumerate);
     udev_list_entry_foreach(device, devices) {
commit 882e3c2680c339ad7aa0d664e0b0f02b8a05b11d
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Jul 18 21:17:10 2011 +0200

    config: process udev "changed" and "add" events in the same code paths
    
    udev gives no guarantee that before each "changed" event for a device
    there's an "add" event, or that before each "remove" is an "add", or
    that before each "add" there was no "add" already and so on. Users can
    trigger these events at any time with "udevadm trigger", and netlink is
    a lossy transport, hence the events can come in unexpected ordering.
    
    With other words: regardless which event is generated, the X server must
    not choke on it and make the best of it, hence make sure that if we get
    an "add" event for an existing device we don't add the device a second
    time.
    
    Signed-off-by: Lennart Poettering <lennart at poettering.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/config/udev.c b/config/udev.c
index 9ac34ee..5ac52a1 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -251,14 +251,12 @@ wakeup_handler(pointer data, int err, pointer read_mask)
             return;
         action = udev_device_get_action(udev_device);
         if (action) {
-            if (!strcmp(action, "add"))
-                device_added(udev_device);
-            else if (!strcmp(action, "remove"))
-                device_removed(udev_device);
-            else if (!strcmp(action, "change")) {
+            if (!strcmp(action, "add") || !strcmp(action, "change")) {
                 device_removed(udev_device);
                 device_added(udev_device);
             }
+            else if (!strcmp(action, "remove"))
+                device_removed(udev_device);
         }
         udev_device_unref(udev_device);
     }
commit 5596f10cce58295d8af73646352b314ecb3ddfca
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sat Jul 9 13:21:04 2011 +0100

    Remove hw/xwin/xlaunch
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am
index ce2edb2..256af0b 100644
--- a/hw/xwin/Makefile.am
+++ b/hw/xwin/Makefile.am
@@ -175,27 +175,7 @@ install-exec-hook:
 EXTRA_DIST = \
 	$(xwinconfig_DATA) \
 	X.ico \
-	XWin.rc \
-	xlaunch/config.cc \
-	xlaunch/COPYING \
-	xlaunch/main.cc \
-	xlaunch/resources/dialog.rc \
-	xlaunch/resources/fullscreen.bmp \
-	xlaunch/resources/images.rc \
-	xlaunch/resources/multiwindow.bmp \
-	xlaunch/resources/nodecoration.bmp \
-	xlaunch/resources/resources.h \
-	xlaunch/resources/resources.rc \
-	xlaunch/resources/strings.rc \
-	xlaunch/resources/windowed.bmp \
-	xlaunch/window/dialog.cc \
-	xlaunch/window/dialog.h \
-	xlaunch/window/util.cc \
-	xlaunch/window/util.h \
-	xlaunch/window/window.cc \
-	xlaunch/window/window.h \
-	xlaunch/window/wizard.cc \
-	xlaunch/window/wizard.h
+	XWin.rc
 
 relink:
 	$(AM_V_at)rm -f XWin$(EXEEXT) && $(MAKE) XWin$(EXEEXT)
diff --git a/hw/xwin/xlaunch/COPYING b/hw/xwin/xlaunch/COPYING
deleted file mode 100755
index c7fa844..0000000
--- a/hw/xwin/xlaunch/COPYING
+++ /dev/null
@@ -1,25 +0,0 @@
-
- Copyright (c) 2005 Alexander Gottwald
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
- Except as contained in this notice, the name(s) of the above copyright
- holders shall not be used in advertising or otherwise to promote the sale,
- use or other dealings in this Software without prior written authorization.
-
diff --git a/hw/xwin/xlaunch/Makefile b/hw/xwin/xlaunch/Makefile
deleted file mode 100755
index f7cf923..0000000
--- a/hw/xwin/xlaunch/Makefile
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2005 Alexander Gottwald
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name(s) of the above copyright
-# holders shall not be used in advertising or otherwise to promote the sale,
-# use or other dealings in this Software without prior written authorization.
-#
-WINDRES=windres
-
-TARGET=mingw
-#DEBUG_FLAGS=-D_DEBUG
-
-OS_FLAGS_mingw=-mno-cygwin
-OS_FLAGS=$(OS_FLAGS_$(TARGET)) $(DEBUG_FLAGS)
-
-X11_DIR_$(TARGET)=/usr/X11R6
-X11_DIR_mingw=../../../../../exports
-X11_DIR=$(X11_DIR_$(TARGET))
-X11_INCLUDE=-I$(X11_DIR)/include
-X11_LIBDIR=-L$(X11_DIR)/lib
-X11_LIBS_$(TARGET)=-lX11
-X11_LIBS_mingw=-lX11 -lwsock32
-X11_LIBS=$(X11_LIBS_$(TARGET))
-
-PROGRAMFILES:=$(shell cygpath -u $(PROGRAMFILES))
-#MSXML_DIR=$(PROGRAMFILES)/MSXML 4.0
-MSXML_DIR=$(PROGRAMFILES)/Microsoft XML Parser SDK
-MSXML_INCLUDE="-I$(MSXML_DIR)/inc"
-MSXML_LIBDIR="-L$(MSXML_DIR)/lib"
-MSXML_LIBS=
-
-
-CXXFLAGS=-g $(OS_FLAGS) $(X11_INCLUDE) $(MSXML_INCLUDE)
-LDFLAGS=-mwindows $(X11_LIBDIR) $(MSXML_LIBDIR)
-LIBS=-lcomctl32 -lole32 -loleaut32 $(X11_LIBS) $(MSXML_LIBS)
-all:xlaunch.exe
-%.res: %.rc
-	$(WINDRES) -O coff -o $@ $<
-
-WINDOW_PARTS=window util dialog wizard
-WINDOW_OBJECTS=$(foreach file,$(WINDOW_PARTS),window/$(file).o) 
-
-RESOURCES_IMAGES=resources/multiwindow.bmp resources/fullscreen.bmp \
-	resources/windowed.bmp resources/nodecoration.bmp
-
-resources/resources.res: resources/resources.rc resources/resources.h \
-	resources/images.rc resources/dialog.rc resources/strings.rc \
-	$(RESOURCES_IMAGES)
-xlaunch.exe: $(WINDOW_OBJECTS) main.o config.o resources/resources.res
-	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
-
-
-window/dialog.o: window/dialog.cc window/dialog.h window/window.h window/util.h
-window/frame.o: window/frame.cc window/frame.h window/window.h
-window/util.o: window/util.cc window/util.h
-window/window.o: window/window.cc window/window.h window/util.h
-window/wizard.o: window/wizard.cc window/wizard.h window/dialog.h \
-  window/window.h window/util.h
-main.o: main.cc window/util.h window/wizard.h window/dialog.h \
-  window/window.h resources/resources.h config.h
-config.o: config.cc config.h
diff --git a/hw/xwin/xlaunch/config.cc b/hw/xwin/xlaunch/config.cc
deleted file mode 100644
index b6bf65a..0000000
--- a/hw/xwin/xlaunch/config.cc
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include "config.h"
-#include "window/util.h"
-#include <msxml2.h>
-#include <stdexcept>
-
-const CLSID CLSID_DOMDocument40 = {0x88d969c0,0xf192,0x11d4,0xa6,0x5f,0x00,0x40,0x96,0x32,0x51,0xe5};
-const CLSID CLSID_DOMDocument30 = {0xf5078f32,0xc551,0x11d3,0x89,0xb9,0x00,0x00,0xf8,0x1f,0xe2,0x21};
-const IID IID_IXMLDOMDocument2 = {0x2933BF95,0x7B36,0x11d2,0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60};
-
-#define HRCALL(x, msg) if (FAILED(x)) { throw std::runtime_error("OLE Error:" msg " failed"); };
-
-char *wcconvert(const wchar_t *wstr)
-{
-    int chars = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
-    if (chars == 0)
-	throw win32_error("WideCharToMultiByte");
-    char *mbstr = new char[chars];
-    chars = WideCharToMultiByte(CP_ACP, 0, wstr, -1, mbstr, chars, NULL, NULL);
-    if (chars == 0)
-	throw win32_error("WideCharToMultiByte");
-    return mbstr;
-}
-
-wchar_t *mbconvert(const char *mbstr)
-{
-    int chars = MultiByteToWideChar(CP_ACP, 0, mbstr, -1, NULL, 0);
-    if (chars == 0)
-	throw win32_error("MultiByteToWideChar");
-    wchar_t *wstr = new wchar_t[chars];
-    chars = MultiByteToWideChar(CP_ACP, 0, mbstr, -1, wstr, chars);
-    if (chars == 0)
-	throw win32_error("MultiByteToWideChar");
-    return wstr;
-}
-
-VARIANT VariantString(const char *filename)
-{
-
-    wchar_t *str = mbconvert(filename);
-
-    VARIANT var;
-    VariantInit(&var);
-    V_BSTR(&var) = SysAllocString(str);
-    V_VT(&var) = VT_BSTR;
-
-    delete [] str;
-    return var;
-}
-
-VARIANT VariantString(const wchar_t *str)
-{
-   VARIANT var;
-   VariantInit(&var);
-   V_BSTR(&var) = SysAllocString(str);
-   V_VT(&var) = VT_BSTR;
-   return var;
-}
-
-IXMLDOMDocument2 *CreateDocument()
-{
-    IXMLDOMDocument2 *doc = NULL;
-    
-    CoInitialize(NULL);
-
-    HRCALL(CoCreateInstance(CLSID_DOMDocument40, NULL, CLSCTX_INPROC_SERVER,
-                      IID_IXMLDOMDocument2, (void**)&doc), "CoCreateInstance");
-
-    try {
-      	HRCALL(doc->put_async(VARIANT_FALSE), "put_async");
-	HRCALL(doc->put_validateOnParse(VARIANT_FALSE), "put_validateOnParse");
-	HRCALL(doc->put_resolveExternals(VARIANT_FALSE), "put_resolveExternals");
-
-	IXMLDOMProcessingInstruction *pi = NULL;
-	IXMLDOMElement *root = NULL;
-     	BSTR xml = SysAllocString(L"xml");
-	BSTR ver = SysAllocString(L"version='1.0'");
-	HRCALL(doc->createProcessingInstruction(xml,ver, &pi), 
-		"createProcessingInstruction");
-	HRCALL(doc->appendChild(pi, NULL),
-		"appendChild");
-	pi->Release();
-	SysFreeString(xml);
-	SysFreeString(ver);
-
-	BSTR elemname = SysAllocString(L"XLaunch");
-	HRCALL(doc->createElement(elemname, &root), "createElement");
-	HRCALL(doc->appendChild(root, NULL), "appendChild");
-	SysFreeString(elemname);
-    } catch (...)
-    {
-	doc->Release();
-	throw;
-    }
-    return doc;
-}
-
-void setAttribute(IXMLDOMElement *elem, const wchar_t *name, const wchar_t *value)
-{
-    BSTR str = SysAllocString(name);
-    VARIANT var = VariantString(value);
-    HRCALL(elem->setAttribute(str, var), "setAttribute");
-    VariantClear(&var);
-    SysFreeString(str);
-}
-
-void setAttribute(IXMLDOMElement *elem, const wchar_t *name, const char *value)
-{
-    wchar_t *wstr = mbconvert(value);
-    setAttribute(elem, name, wstr);
-    delete [] wstr;
-    return;
-}
-
-void CConfig::Save(const char *filename)
-{
-    IXMLDOMDocument2 *doc = CreateDocument();
-    IXMLDOMElement *root = NULL;
-
-    HRCALL(doc->get_documentElement(&root), "get_documentElement");
-
-    switch (window)
-    {
-	case MultiWindow:
-	    setAttribute(root, L"WindowMode", L"MultiWindow");
-	    break;
-	case Fullscreen:
-	    setAttribute(root, L"WindowMode", L"Fullscreen");
-	    break;
-	default:
-	case Windowed:
-	    setAttribute(root, L"WindowMode", L"Windowed");
-	    break;
-	case Nodecoration:
-	    setAttribute(root, L"WindowMode", L"Nodecoration");
-	    break;
-    }
-    switch (client)
-    {
-	default:
-	case NoClient:
-	    setAttribute(root, L"ClientMode", L"NoClient");
-	    break;
-	case StartProgram:
-	    setAttribute(root, L"ClientMode", L"StartProgram");
-	    break;
-	case XDMCP:
-	    setAttribute(root, L"ClientMode", L"XDMCP");
-	    break;
-    }
-    setAttribute(root, L"LocalClient", local?L"True":L"False");
-    setAttribute(root, L"Display", display.c_str());
-    setAttribute(root, L"Program", program.c_str());
-    setAttribute(root, L"RemoteProtocol", protocol.c_str());
-    setAttribute(root, L"RemoteHost", host.c_str());
-    setAttribute(root, L"RemoteUser", user.c_str());
-    setAttribute(root, L"XDMCPHost", xdmcp_host.c_str());
-    setAttribute(root, L"XDMCPBroadcast", broadcast?L"True":L"False");
-    setAttribute(root, L"XDMCPIndirect", indirect?L"True":L"False");
-    setAttribute(root, L"Clipboard", clipboard?L"True":L"False");
-    setAttribute(root, L"ExtraParams", extra_params.c_str());
-
-    VARIANT var = VariantString(filename);
-    HRCALL(doc->save(var), "save");
-    VariantClear(&var);
-
-
-    root->Release();
-    doc->Release();
-}
-
-BOOL getAttribute(IXMLDOMElement *elem, const wchar_t *name, std::string &ret)
-{
-    VARIANT var;
-    HRCALL(elem->getAttribute((OLECHAR*)name, &var), "getAttribute"); 
-    if (V_VT(&var) != VT_NULL && V_VT(&var) == VT_BSTR)
-    {
-	char *str = wcconvert(V_BSTR(&var));
-	ret = str;
-	delete [] str;
-	return true;
-    }
-    return false;
-}
-
-BOOL getAttributeBool(IXMLDOMElement *elem, const wchar_t *name, bool &ret)
-{
-    std::string str;
-    if (getAttribute(elem, name, str))
-    {
-	if (str == "True")
-	    ret = true;
-	else
-	    ret = false;
-	return true;
-    }
-    return false;
-}
-
-
-void CConfig::Load(const char *filename)
-{
-    IXMLDOMDocument2 *doc = CreateDocument();
-    IXMLDOMElement *root = NULL;
-
-    VARIANT var = VariantString(filename);
-    VARIANT_BOOL status;
-    HRCALL(doc->load(var, &status), "load");
-    VariantClear(&var);
-
-    if (status == VARIANT_FALSE)
-    {
-	doc->Release();
-	return;
-    }
-
-    HRCALL(doc->get_documentElement(&root), "get_documentElement");
-
-    std::string windowMode;
-    std::string clientMode;
-
-    if (getAttribute(root, L"WindowMode", windowMode))
-    {
-	if (windowMode == "MultiWindow")
-	    window = MultiWindow;
-	else if (windowMode == "Fullscreen")
-	    window = Fullscreen;
-	else if (windowMode == "Windowed")
-	    window = Windowed;
-	else if (windowMode == "Nodecoration")
-	    window = Nodecoration;
-    }
-    if (getAttribute(root, L"ClientMode", clientMode))
-    {
-	if (clientMode == "NoClient")
-	    client = NoClient;
-	else if (clientMode == "StartProgram")
-	    client = StartProgram;
-	else if (clientMode == "XDMCP")
-	    client = XDMCP;
-    }
-    
-    getAttributeBool(root, L"LocalClient", local);
-    getAttribute(root, L"Display", display);
-    getAttribute(root, L"Program", program);
-    getAttribute(root, L"RemoteProtocol", protocol);
-    getAttribute(root, L"RemoteHost", host);
-    getAttribute(root, L"RemoteUser", user);
-    getAttribute(root, L"XDMCPHost", xdmcp_host);
-    getAttributeBool(root, L"XDMCPBroadcast", broadcast);
-    getAttributeBool(root, L"XDMCPIndirect", indirect);
-    getAttributeBool(root, L"Clipboard", clipboard);
-    getAttribute(root, L"ExtraParams", extra_params);
-    
-
-    doc->Release();
-}
-
diff --git a/hw/xwin/xlaunch/config.h b/hw/xwin/xlaunch/config.h
deleted file mode 100644
index f0aed3c..0000000
--- a/hw/xwin/xlaunch/config.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#ifndef __CONFIG_H__
-#define __CONFIG_H__
-
-#include <string>
-struct CConfig
-{
-    enum {MultiWindow, Fullscreen, Windowed, Nodecoration} window;
-    enum {NoClient, StartProgram, XDMCP} client;
-    bool local;
-    std::string display;
-    std::string protocol;
-    std::string program;
-    std::string host;
-    std::string user;
-    bool broadcast;
-    bool indirect;
-    std::string xdmcp_host;
-    bool clipboard;
-    std::string extra_params;
-#ifdef _DEBUG
-    CConfig() : window(MultiWindow), client(StartProgram), local(false), display("1"), 
-                protocol("Putty"), program("xterm"), host("lupus"), user("ago"),
-                broadcast(false), indirect(false), xdmcp_host("lupus"),
-                clipboard(true), extra_params() {};
-#else
-    CConfig() : window(MultiWindow), client(StartProgram), local(false), display("0"), 
-                protocol("Putty"), program("xterm"), host(""), user(""), 
-                broadcast(true), indirect(false), xdmcp_host(""),
-                clipboard(true), extra_params() {};
-#endif
-    void Load(const char* filename);
-    void Save(const char* filename);
-};
-
-#endif
diff --git a/hw/xwin/xlaunch/main.cc b/hw/xwin/xlaunch/main.cc
deleted file mode 100755
index 2247d3a..0000000
--- a/hw/xwin/xlaunch/main.cc
+++ /dev/null
@@ -1,700 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include "window/util.h"
-#include "window/wizard.h"
-#include "resources/resources.h"
-#include "config.h"
-#include <prsht.h>
-#include <commctrl.h>
-
-#include <stdexcept>
-
-#include <X11/Xlib.h>
-
-/// @brief Send WM_ENDSESSION to all program windows.
-/// This will shutdown the started xserver
-BOOL CALLBACK KillWindowsProc(HWND hwnd, LPARAM lParam)
-{
-    SendMessage(hwnd, WM_ENDSESSION, 0, 0);
-    return TRUE;
-}
-
-/// @brief Actual wizard implementation.
-/// This is based on generic CWizard but handles the special dialogs
-class CMyWizard : public CWizard 
-{
-    public:
-    private:
-	CConfig config; /// Storage for config options.
-    public:
-        /// @brief Constructor.
-        /// Set wizard pages.
-        CMyWizard() : CWizard() 
-        {
-            AddPage(IDD_DISPLAY, IDS_DISPLAY_TITLE, IDS_DISPLAY_SUBTITLE);
-            AddPage(IDD_CLIENTS, IDS_CLIENTS_TITLE, IDS_CLIENTS_SUBTITLE);
-            AddPage(IDD_PROGRAM, IDS_PROGRAM_TITLE, IDS_PROGRAM_SUBTITLE);
-            AddPage(IDD_XDMCP, IDS_XDMCP_TITLE, IDS_XDMCP_SUBTITLE);
-            //AddPage(IDD_FONTPATH, IDS_FONTPATH_TITLE, IDS_FONTPATH_SUBTITLE);
-            AddPage(IDD_CLIPBOARD, IDS_CLIPBOARD_TITLE, IDS_CLIPBOARD_SUBTITLE);
-            AddPage(IDD_FINISH, IDS_FINISH_TITLE, IDS_FINISH_SUBTITLE);
-        }
-
-	virtual void LoadConfig(const char *filename)
-	{
-	    try {
-		config.Load(filename);
-	    } catch (std::runtime_error &e)
-	    {
-		printf("Fehler: %s\n", e.what());
-	    }
-	}
-
-        /// @brief Handle the PSN_WIZNEXT message.
-        /// @param hwndDlg Handle to active page dialog.
-        /// @param index Index of current page.
-        /// @return TRUE if the message was handled. FALSE otherwise. 
-	virtual BOOL WizardNext(HWND hwndDlg, unsigned index)
-	{
-#ifdef _DEBUG
-	    printf("%s %d\n", __FUNCTION__, index);
-#endif
-	    switch (PageID(index))
-	    {
-		case IDD_DISPLAY:
-                    // Check for select window mode
-		    if (IsDlgButtonChecked(hwndDlg, IDC_MULTIWINDOW))
-			config.window = CConfig::MultiWindow;
-		    else if (IsDlgButtonChecked(hwndDlg, IDC_FULLSCREEN))
-			config.window = CConfig::Fullscreen;
-		    else if (IsDlgButtonChecked(hwndDlg, IDC_WINDOWED))
-			config.window = CConfig::Windowed;
-		    else if (IsDlgButtonChecked(hwndDlg, IDC_NODECORATION))
-			config.window = CConfig::Nodecoration;
-		    else
-		    {
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-			return TRUE;
-		    }
-                    // Get selected display number
-		    {
-			char buffer[512];
-			GetDlgItemText(hwndDlg, IDC_DISPLAY, buffer, 512);
-			buffer[511] = 0;
-			config.display = buffer;
-                    }
-                    // Check for valid input
-                    if (config.display.empty())
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-                    else
-                        SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_CLIENTS);
-		    return TRUE;
-		case IDD_CLIENTS:
-                    // Check for select client startup method
-		    if (IsDlgButtonChecked(hwndDlg, IDC_CLIENT))
-		    {
-			config.client = CConfig::StartProgram;
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_PROGRAM);
-		    } else if (IsDlgButtonChecked(hwndDlg, IDC_XDMCP))
-		    {
-			config.client = CConfig::XDMCP;
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_XDMCP);
-		    } else if (IsDlgButtonChecked(hwndDlg, IDC_CLIENT_NONE))
-		    {
-			config.client = CConfig::NoClient;
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_CLIPBOARD);
-		    } else
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-		    return TRUE;
-		case IDD_PROGRAM:
-                    // Check wether local or remote client should be started
-		    if (IsDlgButtonChecked(hwndDlg, IDC_CLIENT_LOCAL))
-			config.local = true;
-		    else if (IsDlgButtonChecked(hwndDlg, IDC_CLIENT_REMOTE))
-			config.local = false;
-		    else
-		    {
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-			return TRUE;
-		    }
-                    // Read program, user and host name
-		    {
-			char buffer[512];
-			GetDlgItemText(hwndDlg, IDC_CLIENT_USER, buffer, 512);
-			buffer[511] = 0;
-			config.user = buffer;
-			GetDlgItemText(hwndDlg, IDC_CLIENT_HOST, buffer, 512);
-			buffer[511] = 0;
-			config.host = buffer;
-			GetDlgItemText(hwndDlg, IDC_CLIENT_PROGRAM, buffer, 512);
-			buffer[511] = 0;
-			config.program = buffer;
-		    }
-                    // Check for valid input
-		    if (!config.local && (config.host.empty() || config.program.empty()))
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-		    else
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_CLIPBOARD);
-		    return TRUE;
-		case IDD_XDMCP:
-                    // Check for broadcast
-		    if (IsDlgButtonChecked(hwndDlg, IDC_XDMCP_BROADCAST))
-			config.broadcast = true;
-		    else if (IsDlgButtonChecked(hwndDlg, IDC_XDMCP_QUERY))
-			config.broadcast = false;
-		    else
-		    {
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-			return TRUE;
-		    }
-                    // Check for indirect mode
-		    if (IsDlgButtonChecked(hwndDlg, IDC_XDMCP_INDIRECT))
-			config.indirect = true;
-		    else
-			config.indirect = false;
-                    // Read hostname
-		    {
-			char buffer[512];
-			GetDlgItemText(hwndDlg, IDC_XDMCP_HOST, buffer, 512);
-			buffer[511] = 0;
-			config.xdmcp_host = buffer;
-		    }
-                    // Check for valid input
-		    if (!config.broadcast && config.xdmcp_host.empty())
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
-		    else	
-			SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_CLIPBOARD);
-		    return TRUE;
-                case IDD_CLIPBOARD:
-                    // check for clipboard
-                    if (IsDlgButtonChecked(hwndDlg, IDC_CLIPBOARD))
-                        config.clipboard = true;
-                    else
-                        config.clipboard = false;
-                    // read parameters
-		    {
-			char buffer[512];
-			GetDlgItemText(hwndDlg, IDC_EXTRA_PARAMS, buffer, 512);
-			buffer[511] = 0;
-			config.extra_params = buffer;
-		    }
-                    SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_FINISH);
-                    return TRUE;
-		default:
-		    break;
-	    }
-	    return FALSE;
-	}
-        /// @brief Handle PSN_WIZFINISH message.
-        /// @param hwndDlg Handle to active page dialog.
-        /// @param index Index of current page.
-        /// @return TRUE if the message was handled. FALSE otherwise. 
-	virtual BOOL WizardFinish(HWND hwndDlg, unsigned index)
-	{
-#ifdef _DEBUG
-	    printf("finish %d\n", index);
-#endif
-	    return FALSE;
-	}
-        /// @brief Handle PSN_WIZBACK message.
-        /// Basicly handles switching to proper page (skipping XDMCP or program page
-        /// if required).
-        /// @param hwndDlg Handle to active page dialog.
-        /// @param index Index of current page.
-        /// @return TRUE if the message was handled. FALSE otherwise. 
-	virtual BOOL WizardBack(HWND hwndDlg, unsigned index)
-	{
-	    switch (PageID(index))
-	    {
-		case IDD_PROGRAM:
-		case IDD_XDMCP:
-		    SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_CLIENTS);
-		    return TRUE;
-		case IDD_FONTPATH:
-                case IDD_CLIPBOARD: // temporary. fontpath is disabled
-		    switch (config.client)
-		    {
-			case CConfig::NoClient:	
-			    SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_CLIENTS);
-			    return TRUE;
-			case CConfig::StartProgram:
-			    SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_PROGRAM);
-			    return TRUE;
-			case CConfig::XDMCP:
-			    SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_XDMCP);
-			    return TRUE;
-		    }
-		    break;
-	    }
-	    return FALSE;
-	}
-        /// @brief Handle PSN_SETACTIVE message.
-        /// @param hwndDlg Handle to active page dialog.
-        /// @param index Index of current page.
-        /// @return TRUE if the message was handled. FALSE otherwise. 
-	virtual BOOL WizardActivate(HWND hwndDlg, unsigned index)
-	{
-#ifdef _DEBUG
-	    printf("%s %d\n", __FUNCTION__, index);
-#endif
-	    switch (PageID(index))
-	    {
-		case IDD_CLIENTS:
-                    // Enable or disable XDMCP radiobutton and text
-		    EnableWindow(GetDlgItem(hwndDlg, IDC_XDMCP), config.window != CConfig::MultiWindow);
-		    EnableWindow(GetDlgItem(hwndDlg, IDC_XDMCP_DESC), config.window != CConfig::MultiWindow);
-		    break;
-	    }
-	    return FALSE;
-	}
-    protected:
-        /// @brief Enable or disable the control for remote clients.
-        /// @param hwndDlg Handle to active page dialog.
-        /// @param state State of control group.
-	void EnableRemoteProgramGroup(HWND hwndDlg, BOOL state)
-	{
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_CLIENT_PROTOCOL), state);
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_CLIENT_HOST), state);
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_CLIENT_USER), state);
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_CLIENT_PROTOCOL_DESC), state);
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_CLIENT_HOST_DESC), state);
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_CLIENT_USER_DESC), state);
-	}
-        /// @brief Enable or disable the control for XDMCP connection.
-        /// @param hwndDlg Handle to active page dialog.
-        /// @param state State of control group.
-	void EnableXDMCPQueryGroup(HWND hwndDlg, BOOL state)
-	{
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_XDMCP_HOST), state);
-	    EnableWindow(GetDlgItem(hwndDlg, IDC_XDMCP_INDIRECT), state);
-	}
-        /// @brief Fill program box with default values.
-        /// @param hwndDlg Handle to active page dialog.
-	void FillProgramBox(HWND hwndDlg)
-	{
-	    HWND cbwnd = GetDlgItem(hwndDlg, IDC_CLIENT_PROGRAM);
-	    if (cbwnd == NULL)
-		return;
-	    SendMessage(cbwnd, CB_RESETCONTENT, 0, 0);
-	    SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) "xterm");
-	    SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) "startkde");
-	    SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) "gnome-session");
-	    SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) ".xinitrc");
-	    SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) "wmaker");
-	    SendMessage(cbwnd, CB_SETCURSEL, 0, 0);
-	}
-        /// @brief Fill protocol box with default values.
-        /// @param hwndDlg Handle to active page dialog.
-	void FillProtocolBox(HWND hwndDlg)
-	{
-	    HWND cbwnd = GetDlgItem(hwndDlg, IDC_CLIENT_PROTOCOL);
-	    if (cbwnd == NULL)
-		return;
-	    SendMessage(cbwnd, CB_RESETCONTENT, 0, 0);
-	    SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) "Putty");
-	    //SendMessage(cbwnd, CB_ADDSTRING, 0, (LPARAM) "OpenSSH");
-	    SendMessage(cbwnd, CB_SETCURSEL, 0, 0);
-	}
-	void ShowSaveDialog(HWND parent)
-	{
-	    char szTitle[512];
-	    char szFilter[512];
-	    char szFileTitle[512];
-	    char szFile[MAX_PATH];
-	    HINSTANCE hInst = GetModuleHandle(NULL);
-	    
-	    LoadString(hInst, IDS_SAVE_TITLE, szTitle, sizeof(szTitle));
-	    LoadString(hInst, IDS_SAVE_FILETITLE, szFileTitle, sizeof(szFileTitle));
-	    LoadString(hInst, IDS_SAVE_FILTER, szFilter, sizeof(szFilter));
-	    for (unsigned i=0; szFilter[i]; i++) 
-		if (szFilter[i] == '%') 
-		    szFilter[i] = '\0'; 
-
-	    strcpy(szFile, "config.xlaunch");
-
-	    OPENFILENAME ofn;
-	    memset(&ofn, 0, sizeof(OPENFILENAME));
-	    ofn.lStructSize = sizeof(OPENFILENAME); 
-	    ofn.hwndOwner = parent; 
-	    ofn.lpstrFilter = szFilter; 
-	    ofn.lpstrFile= szFile; 
-	    ofn.nMaxFile = sizeof(szFile)/ sizeof(*szFile); 
-	    ofn.lpstrFileTitle = szFileTitle; 
-	    ofn.nMaxFileTitle = sizeof(szFileTitle); 
-	    ofn.lpstrInitialDir = (LPSTR)NULL; 
-	    ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT; 
-	    ofn.lpstrTitle = szTitle;
-
-	    if (GetSaveFileName(&ofn))
-	    {
-		try {
-      		    config.Save(ofn.lpstrFile);
-		} catch (std::runtime_error &e)
-		{
-		    printf("Fehler: %s\n", e.what());
-		}
-	    } 
-	}
-    public:
-	   
-        /// @brief Handle messages fo the dialog pages.
-        /// @param hwndDlg Handle of active dialog.
-        /// @param uMsg Message code.
-        /// @param wParam Message parameter.
-        /// @param lParam Message parameter.
-        /// @param psp Handle to sheet paramters. 
-        virtual INT_PTR PageDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, PROPSHEETPAGE *psp)
-        {
-            HWND hwnd;
-            switch (uMsg)
-            {
-                case WM_INITDIALOG:
-                    switch (PageID(PageIndex(psp)))
-                    {
-                        case IDD_DISPLAY:
-                            // Init display dialog. Enable correct check buttons
-			    switch (config.window)
-			    {
-				default:
-				case CConfig::MultiWindow:
-				    CheckRadioButton(hwndDlg, IDC_MULTIWINDOW, IDC_NODECORATION, IDC_MULTIWINDOW);
-				    break;
-				case  CConfig::Fullscreen:
-				    CheckRadioButton(hwndDlg, IDC_MULTIWINDOW, IDC_NODECORATION, IDC_FULLSCREEN);
-				    break;
-				case  CConfig::Windowed:
-				    CheckRadioButton(hwndDlg, IDC_MULTIWINDOW, IDC_NODECORATION, IDC_WINDOWED);
-				    break;
-				case  CConfig::Nodecoration:
-				    CheckRadioButton(hwndDlg, IDC_MULTIWINDOW, IDC_NODECORATION, IDC_NODECORATION);
-				    break;
-			    }
-                            // Set display number
-                            SetDlgItemText(hwndDlg, IDC_DISPLAY, config.display.c_str());
-                            break;
-                        case IDD_CLIENTS:
-                            // Init client dialog. Enable correct check buttons
-			    switch (config.client)
-			    {
-				default:
-				case CConfig::NoClient:
-				    CheckRadioButton(hwndDlg, IDC_CLIENT_NONE, IDC_CLIENT, IDC_CLIENT_NONE);
-				    break;
-				case CConfig::StartProgram:
-				    CheckRadioButton(hwndDlg, IDC_CLIENT_NONE, IDC_CLIENT, IDC_CLIENT);
-				    break;
-				case CConfig::XDMCP:
-				    CheckRadioButton(hwndDlg, IDC_CLIENT_NONE, IDC_CLIENT, IDC_XDMCP);
-				    break;
-			    }
-                            break;
-			case IDD_PROGRAM:
-                            // Init program dialog. Check local and remote buttons 
-                            CheckRadioButton(hwndDlg, IDC_CLIENT_LOCAL, IDC_CLIENT_REMOTE, config.local?IDC_CLIENT_LOCAL:IDC_CLIENT_REMOTE);
-			    EnableRemoteProgramGroup(hwndDlg, config.local?FALSE:TRUE);
-                            // Fill combo boxes
-			    FillProgramBox(hwndDlg);
-			    FillProtocolBox(hwndDlg);
-                            // Set edit fields
-			    if (!config.program.empty())
-			       	SetDlgItemText(hwndDlg, IDC_CLIENT_PROGRAM, config.program.c_str());
-			    SetDlgItemText(hwndDlg, IDC_CLIENT_USER, config.user.c_str());
-			    SetDlgItemText(hwndDlg, IDC_CLIENT_HOST, config.host.c_str());
-			    break;
-			case IDD_XDMCP:
-                            // Init XDMCP dialog. Check broadcast and indirect button
-                            CheckRadioButton(hwndDlg, IDC_XDMCP_QUERY, IDC_XDMCP_BROADCAST, config.broadcast?IDC_XDMCP_BROADCAST:IDC_XDMCP_QUERY);
-                            CheckDlgButton(hwndDlg, IDC_XDMCP_INDIRECT, config.indirect?BST_CHECKED:BST_UNCHECKED);
-			    EnableXDMCPQueryGroup(hwndDlg, config.broadcast?FALSE:TRUE);
-                            // Set hostname
-			    SetDlgItemText(hwndDlg, IDC_XDMCP_HOST, config.xdmcp_host.c_str());
-			    break;
-                        case IDD_CLIPBOARD:
-                            CheckDlgButton(hwndDlg, IDC_CLIPBOARD, config.clipboard?BST_CHECKED:BST_UNCHECKED);
-                            SetDlgItemText(hwndDlg, IDC_EXTRA_PARAMS, config.extra_params.c_str());
-                            break;
-
-                    }
-                case WM_COMMAND:
-                    // Handle control messages
-                    switch (LOWORD(wParam))
-                    {
-                        // Handle clicks on images. Check proper radiobutton
-                        case IDC_MULTIWINDOW_IMG:
-                        case IDC_FULLSCREEN_IMG:
-                        case IDC_WINDOWED_IMG:
-                        case IDC_NODECORATION_IMG:
-                            CheckRadioButton(hwndDlg, IDC_MULTIWINDOW, IDC_NODECORATION, LOWORD(wParam)-4);
-                            SetFocus(GetDlgItem(hwndDlg, LOWORD(wParam)-4));
-                            break;
-                        // Disable unavailable controls 
-                        case IDC_CLIENT_REMOTE:
-                        case IDC_CLIENT_LOCAL:
-			    EnableRemoteProgramGroup(hwndDlg, LOWORD(wParam) == IDC_CLIENT_REMOTE);
-                            break;
-			case IDC_XDMCP_QUERY:
-			case IDC_XDMCP_BROADCAST:
-			    EnableXDMCPQueryGroup(hwndDlg, LOWORD(wParam) == IDC_XDMCP_QUERY);
-			    break;
-			case IDC_FINISH_SAVE:
-			    ShowSaveDialog(hwndDlg);
-			    break;
-                    }
-            }
-            // pass messages to parent
-            return CWizard::PageDispatch(hwndDlg, uMsg, wParam, lParam, psp);
-        }
-        
-        /// @brief Try to connect to server.
-        /// Repeat until successful, server died or maximum number of retries
-        /// reached.
-        Display *WaitForServer(HANDLE serverProcess)
-        {
-            int     ncycles  = 120;         /* # of cycles to wait */
-            int     cycles;                 /* Wait cycle count */
-            Display *xd;
-
-            for (cycles = 0; cycles < ncycles; cycles++) {
-                if ((xd = XOpenDisplay(NULL))) {
-                    return xd;
-                }
-                else {
-                    if (WaitForSingleObject(serverProcess, 1000) == WAIT_TIMEOUT)
-                        continue;
-                }
-            }
-            return NULL;
-        }
-               
-        /// @brief Do the actual start of Xming and clients
-	void StartUp()
-	{
-	    std::string buffer;
-	    std::string client;
-
-            // Construct display strings
-	    std::string display_id = ":" + config.display;
-	    std::string display = "localhost" + display_id + ":0";
-
-#ifdef _DEBUG
-            // Debug only: Switch to Xming installation directory
-	    SetCurrentDirectory("C:\\Programme\\Xming");
-#endif	    
-
-            // Build Xming commandline
-	    buffer = "Xming " + display_id + " ";
-	    switch (config.window)
-	    {
-		case CConfig::MultiWindow:
-		    buffer += "-multiwindow ";
-		    break;
-		case CConfig::Fullscreen:
-		    buffer += "-fullscreen ";
-		    break;
-		case CConfig::Nodecoration:
-		    buffer += "-nodecoration ";
-		    break;
-		default:
-		    break;
-	    }
-            // Add XDMCP parameter
-	    if (config.client == CConfig::XDMCP)
-	    {
-		if (config.broadcast)
-		    buffer += "-broadcast ";
-		else 
-		{
-		    if (config.indirect)
-			buffer += "-indirect ";
-		    else
-			buffer += "-query ";
-		    buffer += config.xdmcp_host;
-            buffer += " ";
-		}
-	    }
-            if (config.clipboard)
-                buffer += "-clipboard ";
-            if (!config.extra_params.empty())
-            {
-                buffer += config.extra_params;
-                buffer += " ";
-            }
-            
-            // Construct client commandline
-	    if (config.client == CConfig::StartProgram)
-	    {
-		if (!config.local)
-		{
-		    char cmdline[512];
-                    std::string host = config.host;
-                    if (!config.user.empty())
-                        host = config.user + "@" + config.host;
-		    if (config.protocol == "Putty")
-			snprintf(cmdline,512,"plink -X %s %s", 
-                                host.c_str(),config.program.c_str());
-		    else
-			snprintf(cmdline,512,"ssh -Y %s %s", 
-                                host.c_str(),config.program.c_str());
-		    client += cmdline;
-		} else
-		    client += config.program.c_str();
-	    }
-
-            // Prepare program startup
-     	    STARTUPINFO si, sic;
-	    PROCESS_INFORMATION pi, pic;
-	    HANDLE handles[2];
-	    DWORD hcount = 0; 
-            Display *dpy = NULL;
-
-	    ZeroMemory( &si, sizeof(si) );
-	    si.cb = sizeof(si);
-	    ZeroMemory( &pi, sizeof(pi) );
-	    ZeroMemory( &sic, sizeof(sic) );
-	    sic.cb = sizeof(sic);
-	    ZeroMemory( &pic, sizeof(pic) );
-
-	    // Start Xming process. 
-#ifdef _DEBUG
-	    printf("%s\n", buffer.c_str());
-#endif
-	    if( !CreateProcess( NULL, (CHAR*)buffer.c_str(), NULL, NULL, 
-                        FALSE, 0, NULL, NULL, &si, &pi )) 
-		throw win32_error("CreateProcess failed");
-	    handles[hcount++] = pi.hProcess;
-
-	    if (!client.empty())
-	    {
-                // Set DISPLAY variable
-		SetEnvironmentVariable("DISPLAY",display.c_str());
-
-                // Wait for server to startup
-                dpy = WaitForServer(pi.hProcess);
-                if (dpy == NULL)
-                {
-                    while (hcount--)
-                        TerminateProcess(handles[hcount], (DWORD)-1);
-		    throw std::runtime_error("Connection to server failed");
-                }
-                
-#ifdef _DEBUG
-		printf("%s\n", client.c_str());
-#endif
-
-                // Hide a console window 
-                // FIXME: This may make it impossible to enter the password
-		sic.dwFlags = STARTF_USESHOWWINDOW;
-		sic.wShowWindow = SW_HIDE;
-
-		// Start the child process. 
-		if( !CreateProcess( NULL, (CHAR*)client.c_str(), NULL, NULL,
-                            FALSE, 0, NULL, NULL, &sic, &pic )) 
-		{
-                    DWORD err = GetLastError();
-                    while (hcount--)
-                        TerminateProcess(handles[hcount], (DWORD)-1);
-		    throw win32_error("CreateProcess failed", err);
-		}
-		handles[hcount++] = pic.hProcess;
-	    }
-
-	    // Wait until any child process exits.
-	    DWORD ret = WaitForMultipleObjects(hcount, handles, FALSE, INFINITE );
-
-#ifdef _DEBUG
-	    printf("killing process!\n");
-#endif
-            // Check if Xming is still running
-	    DWORD exitcode;
-	    GetExitCodeProcess(pi.hProcess, &exitcode);
-	    unsigned counter = 0;
-	    while (exitcode == STILL_ACTIVE)
-	    {
-		if (++counter > 10)
-		    TerminateProcess(pi.hProcess, (DWORD)-1);
-		else
-		    // Shutdown Xming (the soft way!)
-		    EnumThreadWindows(pi.dwThreadId, KillWindowsProc, 0);
-		Sleep(500);
-		GetExitCodeProcess(pi.hProcess, &exitcode);
-	    }
-	    // Kill the client
-    	    TerminateProcess(pic.hProcess, (DWORD)-1);
-
-	    // Close process and thread handles. 
-	    CloseHandle( pi.hProcess );
-	    CloseHandle( pi.hThread );
-	    CloseHandle( pic.hProcess );
-	    CloseHandle( pic.hThread );
-	}
-};
-
-int main(int argc, char **argv)
-{
-    try {
-        InitCommonControls();
-        CMyWizard dialog;
-
-	bool skip_wizard = false;
-
-	for (int i = 1; i < argc; i++)
-	{
-	    if (argv[i] == NULL)
-		continue;
-	    
-	    std::string arg(argv[i]);
-	    if (arg == "-load" && i + 1 < argc)
-	    {
-		i++;
-		dialog.LoadConfig(argv[i]);
-		continue;
-	    }
-	    if (arg == "-run" && i + 1 < argc)
-	    {
-		i++;
-		dialog.LoadConfig(argv[i]);
-		skip_wizard = true;
-		continue;
-	    }
-	}
-
-	int ret = 0; 
-        if (skip_wizard || (ret =dialog.ShowModal()) != 0)
-	    dialog.StartUp();
-#ifdef _DEBUG
-	printf("return %d\n", ret);
-#endif
-	return 0;
-    } catch (std::runtime_error &e)
-    {
-        printf("Fehler: %s\n", e.what());
-        return -1;
-    }
-}
-
-
-
-
diff --git a/hw/xwin/xlaunch/resources/dialog.rc b/hw/xwin/xlaunch/resources/dialog.rc
deleted file mode 100755
index 8b00df4..0000000
--- a/hw/xwin/xlaunch/resources/dialog.rc
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include <windows.h>
-#include "resources.h"
-
-#ifndef STR_CAPTION_DISPLAY
-#include "strings.rc"
-#endif
-
-IDD_DISPLAY DIALOGEX 0, 0, 317, 143
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTERMOUSE
-CAPTION STR_CAPTION_DISPLAY
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
-    AUTORADIOBUTTON STR_MULTIWINDOW,IDC_MULTIWINDOW,7,25,70,24,BS_MULTILINE|BS_TOP
-    AUTORADIOBUTTON STR_FULLSCREEN,IDC_FULLSCREEN,157,25,70,24,BS_MULTILINE|BS_TOP
-    AUTORADIOBUTTON STR_WINDOWED,IDC_WINDOWED,7,75,70,24,BS_MULTILINE|BS_TOP
-    AUTORADIOBUTTON STR_NODECORATION,IDC_NODECORATION,157,75,70,24,BS_MULTILINE|BS_TOP
-
-    CONTROL         "IMG_MULTIWINDOW",IDC_MULTIWINDOW_IMG,"Static",SS_BITMAP | SS_NOTIFY,80,10,0,0
-    CONTROL         "IMG_FULLSCREEN",IDC_FULLSCREEN_IMG,"Static",SS_BITMAP | SS_NOTIFY,230,10,0,0
-    CONTROL         "IMG_WINDOWED",IDC_WINDOWED_IMG,"Static",SS_BITMAP | SS_NOTIFY,80,60,0,0
-    CONTROL         "IMG_NODECORATION",IDC_NODECORATION_IMG,"Static",SS_BITMAP | SS_NOTIFY,230,60,0,0
-
-    LTEXT           STR_DISPLAY_DESC,IDC_DISPLAY_DESC,7,120,64,12
-    EDITTEXT        IDC_DISPLAY,80,118,67,12,ES_NUMBER
-END
-
-IDD_CLIENTS DIALOGEX 0, 0, 317, 143
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTERMOUSE
-CAPTION STR_CAPTION_CLIENTS
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
-    AUTORADIOBUTTON STR_CLIENT_NONE,IDC_CLIENT_NONE,7,14,300,10
-    AUTORADIOBUTTON STR_CLIENT,IDC_CLIENT,7,56,300,10
-    AUTORADIOBUTTON STR_XDMCP,IDC_XDMCP,7,98,300,10
-
-    LTEXT           STR_CLIENT_NONE_DESC,IDC_CLIENT_NONE_DESC,19,28,280,27
-    LTEXT           STR_CLIENT_DESC,IDC_CLIENT_DESC,19,70,280,27
-    LTEXT           STR_XDMCP_DESC,IDC_XDMCP_DESC,19,112,280,27
-END
-
-IDD_PROGRAM DIALOGEX 0, 0, 317, 143
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTERMOUSE
-CAPTION STR_CAPTION_PROGRAM
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
-    LTEXT           STR_CLIENT_PROGRAM_DESC,IDC_CLIENT_PROGRAM_DESC,7,14,64,10
-    COMBOBOX        IDC_CLIENT_PROGRAM,70,12,64,54,CBS_DROPDOWN | WS_VSCROLL
-
-    AUTORADIOBUTTON STR_CLIENT_LOCAL,IDC_CLIENT_LOCAL,7,28,300,10
-    AUTORADIOBUTTON STR_CLIENT_REMOTE,IDC_CLIENT_REMOTE,7,42,300,10
-    
-    LTEXT           STR_CLIENT_PROTOCOL_DESC,IDC_CLIENT_PROTOCOL_DESC,19,56,70,10
-    COMBOBOX        IDC_CLIENT_PROTOCOL,100,54,64,54,CBS_DROPDOWNLIST | WS_VSCROLL
-    
-    LTEXT           STR_CLIENT_HOST_DESC,IDC_CLIENT_HOST_DESC,19,70,70,10
-    LTEXT           STR_CLIENT_USER_DESC,IDC_CLIENT_USER_DESC,19,84,70,10
-    EDITTEXT        IDC_CLIENT_HOST,100,68,64,12
-    EDITTEXT        IDC_CLIENT_USER,100,82,64,12
-END
-
-IDD_XDMCP DIALOGEX 0, 0, 317, 143
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTERMOUSE
-CAPTION STR_CAPTION_XDMCP
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
-    AUTORADIOBUTTON STR_XDMCP_QUERY, IDC_XDMCP_QUERY,7,14,64,10
-    EDITTEXT        IDC_XDMCP_HOST,78,12,64,12
-    AUTOCHECKBOX    STR_XDMCP_INDIRECT,IDC_XDMCP_INDIRECT,19,28,280,10
-    AUTORADIOBUTTON STR_XDMCP_BROADCAST, IDC_XDMCP_BROADCAST,7,42,300,10
-    LTEXT           STR_XDMCP_QUERY_DESC,IDC_XDMCP_QUERY_DESC,7,56,300,42
-END
-
-IDD_CLIPBOARD DIALOGEX 0, 0, 317, 143
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTERMOUSE
-CAPTION STR_CAPTION_CLIPBOARD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
-    AUTOCHECKBOX    STR_CLIPBOARD,IDC_CLIPBOARD,7,14,300,10
-    LTEXT           STR_CLIPBOARD_DESC,IDC_CLIPBOARD_DESC,19,28,280,27
-
-    LTEXT           STR_EXTRA_PARAMS_DESC,IDC_EXTRA_PARAMS_DESC,7,56,280,10
-    EDITTEXT        IDC_EXTRA_PARAMS,7,70,128,12
-END
-
-IDD_FINISH DIALOGEX 0, 0, 317, 143
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTERMOUSE
-CAPTION STR_CAPTION_FINISH
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
-    LTEXT           STR_FINISH_DESC,IDC_FINISH_DESC,7,14,300,28
-    LTEXT           STR_FINISH_SAVE_DESC,IDC_FINISH_SAVE_DESC,7,56,300,12
-    PUSHBUTTON      STR_FINISH_SAVE,IDC_FINISH_SAVE,7,68,75,14 
-END
diff --git a/hw/xwin/xlaunch/resources/fullscreen.bmp b/hw/xwin/xlaunch/resources/fullscreen.bmp
deleted file mode 100755
index 0d051f0..0000000
Binary files a/hw/xwin/xlaunch/resources/fullscreen.bmp and /dev/null differ
diff --git a/hw/xwin/xlaunch/resources/images.rc b/hw/xwin/xlaunch/resources/images.rc
deleted file mode 100755
index 2eac53c..0000000
--- a/hw/xwin/xlaunch/resources/images.rc
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-IMG_MULTIWINDOW BITMAP "resources\\multiwindow.bmp"
-IMG_WINDOWED BITMAP "resources\\windowed.bmp"
-IMG_FULLSCREEN BITMAP "resources\\fullscreen.bmp"
-IMG_NODECORATION BITMAP "resources\\nodecoration.bmp"
diff --git a/hw/xwin/xlaunch/resources/multiwindow.bmp b/hw/xwin/xlaunch/resources/multiwindow.bmp
deleted file mode 100755
index 0755c87..0000000
Binary files a/hw/xwin/xlaunch/resources/multiwindow.bmp and /dev/null differ
diff --git a/hw/xwin/xlaunch/resources/nodecoration.bmp b/hw/xwin/xlaunch/resources/nodecoration.bmp
deleted file mode 100755
index e9e1ce6..0000000
Binary files a/hw/xwin/xlaunch/resources/nodecoration.bmp and /dev/null differ
diff --git a/hw/xwin/xlaunch/resources/resources.h b/hw/xwin/xlaunch/resources/resources.h
deleted file mode 100644
index 4700051..0000000
--- a/hw/xwin/xlaunch/resources/resources.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-
-#define IDC_STATIC -1
-
-#define IDD_WELCOME             100
-#define IDD_FINISH              101
-#define IDD_DISPLAY             102
-#define IDD_CLIENTS             103
-#define IDD_PROGRAM             104
-#define IDD_XDMCP               105
-#define IDD_FONTPATH            106
-#define IDD_CLIPBOARD           107
-
-#define IDS_DISPLAY_TITLE       300
-#define IDS_DISPLAY_SUBTITLE    301
-#define IDS_CLIENTS_TITLE       302
-#define IDS_CLIENTS_SUBTITLE    303
-#define IDS_PROGRAM_TITLE       304
-#define IDS_PROGRAM_SUBTITLE    305
-#define IDS_XDMCP_TITLE         306
-#define IDS_XDMCP_SUBTITLE      307
-#define IDS_FONTPATH_TITLE      308
-#define IDS_FONTPATH_SUBTITLE   309
-#define IDS_FINISH_TITLE        310
-#define IDS_FINISH_SUBTITLE     311
-#define IDS_CLIPBOARD_TITLE     312
-#define IDS_CLIPBOARD_SUBTITLE  313
-#define IDS_SAVE_TITLE          320
-#define IDS_SAVE_FILETITLE      321
-#define IDS_SAVE_FILTER         322
-                
-#define IDC_MULTIWINDOW         200
-#define IDC_WINDOWED            201
-#define IDC_FULLSCREEN          202
-#define IDC_NODECORATION        203
-#define IDC_MULTIWINDOW_IMG     204
-#define IDC_WINDOWED_IMG        205
-#define IDC_FULLSCREEN_IMG      206
-#define IDC_NODECORATION_IMG    207
-#define IDC_DISPLAY             208
-#define IDC_DISPLAY_DESC        209
-
-#define IDC_CLIENT_NONE         210
-#define IDC_XDMCP               211
-#define IDC_CLIENT              212
-#define IDC_CLIENT_LOCAL        213
-#define IDC_CLIENT_REMOTE       214
-#define IDC_CLIENT_HOST         215
-#define IDC_CLIENT_USER         216
-#define IDC_CLIENT_PROTOCOL     217
-#define IDC_CLIENT_CONFIGURE    218
-#define IDC_CLIENT_PROGRAM      219
-#define IDC_XDMCP_QUERY         220
-#define IDC_XDMCP_BROADCAST     221
-#define IDC_XDMCP_INDIRECT      222
-#define IDC_XDMCP_HOST          223
-#define IDC_CLIENT_NONE_DESC    224
-#define IDC_XDMCP_DESC          225
-#define IDC_CLIENT_DESC         226
-#define IDC_XDMCP_QUERY_DESC    227
-#define IDC_CLIENT_PROGRAM_DESC 228
-#define IDC_CLIENT_HOST_DESC    229
-#define IDC_CLIENT_USER_DESC    230
-#define IDC_CLIENT_PROTOCOL_DESC 231
-
-#define IDC_FONTPATH_DESC        240
-
-#define IDC_FINISH_DESC		 250
-#define IDC_FINISH_SAVE		 251
-#define IDC_FINISH_SAVE_DESC     252
-
-#define IDC_CLIPBOARD            260
-#define IDC_CLIPBOARD_DESC       261
-#define IDC_EXTRA_PARAMS         262
-#define IDC_EXTRA_PARAMS_DESC    263
diff --git a/hw/xwin/xlaunch/resources/resources.rc b/hw/xwin/xlaunch/resources/resources.rc
deleted file mode 100755
index 07fd52f..0000000
--- a/hw/xwin/xlaunch/resources/resources.rc
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include <windows.h>
-
-#include "resources.h"
-#include "images.rc"
-#include "dialog.rc"
diff --git a/hw/xwin/xlaunch/resources/strings.rc b/hw/xwin/xlaunch/resources/strings.rc
deleted file mode 100644
index 5a9cd28..0000000
--- a/hw/xwin/xlaunch/resources/strings.rc
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-
-#define STR_CAPTION_DISPLAY         "Display settings"
-#define STR_MULTIWINDOW             "Multiple windows"
-#define STR_FULLSCREEN              "Fullscreen"
-#define STR_WINDOWED                "One large window"
-#define STR_NODECORATION            "One window without titlebar"
-#define STR_DISPLAY_DESC            "Display number"
-
-#define STR_CAPTION_CLIENTS         "Client startup"
-#define STR_CLIENT_NONE             "Start no client"
-#define STR_CLIENT_NONE_DESC		"This will just start the xserver. You will be able to start local clients later."
-#define STR_CLIENT					"Start a program"
-#define STR_CLIENT_DESC				"This will start a local or remote program which will connect to the xserver. You will be able to start local clients later too. Remote programs are started using SSH."
-#define STR_XDMCP					"Open session via XDMCP"
-#define STR_XDMCP_DESC				"This will start a remote XDMCP session. Starting local clients later is limited. This option is not available with the ""Multiple windows"" mode."
-
-#define STR_CAPTION_PROGRAM         "Start program"
-#define STR_CLIENT_PROGRAM_DESC     "Start program"
-#define STR_CLIENT_LOCAL            "Start program on this computer"
-#define STR_CLIENT_REMOTE           "Start program on remote computer"
-#define STR_CLIENT_PROTOCOL_DESC    "Connect using"
-#define STR_CLIENT_HOST_DESC        "Connect to computer"
-#define STR_CLIENT_USER_DESC        "Login as user"
-
-
-#define STR_CAPTION_XDMCP           "XDMCP settings"
-#define STR_XDMCP_QUERY             "Connect to host"
-#define STR_XDMCP_INDIRECT          "Use indirect connect"
-#define STR_XDMCP_BROADCAST         "Search for hosts (broadcast)"
-#define STR_XDMCP_QUERY_DESC        "Some XDMCP servers must be configured to allow remote connections. Please check the documentation about configuring XDMCP servers."
-
-
-#define STR_CAPTION_FONTPATH        "Fontpath settings"
-
-#define STR_CAPTION_CLIPBOARD       "Clipboard settings"
-#define STR_CLIPBOARD               "Clipboard"
-#define STR_CLIPBOARD_DESC          "Start the integrated clipboard manager"
-#define STR_EXTRA_PARAMS_DESC       "Additional parameters for Xming"
-
-#define STR_CAPTION_FINISH          "Finish configuration"
-#define STR_FINISH_DESC	            "Configuration is complete. Clish Finish to start Xming."
-#define STR_FINISH_SAVE_DESC        "You may also save the configuration for later use."
-#define STR_FINISH_SAVE	            "Save configuration"
-
-#define STR_DISPLAY_TITLE           "Select display settings"
-#define STR_DISPLAY_SUBTITLE        "Choose how Xming display programs"
-#define STR_CLIENTS_TITLE           "Select how to start clients"
-#define STR_CLIENTS_SUBTITLE        ""
-#define STR_PROGRAM_TITLE           "Specify the program to start"
-#define STR_PROGRAM_SUBTITLE        ""
-#define STR_XDMCP_TITLE             "Configure a remote XDMCP connection"
-#define STR_XDMCP_SUBTITLE          ""
-#define STR_FONTPATH_TITLE          "Define font locations"
-#define STR_FONTPATH_SUBTITLE       ""
-#define STR_FINISH_TITLE            "Configuration complete"
-#define STR_FINISH_SUBTITLE         ""
-#define STR_CLIPBOARD_TITLE         "Clipboard settings"
-#define STR_CLIPBOARD_SUBTITLE      ""
-
-#define STR_SAVE_TITLE              "Save configuration"
-#define STR_SAVE_FILETITLE          "Filename"
-#define STR_SAVE_FILTER             "Xlaunch Files (*.xlaunch)%*.xlaunch%%"
-
-STRINGTABLE
-BEGIN
-    IDS_DISPLAY_TITLE       STR_DISPLAY_TITLE       
-    IDS_DISPLAY_SUBTITLE    STR_DISPLAY_SUBTITLE    
-    IDS_CLIENTS_TITLE       STR_CLIENTS_TITLE       
-    IDS_CLIENTS_SUBTITLE    STR_CLIENTS_SUBTITLE    
-    IDS_PROGRAM_TITLE       STR_PROGRAM_TITLE       
-    IDS_PROGRAM_SUBTITLE    STR_PROGRAM_SUBTITLE    
-    IDS_XDMCP_TITLE         STR_XDMCP_TITLE         
-    IDS_XDMCP_SUBTITLE      STR_XDMCP_SUBTITLE      
-    IDS_FONTPATH_TITLE      STR_FONTPATH_TITLE      
-    IDS_FONTPATH_SUBTITLE   STR_FONTPATH_SUBTITLE   
-    IDS_FINISH_TITLE        STR_FINISH_TITLE      
-    IDS_FINISH_SUBTITLE     STR_FINISH_SUBTITLE   
-    IDS_CLIPBOARD_TITLE     STR_CLIPBOARD_TITLE      
-    IDS_CLIPBOARD_SUBTITLE  STR_CLIPBOARD_SUBTITLE   
-    IDS_SAVE_TITLE	    STR_SAVE_TITLE
-    IDS_SAVE_FILETITLE      STR_SAVE_FILETITLE
-    IDS_SAVE_FILTER         STR_SAVE_FILTER
-END
diff --git a/hw/xwin/xlaunch/resources/windowed.bmp b/hw/xwin/xlaunch/resources/windowed.bmp
deleted file mode 100755
index 9eff2bf..0000000
Binary files a/hw/xwin/xlaunch/resources/windowed.bmp and /dev/null differ
diff --git a/hw/xwin/xlaunch/window/dialog.cc b/hw/xwin/xlaunch/window/dialog.cc
deleted file mode 100755
index 76e5c35..0000000
--- a/hw/xwin/xlaunch/window/dialog.cc
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include <stdio.h>
-#include "dialog.h"
-#include "util.h"
-
-CBaseDialog::CBaseDialog() : CWindow(""), result(0)
-{
-}
-
-CDialog::CDialog(const char *res) : CBaseDialog(), resourcename(res) 
-{
-}
-
-HWND CDialog::CreateWindowHandle()
-{
-    HWND ret = CreateDialog(
-            GetModuleHandle(NULL),
-            resourcename.c_str(),
-            NULL,
-            DialogProc);
-    if (ret == NULL)
-        throw win32_error("CreateDialog failed");
-    return ret;
-}
-
-INT_PTR CALLBACK CBaseDialog::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    MessageDebug::debug(hwndDlg, uMsg, wParam, lParam, __FUNCTION__);
-	CBaseDialog* dialog = (CDialog*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
-	if (dialog != NULL)
-	    return dialog->DlgDispatch(hwndDlg, uMsg, wParam, lParam);
-    return FALSE;
-}
-
-INT_PTR CBaseDialog::DlgDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    switch (uMsg)
-    {
-        case WM_COMMAND:
-            switch (LOWORD(wParam))
-            {
-                case IDOK:
-                case IDCANCEL:
-                    result = wParam;
-                    EndDialog(hwndDlg, wParam);
-                    DestroyWindow(hwndDlg);
-                    return TRUE;
-            }
-            break;
-    }
-    return FALSE;
-}
-
-INT_PTR CDialog::DlgDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    return CBaseDialog::DlgDispatch(hwndDlg, uMsg, wParam, lParam);
-}
-
-int CBaseDialog::Execute()
-{
-    return CWindow::ShowModal();
-}
diff --git a/hw/xwin/xlaunch/window/dialog.h b/hw/xwin/xlaunch/window/dialog.h
deleted file mode 100644
index 073394b..0000000
--- a/hw/xwin/xlaunch/window/dialog.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#ifndef __DIALOG_H__
-#define __DIALOG_H__
-
-#include "window.h"
-class CBaseDialog : public CWindow
-{
-    private:
-        int result;
-    protected:
-        static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-        virtual INT_PTR DlgDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-    public:
-        CBaseDialog();
-        int Execute();
-};
-
-class CDialog : public CBaseDialog
-{
-    private:
-        std::string resourcename;
-    protected:
-        virtual INT_PTR DlgDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-        virtual HWND CreateWindowHandle();
-    public:
-        CDialog(const char *res);
-};
-
-
-#endif
diff --git a/hw/xwin/xlaunch/window/util.cc b/hw/xwin/xlaunch/window/util.cc
deleted file mode 100644
index fb7e872..0000000
--- a/hw/xwin/xlaunch/window/util.cc
+++ /dev/null
@@ -1,1112 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include "util.h"
-
-std::string win32_error::message(DWORD errorcode)
-{
-    LPVOID lpMsgBuf;
-    if (!FormatMessage( 
-                FORMAT_MESSAGE_ALLOCATE_BUFFER | 
-                FORMAT_MESSAGE_FROM_SYSTEM | 
-                FORMAT_MESSAGE_IGNORE_INSERTS,
-                NULL,
-                errorcode,
-                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
-                (LPTSTR) &lpMsgBuf,
-                0,
-                NULL ))
-    {
-        return "Unknown error in FormatMessage";
-    }
-
-    std::string ret((LPCTSTR)lpMsgBuf);
-    LocalFree( lpMsgBuf );
-    return ret;
-}
-
-void MessageDebug::debug(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, const char *prefix)
-{
-#ifdef _DEBUG
-    static const char *psn_notify[] = {
-        "PSN_SETACTIVE",
-        "PSN_KILLACTIVE",
-        "PSN_APPLY",
-        "PSN_RESET",
-        NULL,
-        "PSN_HELP",
-        "PSN_WIZBACK",
-        "PSN_WIZNEXT",
-        "PSN_WIZFINISH",
-        "PSN_QUERYCANCEL" };
-    if (uMsg == WM_NOTIFY)
-    {
-        LPNMHDR pnmh = (LPNMHDR)lParam;
-        int psn_index = -(int)pnmh->code - 200;
-        if (psn_index >= 0 && psn_index < 10 && psn_notify[psn_index])
-            printf("%s: %08x %04x WM_NOTIFY (%s)\n", prefix, hwnd, wParam, psn_notify[psn_index]);
-        else if (pnmh->code < NOTIFY_NAMES_LEN && notify_names[pnmh->code])
-            printf("%s: %08x %04x WM_NOTIFY (%s)\n", prefix, hwnd, wParam, notify_names[pnmh->code]);
-        else
-            printf("%s: %08x %04x WM_NOTIFY (%u)\n", prefix, hwnd, wParam, pnmh->code);
-    }   
-    else if (uMsg >= MESSAGE_NAMES_LEN)
-        if (uMsg >= WM_USER)
-            printf("%s: %08x %04x %08x WM_USER + %d\n", prefix, hwnd, wParam, lParam, uMsg - WM_USER); 
-        else
-            printf("%s: %08x %04x %08x %d\n", prefix, hwnd, wParam, lParam, uMsg);
-    else if (uMsg >= 0 && uMsg < MESSAGE_NAMES_LEN && message_names[uMsg])
-        printf("%s: %08x %04x %08x %s\n", prefix, hwnd, wParam, lParam, message_names[uMsg]);
-#endif
-}
-
-
-const char * MessageDebug::message_names[MESSAGE_NAMES_LEN] = {
-	"WM_NULL",
-	"WM_CREATE",
-	"WM_DESTROY",
-	"WM_MOVE",
-	"4",
-	"WM_SIZE",
-	"WM_ACTIVATE",
-	"WM_SETFOCUS",
-	"WM_KILLFOCUS",
-	"9",
-	"WM_ENABLE",
-	"WM_SETREDRAW",
-	"WM_SETTEXT",
-	"WM_GETTEXT",
-	"WM_GETTEXTLENGTH",
-	"WM_PAINT",
-	"WM_CLOSE",
-	"WM_QUERYENDSESSION",
-	"WM_QUIT",
-	"WM_QUERYOPEN",
-	"WM_ERASEBKGND",
-	"WM_SYSCOLORCHANGE",
-	"WM_ENDSESSION",
-	"23",
-	"WM_SHOWWINDOW",
-	"25",
-	"WM_WININICHANGE",
-	"WM_DEVMODECHANGE",
-	"WM_ACTIVATEAPP",
-	"WM_FONTCHANGE",
-	"WM_TIMECHANGE",
-	"WM_CANCELMODE",
-	NULL /* WM_SETCURSOR */,
-	"WM_MOUSEACTIVATE",
-	"WM_CHILDACTIVATE",
-	"WM_QUEUESYNC",
-	"WM_GETMINMAXINFO",
-	"37",
-	"WM_PAINTICON",
-	"WM_ICONERASEBKGND",
-	"WM_NEXTDLGCTL",
-	"41",
-	"WM_SPOOLERSTATUS",
-	"WM_DRAWITEM",
-	"WM_MEASUREITEM",
-	"WM_DELETEITEM",
-	"WM_VKEYTOITEM",
-	"WM_CHARTOITEM",
-	"WM_SETFONT",
-	"WM_GETFONT",
-	"WM_SETHOTKEY",
-	"WM_GETHOTKEY",
-	"52",
-	"53",
-	"54",
-	"WM_QUERYDRAGICON",
-	"56",
-	"WM_COMPAREITEM",
-	"58",
-	"59",
-	"60",
-	"61",
-	"62",
-	"63",
-	"64",
-	"WM_COMPACTING",
-	"66",
-	"67",
-	"WM_COMMNOTIFY",
-	"69",
-	"WM_WINDOWPOSCHANGING",
-	"WM_WINDOWPOSCHANGED",
-	"WM_POWER",
-	"73",
-	"WM_COPYDATA",
-	"WM_CANCELJOURNAL",
-	"76",
-	"77",
-	"WM_NOTIFY",
-	"79",
-	"WM_INPUTLANGCHANGEREQUEST",
-	"WM_INPUTLANGCHANGE",
-	"WM_TCARD",
-	"WM_HELP",
-	"WM_USERCHANGED",
-	"WM_NOTIFYFORMAT",
-	"86",
-	"87",
-	"88",
-	"89",
-	"90",
-	"91",
-	"92",
-	"93",
-	"94",
-	"95",
-	"96",
-	"97",
-	"98",
-	"99",
-	"100",
-	"101",
-	"102",
-	"103",
-	"104",
-	"105",
-	"106",
-	"107",
-	"108",
-	"109",
-	"110",
-	"111",
-	"112",
-	"113",
-	"114",
-	"115",
-	"116",
-	"117",
-	"118",
-	"119",
-	"120",
-	"121",
-	"122",
-	"WM_CONTEXTMENU",
-	"WM_STYLECHANGING",
-	"WM_STYLECHANGED",
-	"WM_DISPLAYCHANGE",
-	"WM_GETICON",
-	"WM_SETICON",
-	"WM_NCCREATE",
-	"WM_NCDESTROY",
-	"WM_NCCALCSIZE",
-	NULL /* WM_NCHITTEST */,
-	"WM_NCPAINT",
-	"WM_NCACTIVATE",
-	"WM_GETDLGCODE",
-	"WM_SYNCPAINT",
-	"137",
-	"138",
-	"139",
-	"140",
-	"141",
-	"142",
-	"143",
-	"144",
-	"145",
-	"146",
-	"147",
-	"148",
-	"149",
-	"150",
-	"151",
-	"152",
-	"153",
-	"154",
-	"155",
-	"156",
-	"157",
-	"158",
-	"159",
-	NULL /* WM_NCMOUSEMOVE */,
-	"WM_NCLBUTTONDOWN",
-	"WM_NCLBUTTONUP",
-	"WM_NCLBUTTONDBLCLK",
-	"WM_NCRBUTTONDOWN",
-	"WM_NCRBUTTONUP",
-	"WM_NCRBUTTONDBLCLK",
-	"WM_NCMBUTTONDOWN",
-	"WM_NCMBUTTONUP",
-	"WM_NCMBUTTONDBLCLK",
-	"170",
-	"171",
-	"172",
-	"173",
-	"174",
-	"175",
-	"176",
-	"177",
-	"178",
-	"179",
-	"180",
-	"181",
-	"182",
-	"183",
-	"184",
-	"185",
-	"186",
-	"187",
-	"188",
-	"189",
-	"190",
-	"191",
-	"192",
-	"193",
-	"194",
-	"195",
-	"196",
-	"197",
-	"198",
-	"199",
-	"200",
-	"201",
-	"202",
-	"203",
-	"204",
-	"205",
-	"206",
-	"207",
-	"208",
-	"209",
-	"210",
-	"211",
-	"212",
-	"213",
-	"214",
-	"215",
-	"216",
-	"217",
-	"218",
-	"219",
-	"220",
-	"221",
-	"222",
-	"223",
-	"224",
-	"225",
-	"226",
-	"227",
-	"228",
-	"229",
-	"230",
-	"231",
-	"232",
-	"233",
-	"234",
-	"235",
-	"236",
-	"237",
-	"238",
-	"239",
-	"240",
-	"241",
-	"242",
-	"243",
-	"244",
-	"245",
-	"246",
-	"247",
-	"248",
-	"249",
-	"250",
-	"251",
-	"252",
-	"253",
-	"254",
-	"255",
-	"WM_KEYDOWN",
-	"WM_KEYUP",
-	"WM_CHAR",
-	"WM_DEADCHAR",
-	"WM_SYSKEYDOWN",
-	"WM_SYSKEYUP",
-	"WM_SYSCHAR",
-	"WM_SYSDEADCHAR",
-	"WM_CONVERTREQUESTEX",
-	"265",
-	"266",
-	"267",
-	"268",
-	"WM_IME_STARTCOMPOSITION",
-	"WM_IME_ENDCOMPOSITION",
-	"WM_IME_KEYLAST",
-	"WM_INITDIALOG",
-	"WM_COMMAND",
-	"WM_SYSCOMMAND",
-	NULL /* WM_TIMER */,
-	"WM_HSCROLL",
-	"WM_VSCROLL",
-	"WM_INITMENU",
-	"WM_INITMENUPOPUP",
-	"280",
-	"281",
-	"282",
-	"283",
-	"284",
-	"285",
-	"286",
-	"WM_MENUSELECT",
-	"WM_MENUCHAR",
-	"WM_ENTERIDLE",
-	"290",
-	"291",
-	"292",
-	"293",
-	"294",
-	"295",
-	"296",
-	"297",
-	"298",
-	"299",
-	"300",
-	"301",
-	"302",
-	"303",
-	"304",
-	"305",
-	"WM_CTLCOLORMSGBOX",
-	"WM_CTLCOLOREDIT",
-	"WM_CTLCOLORLISTBOX",
-	"WM_CTLCOLORBTN",
-	"WM_CTLCOLORDLG",
-	"WM_CTLCOLORSCROLLBAR",
-	"WM_CTLCOLORSTATIC",
-	"313",
-	"314",
-	"315",
-	"316",
-	"317",
-	"318",
-	"319",
-	"320",
-	"321",
-	"322",
-	"323",
-	"324",
-	"325",
-	"326",
-	"327",
-	"328",
-	"329",
-	"330",
-	"331",
-	"332",
-	"333",
-	"334",
-	"335",
-	"336",
-	"337",
-	"338",
-	"339",
-	"340",
-	"341",
-	"342",
-	"343",
-	"344",
-	"345",
-	"346",
-	"347",
-	"348",
-	"349",
-	"350",
-	"351",
-	"352",
-	"353",
-	"354",
-	"355",
-	"356",
-	"357",
-	"358",
-	"359",
-	"360",
-	"361",
-	"362",
-	"363",
-	"364",
-	"365",
-	"366",
-	"367",
-	"368",
-	"369",
-	"370",
-	"371",
-	"372",
-	"373",
-	"374",
-	"375",
-	"376",
-	"377",
-	"378",
-	"379",
-	"380",
-	"381",
-	"382",
-	"383",
-	"384",
-	"385",
-	"386",
-	"387",
-	"388",
-	"389",
-	"390",
-	"391",
-	"392",
-	"393",
-	"394",
-	"395",
-	"396",
-	"397",
-	"398",
-	"399",
-	"400",
-	"401",
-	"402",
-	"403",
-	"404",
-	"405",
-	"406",
-	"407",
-	"408",
-	"409",
-	"410",
-	"411",
-	"412",
-	"413",
-	"414",
-	"415",
-	"416",
-	"417",
-	"418",
-	"419",
-	"420",
-	"421",
-	"422",
-	"423",
-	"424",
-	"425",
-	"426",
-	"427",
-	"428",
-	"429",
-	"430",
-	"431",
-	"432",
-	"433",
-	"434",
-	"435",
-	"436",
-	"437",
-	"438",
-	"439",
-	"440",
-	"441",
-	"442",
-	"443",
-	"444",
-	"445",
-	"446",
-	"447",
-	"448",
-	"449",
-	"450",
-	"451",
-	"452",
-	"453",
-	"454",
-	"455",
-	"456",
-	"457",
-	"458",
-	"459",
-	"460",
-	"461",
-	"462",
-	"463",
-	"464",
-	"465",
-	"466",
-	"467",
-	"468",
-	"469",
-	"470",
-	"471",
-	"472",
-	"473",
-	"474",
-	"475",
-	"476",
-	"477",
-	"478",
-	"479",
-	"480",
-	"481",
-	"482",
-	"483",
-	"484",
-	"485",
-	"486",
-	"487",
-	"488",
-	"489",
-	"490",
-	"491",
-	"492",
-	"493",
-	"494",
-	"495",
-	"496",
-	"497",
-	"498",
-	"499",
-	"500",
-	"501",
-	"502",
-	"503",
-	"504",
-	"505",
-	"506",
-	"507",
-	"508",
-	"509",
-	"510",
-	"511",
-	NULL /* WM_MOUSEMOVE */,
-	"WM_LBUTTONDOWN",
-	"WM_LBUTTONUP",
-	"WM_LBUTTONDBLCLK",
-	"WM_RBUTTONDOWN",
-	"WM_RBUTTONUP",
-	"WM_RBUTTONDBLCLK",
-	"WM_MBUTTONDOWN",
-	"WM_MBUTTONUP",
-	"WM_MBUTTONDBLCLK",
-	"WM_MOUSEWHEEL",
-	"WM_XBUTTONDOWN",
-	"WM_XBUTTONUP",
-	"WM_XBUTTONDBLCLK",
-	"526",
-	"527",
-	"WM_PARENTNOTIFY",
-	"WM_ENTERMENULOOP",
-	"WM_EXITMENULOOP",
-	"WM_NEXTMENU",
-	"WM_SIZING",
-	"WM_CAPTURECHANGED",
-	"WM_MOVING",
-	"535",
-	"WM_POWERBROADCAST",
-	"WM_DEVICECHANGE",
-	"538",
-	"539",
-	"540",
-	"541",
-	"542",
-	"543",
-	"WM_MDICREATE",
-	"WM_MDIDESTROY",
-	"WM_MDIACTIVATE",
-	"WM_MDIRESTORE",
-	"WM_MDINEXT",
-	"WM_MDIMAXIMIZE",
-	"WM_MDITILE",
-	"WM_MDICASCADE",
-	"WM_MDIICONARRANGE",
-	"WM_MDIGETACTIVE",
-	"554",
-	"555",
-	"556",
-	"557",
-	"558",
-	"559",
-	"WM_MDISETMENU",
-	"WM_ENTERSIZEMOVE",
-	"WM_EXITSIZEMOVE",
-	"WM_DROPFILES",
-	"WM_MDIREFRESHMENU",
-	"565",
-	"566",
-	"567",
-	"568",
-	"569",
-	"570",
-	"571",
-	"572",
-	"573",
-	"574",
-	"575",
-	"576",
-	"577",
-	"578",
-	"579",
-	"580",
-	"581",
-	"582",
-	"583",
-	"584",
-	"585",
-	"586",
-	"587",
-	"588",
-	"589",
-	"590",
-	"591",
-	"592",
-	"593",
-	"594",
-	"595",
-	"596",
-	"597",
-	"598",
-	"599",
-	"600",
-	"601",
-	"602",
-	"603",
-	"604",
-	"605",
-	"606",
-	"607",
-	"608",
-	"609",
-	"610",
-	"611",
-	"612",
-	"613",
-	"614",
-	"615",
-	"616",
-	"617",
-	"618",
-	"619",
-	"620",
-	"621",
-	"622",
-	"623",
-	"624",
-	"625",
-	"626",
-	"627",
-	"628",
-	"629",
-	"630",
-	"631",
-	"632",
-	"633",
-	"634",
-	"635",
-	"636",
-	"637",
-	"638",
-	"639",
-	"640",
-	"WM_IME_SETCONTEXT",
-	"WM_IME_NOTIFY",
-	"WM_IME_CONTROL",
-	"WM_IME_COMPOSITIONFULL",
-	"WM_IME_SELECT",
-	"WM_IME_CHAR",
-	"647",
-	"648",
-	"649",
-	"650",
-	"651",
-	"652",
-	"653",
-	"654",
-	"655",
-	"WM_IME_KEYDOWN",
-	"WM_IME_KEYUP",
-	"658",
-	"659",
-	"660",
-	"661",
-	"662",
-	"663",
-	"664",
-	"665",
-	"666",
-	"667",
-	"668",
-	"669",
-	"670",
-	"671",
-	"672",
-	"WM_MOUSEHOVER",
-	"674",
-	"WM_MOUSELEAVE",
-	"676",
-	"677",
-	"678",
-	"679",
-	"680",
-	"681",
-	"682",
-	"683",
-	"684",
-	"685",
-	"686",
-	"687",
-	"688",
-	"689",
-	"690",
-	"691",
-	"692",
-	"693",
-	"694",
-	"695",
-	"696",
-	"697",
-	"698",
-	"699",
-	"700",
-	"701",
-	"702",
-	"703",
-	"704",
-	"705",
-	"706",
-	"707",
-	"708",
-	"709",
-	"710",
-	"711",
-	"712",
-	"713",
-	"714",
-	"715",
-	"716",
-	"717",
-	"718",
-	"719",
-	"720",
-	"721",
-	"722",
-	"723",
-	"724",
-	"725",
-	"726",
-	"727",
-	"728",
-	"729",
-	"730",
-	"731",
-	"732",
-	"733",
-	"734",
-	"735",
-	"736",
-	"737",
-	"738",
-	"739",
-	"740",
-	"741",
-	"742",
-	"743",
-	"744",
-	"745",
-	"746",
-	"747",
-	"748",
-	"749",
-	"750",
-	"751",
-	"752",
-	"753",
-	"754",
-	"755",
-	"756",
-	"757",
-	"758",
-	"759",
-	"760",
-	"761",
-	"762",
-	"763",
-	"764",
-	"765",
-	"766",
-	"767",
-	"WM_CUT",
-	"WM_COPY",
-	"WM_PASTE",
-	"WM_CLEAR",
-	"WM_UNDO",
-	"WM_RENDERFORMAT",
-	"WM_RENDERALLFORMATS",
-	"WM_DESTROYCLIPBOARD",
-	"WM_DRAWCLIPBOARD",
-	"WM_PAINTCLIPBOARD",
-	"WM_VSCROLLCLIPBOARD",
-	"WM_SIZECLIPBOARD",
-	"WM_ASKCBFORMATNAME",
-	"WM_CHANGECBCHAIN",
-	"WM_HSCROLLCLIPBOARD",
-	"WM_QUERYNEWPALETTE",
-	"WM_PALETTEISCHANGING",
-	"WM_PALETTECHANGED",
-	"WM_HOTKEY",
-	"787",
-	"788",
-	"789",
-	"790",
-	"WM_PRINT",
-	"WM_PRINTCLIENT",
-	"793",
-	"794",
-	"795",
-	"796",
-	"797",
-	"798",
-	"799",
-	"800",
-	"801",
-	"802",
-	"803",
-	"804",
-	"805",
-	"806",
-	"807",
-	"808",
-	"809",
-	"810",
-	"811",
-	"812",
-	"813",
-	"814",
-	"815",
-	"816",
-	"817",
-	"818",
-	"819",
-	"820",
-	"821",
-	"822",
-	"823",
-	"824",
-	"825",
-	"826",
-	"827",
-	"828",
-	"829",
-	"830",
-	"831",
-	"832",
-	"833",
-	"834",
-	"835",
-	"836",
-	"837",
-	"838",
-	"839",
-	"840",
-	"841",
-	"842",
-	"843",
-	"844",
-	"845",
-	"846",
-	"847",
-	"848",
-	"849",
-	"850",
-	"851",
-	"852",
-	"853",
-	"854",
-	"855",
-	"856",
-	"857",
-	"858",
-	"859",
-	"860",
-	"861",
-	"862",
-	"863",
-	"864",
-	"865",
-	"866",
-	"867",
-	"868",
-	"869",
-	"870",
-	"871",
-	"872",
-	"873",
-	"874",
-	"875",
-	"876",
-	"877",
-	"878",
-	"879",
-	"880",
-	"881",
-	"882",
-	"883",
-	"884",
-	"885",
-	"886",
-	"887",
-	"888",
-	"889",
-	"890",
-	"891",
-	"892",
-	"893",
-	"894",
-	"895",
-	"896",
-	"897",
-	"898",
-	"899",
-	"900",
-	"901",
-	"902",
-	"903",
-	"904",
-	"905",
-	"906",
-	"907",
-	"908",
-	"909",
-	"910",
-	"911",
-	"912",
-	"913",
-	"914",
-	"915",
-	"916",
-	"917",
-	"918",
-	"919",
-	"920",
-	"921",
-	"922",
-	"923",
-	"924",
-	"925",
-	"926",
-	"927",
-	"928",
-	"929",
-	"930",
-	"931",
-	"932",
-	"933",
-	"934",
-	"935",
-	"936",
-	"937",
-	"938",
-	"939",
-	"940",
-	"941",
-	"942",
-	"943",
-	"944",
-	"945",
-	"946",
-	"947",
-	"948",
-	"949",
-	"950",
-	"951",
-	"952",
-	"953",
-	"954",
-	"955",
-	"956",
-	"957",
-	"958",
-	"959",
-	"960",
-	"961",
-	"962",
-	"963",
-	"964",
-	"965",
-	"966",
-	"967",
-	"968",
-	"969",
-	"970",
-	"971",
-	"972",
-	"973",
-	"974",
-	"975",
-	"976",
-	"977",
-	"978",
-	"979",
-	"980",
-	"981",
-	"982",
-	"983",
-	"984",
-	"985",
-	"986",
-	"987",
-	"988",
-	"989",
-	"990",
-	"991",
-	"992",
-	"993",
-	"994",
-	"995",
-	"996",
-	"997",
-	"998",
-	"999",
-	"1000",
-	"1001",
-	"1002",
-	"1003",
-	"1004",
-	"1005",
-	"1006",
-	"1007",
-	"1008",
-	"1009",
-	"1010",
-	"1011",
-	"1012",
-	"1013",
-	"1014",
-	"1015",
-	"1016",
-	"1017",
-	"1018",
-	"1019",
-	"1020",
-	"1021",
-	"1022",
-	"1023"
-};
-
diff --git a/hw/xwin/xlaunch/window/util.h b/hw/xwin/xlaunch/window/util.h
deleted file mode 100644
index cd21da6..0000000
--- a/hw/xwin/xlaunch/window/util.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#ifndef __UTIL_H__
-#define __UTIL_H__
-
-#include <windows.h>
-#include <stdexcept>
-
-
-class win32_error : public std::runtime_error
-{
-    public:
-        static std::string message(DWORD code);
-        DWORD errorcode;
-        win32_error(const std::string &msg,DWORD code = GetLastError()) : std::runtime_error(msg + ":" + message(code)), errorcode(code) {};
-};
-
-#define MESSAGE_NAMES_LEN 1024
-#define NOTIFY_NAMES_LEN 0
-class MessageDebug
-{
-    protected:
-        static const char * message_names[MESSAGE_NAMES_LEN];
-        static const char * notify_names[NOTIFY_NAMES_LEN];
-    public:
-        static void debug(HWND handle, UINT uMsg, WPARAM wParam, LPARAM lParam, const char *prefix);
-};
-
-
-#endif
diff --git a/hw/xwin/xlaunch/window/window.cc b/hw/xwin/xlaunch/window/window.cc
deleted file mode 100755
index cca3a48..0000000
--- a/hw/xwin/xlaunch/window/window.cc
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-
-#include "window.h"
-#include "util.h"
-#include <stdio.h>
-#include <stdexcept>
-
-CWindow::CWindowClass CWindow::windowClass("CWINDOWCLASS", DefWindowProc);
-
-CWindow::CWindowClass::CWindowClass(const char *_name, WNDPROC _wndproc) : 
-    wndproc(_wndproc), atom(0), classname(_name)
-{
-    Register();
-}
-
-CWindow::CWindowClass::~CWindowClass()
-{
-    UnregisterClass(classname.c_str(), GetModuleHandle(NULL));
-}
-
-void CWindow::CWindowClass::Register()
-{
-    WNDCLASSEX wndclass;
-    memset(&wndclass, 0, sizeof(wndclass));
-    wndclass.cbSize = sizeof(wndclass);
-    wndclass.style = 0;
-    wndclass.lpfnWndProc = wndproc;
-    wndclass.cbClsExtra = 0;
-    wndclass.cbWndExtra = 0;
-    wndclass.hInstance = GetModuleHandle(NULL); 
-    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
-    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
-    wndclass.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
-    wndclass.lpszMenuName = NULL;
-    wndclass.lpszClassName = classname.c_str();
-    wndclass.hIconSm = NULL;
-    atom = RegisterClassEx(&wndclass);
-    if (atom == 0)
-        throw win32_error("RegisterClassEx failed");
-}
-
-CWindow::CWindow(const char *_title) : title(_title), hwnd(NULL), parent(NULL), bounds(), owndproc(NULL), showing(FALSE)
-{
-    style = WS_CHILD;
-    exstyle = 0;
-}
-
-HWND CWindow::CreateWindowHandle()
-{
-    HWND ret = CreateWindowEx(
-            exstyle,
-            GetClassName(),
-            title.c_str(),
-            style,
-            bounds.left,
-            bounds.top,
-            bounds.width,
-            bounds.height,
-            parent,
-            NULL,
-            GetModuleHandle(NULL),
-            0
-            );
-    if (ret == NULL)
-        throw win32_error("CreateWindowEx failed");
-    return ret;
-}
-
-void CWindow::Create()
-{
-    if (hwnd != NULL)
-        return;
-    hwnd = CreateWindowHandle();
-    if (hwnd == NULL)
-        throw win32_error("Could not create window");
-
-    // Reset the error code
-    DWORD err = 0;
-    SetLastError(err);
-    
-    // Attach the object reference to the window handle
-    SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)this);
-    err = GetLastError();
-    if (err != 0)
-        throw win32_error("SetWindowLongPtr failed",err);
-    
-    // Set the window proc
-    owndproc = (WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)WindowProc);
-    err = GetLastError();
-    if (err != 0)
-        throw win32_error("SetWindowLongPtr failed",err);
-}
-
-const char *CWindow::GetClassName()
-{
-    return windowClass.GetClassName();
-}
-
-LRESULT CALLBACK CWindow::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    MessageDebug::debug(hwnd, uMsg, wParam, lParam, __FUNCTION__);
-    CWindow* window = (CWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
-    if (window != NULL)
-        return window->Dispatch(hwnd, uMsg, wParam, lParam);
-    return DefWindowProc(hwnd, uMsg, wParam, lParam);
-}
-
-LRESULT CWindow::Dispatch(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    switch (uMsg)
-    {
-        case WM_SIZE:
-            bounds.width = LOWORD(lParam);
-            bounds.height = LOWORD(lParam);
-            break;
-        case WM_MOVE:
-            bounds.left = LOWORD(lParam);
-            bounds.top = LOWORD(lParam);
-            break;
-        case WM_DESTROY:
-            showing = FALSE;
-            break;
-    }
-    if (owndproc)
-        return CallWindowProc(owndproc, hwnd, uMsg, wParam, lParam);
-    else
-        return DefWindowProc(hwnd, uMsg, wParam, lParam);
-}
-
-void CWindow::Show()
-{
-    if (hwnd == NULL)
-        Create();
-    ShowWindow(hwnd, SW_SHOWNORMAL);
-}
-
-int CWindow::ShowModal()
-{
-    MSG msg;
-    BOOL bRet;
-    showing = TRUE;
-    Show();
-
-    while( showing && (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
-    { 
-        if (bRet == -1)
-        {
-            // handle the error and possibly exit
-        }
-        else
-        {
-            TranslateMessage(&msg); 
-            DispatchMessage(&msg); 
-        }
-    }
-    return 0; 
-}
-
-void CWindow::SetLeft(int left)
-{
-    bounds.left = left;
-    if (hwnd)
-        if (!SetWindowPos(hwnd, NULL, 
-                bounds.left, bounds.top,
-                0, 0, 
-                SWP_NOZORDER |  SWP_NOSIZE))
-            throw win32_error("SetWindowPos failed");
-}
-
-void CWindow::SetTop(int top)
-{
-    bounds.top = top;
-    if (hwnd)
-        if (!SetWindowPos(hwnd, NULL, 
-                bounds.left, bounds.top,
-                0, 0, 
-                SWP_NOZORDER |  SWP_NOSIZE))
-            throw win32_error("SetWindowPos failed");
-}
-
-void CWindow::SetWidth(int width)
-{
-    bounds.width = width;
-    if (hwnd)
-        if (!SetWindowPos(hwnd, NULL,
-                0, 0, 
-                bounds.width, bounds.height, 
-                SWP_NOZORDER |  SWP_NOMOVE))
-            throw win32_error("SetWindowPos failed");
-}
-void CWindow::SetHeight(int height)
-{
-    bounds.height = height;
-    if (hwnd)
-        if (!SetWindowPos(hwnd, NULL,
-                0, 0, 
-                bounds.width, bounds.height,
-                SWP_NOZORDER |  SWP_NOMOVE))
-            throw win32_error("SetWindowPos failed");
-}
-
-void CWindow::SetBounds(int left, int top, int width, int height)
-{
-    bounds = CBoundary(left, top, width, height);
-    if (hwnd)
-        if (!SetWindowPos(hwnd, NULL, 
-                bounds.left, bounds.top, 
-                bounds.width, bounds.height, 
-                SWP_NOZORDER))
-            throw win32_error("SetWindowPos failed");
-}
-
-void CWindow::SetBounds(const RECT &rect)
-{
-    bounds = rect;
-    if (hwnd)
-        if (!SetWindowPos(hwnd, NULL, 
-                bounds.left, bounds.top, 
-                bounds.width, bounds.height, 
-                SWP_NOZORDER))
-            throw win32_error("SetWindowPos failed");
-}
-
-HWND CWindow::GetHandle()
-{
-    if (hwnd == NULL)
-        Create();
-    return hwnd;
-}
-
-void CWindow::SetParent(CWindow *window)
-{
-    parent = window->GetHandle();
-    if (hwnd != NULL)
-        if (::SetParent(hwnd, parent) == NULL)
-            throw win32_error("SetParent failed");
-        
-}
-
-void CWindow::SetStyle(DWORD style)
-{
-    this->style = style;
-    SetLastError(0);
-    if (hwnd)
-        SetWindowLong(hwnd, GWL_STYLE, style);
-    int err = GetLastError();
-    if (err != 0)
-        throw win32_error("SetWindowLong failed", err);
-}
-
-void CWindow::SetExStyle(DWORD exstyle)
-{
-    this->exstyle = exstyle;
-    SetLastError(0);
-    if (hwnd)
-        SetWindowLong(hwnd, GWL_EXSTYLE, exstyle);
-    int err = GetLastError();
-    if (err != 0)
-        throw win32_error("SetWindowWLong failed", err);
-}
diff --git a/hw/xwin/xlaunch/window/window.h b/hw/xwin/xlaunch/window/window.h
deleted file mode 100644
index baf4014..0000000
--- a/hw/xwin/xlaunch/window/window.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#ifndef __WINDOW_H__
-#define __WINDOW_H__
-
-#include <windows.h>
-#include <string>
-
-class CDialog;
-class CWindow
-{
-    friend class CDialog;
-    public:
-        struct CBoundary
-        {
-            int left;
-            int top;
-            int width;
-            int height;
-            CBoundary() : 
-                left(0), top(0), width(0), height(0) {};
-            CBoundary(int x, int y, int w, int h) : 
-                left(x), top(y), width(w), height(h) {};
-            CBoundary(const RECT &r) : 
-                left(r.left), top(r.top), width(r.right-r.left), height(r.bottom-r.top) {};
-        };
-        class CWindowClass
-        {
-            private:
-                WNDPROC wndproc;
-                ATOM atom;
-                std::string classname;
-            protected:
-                void Register();
-            public:
-                CWindowClass(const char *name, WNDPROC wndproc);
-                ~CWindowClass();
-                const char *GetClassName() { return classname.c_str(); };
-        };
-    private:
-        static CWindowClass windowClass;
-
-        std::string title;
-        DWORD exstyle;
-        DWORD style;
-        CBoundary bounds;
-        HWND hwnd; 
-        HWND parent;
-        WNDPROC owndproc;
-
-        BOOL showing;
-
-    protected:
-
-        virtual const char *GetClassName();
-	virtual HWND CreateWindowHandle();
-        static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-    public:
-        CWindow(const char *title);
-	virtual void Create();
-
-        virtual int ShowModal();
-
-        void Show();
-        void Hide();
-
-        void SetWidth(int width);
-        void SetHeight(int height);
-        void SetLeft(int left);
-        void SetTop(int top);
-        int GetWidth() { return bounds.width; };
-        int GetHeight() { return bounds.height; };
-        int GetLeft() { return bounds.left; };
-        int GetTop() { return bounds.top; };
-
-        void SetBounds(int left, int top, int width, int height);
-        void SetBounds(const RECT &rect);
-
-        void SetStyle(DWORD style);
-        DWORD GetStyle() { return style; };
-        
-        void SetExStyle(DWORD exstyle);
-        DWORD GetExStyle() { return exstyle; };
-
-        HWND GetHandle();
-        void SetParent(CWindow *window);
-
-        virtual LRESULT Dispatch(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-};
-
-#endif
diff --git a/hw/xwin/xlaunch/window/wizard.cc b/hw/xwin/xlaunch/window/wizard.cc
deleted file mode 100755
index 9d6c711..0000000
--- a/hw/xwin/xlaunch/window/wizard.cc
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#include "wizard.h"
-#include "util.h"
-
-CWizard::CWizard() : pages() 
-{
-};
-
-void CWizard::AddPage(const PROPSHEETPAGE &page)
-{
-    pages.push_back(page);
-}
-
-void CWizard::AddPage(const char *page, HINSTANCE instance)
-{
-    PROPSHEETPAGE psp;
-    if (instance == NULL)
-        instance = GetModuleHandle(NULL);
-    
-    memset(&psp, 0, sizeof(psp));
-    psp.dwSize = sizeof(PROPSHEETPAGE);
-    psp.dwFlags = PSP_DEFAULT;
-    psp.hInstance = instance;
-    psp.pszTemplate = page;
-    psp.pfnDlgProc = WizardDialogProc;
-    psp.lParam = (LPARAM)this;
-
-    AddPage(psp);
-}
-
-void CWizard::AddPage(DWORD id, DWORD title, DWORD subtitle, HINSTANCE instance)
-{
-    PROPSHEETPAGE psp;
-    if (instance == NULL)
-        instance = GetModuleHandle(NULL);
-    
-    memset(&psp, 0, sizeof(psp));
-    psp.dwSize = sizeof(PROPSHEETPAGE);
-    psp.dwFlags = PSP_DEFAULT;
-#if _WIN32_IE >= 0x0500
-    if (title != 0)
-    {
-        psp.dwFlags |= PSP_USEHEADERTITLE;
-        psp.pszHeaderTitle = MAKEINTRESOURCE(title);
-    }
-    if (subtitle != 0)
-    {
-        psp.dwFlags |= PSP_USEHEADERSUBTITLE;
-        psp.pszHeaderSubTitle = MAKEINTRESOURCE(subtitle);
-    }
-#endif
-		
-    psp.hInstance = instance;
-    psp.pszTemplate = MAKEINTRESOURCE(id);
-    psp.pfnDlgProc = WizardDialogProc;
-    psp.lParam = (LPARAM)this;
-
-    AddPage(psp);
-}
-
-HWND CWizard::CreateWindowHandle()
-{
-    PROPSHEETHEADER psh;
-    HWND ret;
-    
-    PrepareSheetHeader(psh, FALSE);
-    ret = (HWND)PropertySheet(&psh);
-    free(psh.phpage);
-    if (ret == NULL)
-        throw win32_error("PropertySheet failed");
-    return ret;
-}
-
-int CWizard::ShowModal()
-{
-    PROPSHEETHEADER psh;
-    int ret;
-    
-    PrepareSheetHeader(psh, TRUE);
-    ret = PropertySheet(&psh);
-    free(psh.phpage);
-    return ret;
-}
-
-void CWizard::PrepareSheetHeader(PROPSHEETHEADER &psh, BOOL modal)
-{
-    HPROPSHEETPAGE *phpage = (HPROPSHEETPAGE*)malloc(pages.size() * sizeof(HPROPSHEETPAGE));
-    DWORD modeflag;
-
-    if (modal)
-        modeflag = 0;
-    else
-        modeflag = PSH_MODELESS;
-    
-    for (unsigned i = 0; i < pages.size(); i++)
-    {
-        phpage[i] = CreatePropertySheetPage(&pages[i]);
-        if (phpage[i] == NULL)
-        {
-            DWORD err = GetLastError();
-            free(phpage);
-            throw win32_error("CreatePropertySheetPage failed", err);
-        }
-    }
-
-    memset(&psh, 0, sizeof(psh));
-    psh.dwSize = sizeof(PROPSHEETHEADER);
-#if _WIN32_IE >= 0x0500
-    psh.dwFlags = PSH_WIZARD97 | modeflag;
-#else
-    psh.dwFlags = PSH_WIZARD | modeflag;
-#endif
-    psh.hwndParent = NULL;
-    psh.hInstance = GetModuleHandle(NULL);
-    psh.pszIcon = NULL;
-    psh.pszCaption = (LPSTR) "Cell Properties";
-    psh.nPages = pages.size(); 
-    psh.nStartPage = 0;
-    psh.phpage = phpage;
-    psh.pfnCallback = NULL;
-}
-
-DWORD CWizard::PageID(unsigned index)
-{
-    if (index < pages.size() && IS_INTRESOURCE(pages[index].pszTemplate))
-	return (DWORD)pages[index].pszTemplate;
-    return (DWORD)-1;
-}
-
-unsigned CWizard::PageIndex(PROPSHEETPAGE *psp)
-{
-    for (unsigned i = 0; i < pages.size(); i++)
-    {
-	if (IS_INTRESOURCE(psp->pszTemplate) || IS_INTRESOURCE(pages[i].pszTemplate ))
-	{
-	    if (psp->pszTemplate == pages[i].pszTemplate)
-		return i;
-	}	    
-	else if (psp->pszTemplate && pages[i].pszTemplate)
-	{
-	    if (strcmp(psp->pszTemplate, pages[i].pszTemplate) == 0)
-		return i;
-	}
-    }
-    return (unsigned)-1;
-}
-
-INT_PTR CWizard::DlgDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    return CBaseDialog::DlgDispatch(hwndDlg, uMsg, wParam, lParam);
-}
-
-INT_PTR CWizard::PageDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, PROPSHEETPAGE *psp)
-{
-    LPNMHDR pnmh = (LPNMHDR)lParam;
-    DWORD flags; 
-    unsigned pageindex;
-    switch (uMsg)
-    {
-	case WM_NOTIFY:
-	    switch (pnmh->code)
-	    {
-		case PSN_SETACTIVE:
-#ifdef _DEBUG
-                    printf("PSN_SETACTIVE %d\n", PageIndex(psp));
-#endif
-		    pageindex = PageIndex(psp);
-		    if (pageindex != (unsigned)-1)
-		    {
-			flags = 0;
-			if (pageindex > 0)
-			    flags |= PSWIZB_BACK;
-			if ((unsigned)pageindex + 1 == pages.size())
-			    flags |= PSWIZB_FINISH;
-			if ((unsigned)pageindex + 1 < pages.size())
-                            flags |= PSWIZB_NEXT;
-                        PropSheet_SetWizButtons(GetParent(hwndDlg), flags);
-		    }
-		    WizardActivate(hwndDlg, pageindex);
-		    break;
-		case PSN_WIZNEXT:
-                    if (WizardNext(hwndDlg, PageIndex(psp)))
-                        return TRUE;
-		    break;
-		case PSN_WIZBACK:
-                    if (WizardBack(hwndDlg, PageIndex(psp)))
-                        return TRUE;
-		    break;
-                case PSN_WIZFINISH:
-                    if (WizardFinish(hwndDlg, PageIndex(psp)))
-                        return TRUE;
-                    DestroyWindow(GetParent(hwndDlg));
-		case PSN_RESET:
-                    if (WizardReset(hwndDlg, PageIndex(psp)))
-                        return TRUE;
-                    DestroyWindow(GetParent(hwndDlg));
-		    break;
-	    }
-    }
-    return DlgDispatch(hwndDlg, uMsg, wParam, lParam);
-}
-
-
-INT_PTR CALLBACK CWizard::WizardDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-    MessageDebug::debug(hwndDlg, uMsg, wParam, lParam, __FUNCTION__);
-    PROPSHEETPAGE *psp = (PROPSHEETPAGE*)lParam;
-    switch (uMsg)
-    {
-	case WM_INITDIALOG:
-	    SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)psp);
-	    break;
-    }
-    psp = (PROPSHEETPAGE*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
-    CWizard* wizard = psp?(CWizard*)psp->lParam:NULL;
-    if (wizard != NULL)
-        return wizard->PageDispatch(hwndDlg, uMsg, wParam, lParam, psp);
-    return FALSE;
-}
-
diff --git a/hw/xwin/xlaunch/window/wizard.h b/hw/xwin/xlaunch/window/wizard.h
deleted file mode 100644
index a2361c5..0000000
--- a/hw/xwin/xlaunch/window/wizard.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2005 Alexander Gottwald
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-#ifndef __WIZARD_H__
-#define __WIZARD_H__
-
-#include "dialog.h"
-#include <vector>
-
-#define _WIN32_IE 0x0500
-#include <prsht.h>
-
-class CWizard : public CBaseDialog
-{
-    private:
-        std::vector<PROPSHEETPAGE> pages;
-        void PrepareSheetHeader(PROPSHEETHEADER &psh, BOOL modal);
-    protected:
-        virtual HWND CreateWindowHandle();
-        static INT_PTR CALLBACK WizardDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-        virtual INT_PTR DlgDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-        virtual INT_PTR PageDispatch(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, PROPSHEETPAGE *psp);
-        virtual unsigned PageIndex(PROPSHEETPAGE *psp);
-	virtual DWORD PageID(unsigned index);
-        virtual BOOL WizardNext(HWND hwndDlg, unsigned index) { return FALSE; }
-        virtual BOOL WizardBack(HWND hwndDlg, unsigned index) { return FALSE; } 
-        virtual BOOL WizardFinish(HWND hwndDlg, unsigned index) { return FALSE; }
-        virtual BOOL WizardReset(HWND hwndDlg, unsigned index) { return FALSE; }
-        virtual BOOL WizardActivate(HWND hwndDlg, unsigned index) { return FALSE; }
-    public:
-        CWizard();
-        void AddPage(const PROPSHEETPAGE &page);
-        void AddPage(const char *page, HINSTANCE instance = NULL);
-        void AddPage(DWORD id, DWORD title, DWORD subtitle, HINSTANCE instance = NULL);
-        virtual int ShowModal();
-};
-#endif


More information about the Xquartz-changes mailing list