changeset 82:43c42c637c9c

First simple example works
author Frank Benoit <benoit@tionex.de>
date Wed, 06 Feb 2008 15:45:27 +0100
parents e10cbfc977d2
children b1f026458bc5
files dwt/internal/win32/OS.d dwt/internal/win32/WINAPI.d dwt/internal/win32/WINTYPES.d dwt/widgets/Button.d dwt/widgets/ColorDialog.d dwt/widgets/Combo.d dwt/widgets/Composite.d dwt/widgets/Control.d dwt/widgets/CoolBar.d dwt/widgets/DateTime.d dwt/widgets/Decorations.d dwt/widgets/DirectoryDialog.d dwt/widgets/Display.d dwt/widgets/ExpandBar.d dwt/widgets/FileDialog.d dwt/widgets/Group.d dwt/widgets/Link.d dwt/widgets/List.d dwt/widgets/Sash.d dwt/widgets/Scale.d dwt/widgets/ScrollBar.d dwt/widgets/Scrollable.d dwt/widgets/Shell.d dwt/widgets/Slider.d dwt/widgets/Spinner.d dwt/widgets/TabFolder.d dwt/widgets/Table.d dwt/widgets/Text.d dwt/widgets/ToolBar.d dwt/widgets/Tracker.d dwt/widgets/TrayItem.d dwt/widgets/Tree.d dwt/widgets/TreeColumn.d dwt/widgets/Widget.d simple.d
diffstat 35 files changed, 323 insertions(+), 101 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/internal/win32/OS.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/internal/win32/OS.d	Wed Feb 06 15:45:27 2008 +0100
@@ -20,7 +20,7 @@
 import dwt.internal.Library;
 import tango.sys.SharedLib : SharedLib;
 import tango.util.log.Trace;
-
+static import tango.stdc.stdlib;
 
 
 // declare of Callback functions
@@ -140,32 +140,31 @@
     public static const int LANG_KOREAN = 0x12;
     public static const int MAX_PATH = 260;
 
-    static this(){
-        NOTIFYICONDATAA_V2_SIZE = getNOTIFYICONDATAA_V2_SIZE ();
-        NOTIFYICONDATAW_V2_SIZE = getNOTIFYICONDATAW_V2_SIZE ();
-        NOTIFYICONDATA_V2_SIZE = IsUnicode ? getNOTIFYICONDATAW_V2_SIZE : getNOTIFYICONDATAA_V2_SIZE;
-        OSVERSIONINFO info;
-        IsWin32s = (info.dwPlatformId is VER_PLATFORM_WIN32s);
-        IsWin95 = (info.dwPlatformId is VER_PLATFORM_WIN32_WINDOWS);
-        IsWinNT = (info.dwPlatformId is VER_PLATFORM_WIN32_NT);
-        //IsSP_ = false;
-        //IsPPC_ = false;
-        //IsHPC = false;
-        IsDBLocale = false;
-        WIN32_MAJOR = info.dwMajorVersion;
-        WIN32_MINOR = info.dwMinorVersion;
-        WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
-        //IsUnicode = !IsWin32s && !IsWin95;
-        DLLVERSIONINFO dvi;
-        COMCTL32_MAJOR = dvi.dwMajorVersion;
-        COMCTL32_MINOR = dvi.dwMinorVersion;
-        COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);
-        SHELL32_MAJOR = dvi.dwMajorVersion;
-        SHELL32_MINOR = dvi.dwMinorVersion;
-        SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
-    }
-//PORTING_LEFT
-/++
+//     static this(){
+//         NOTIFYICONDATAA_V2_SIZE = getNOTIFYICONDATAA_V2_SIZE ();
+//         NOTIFYICONDATAW_V2_SIZE = getNOTIFYICONDATAW_V2_SIZE ();
+//         NOTIFYICONDATA_V2_SIZE = IsUnicode ? getNOTIFYICONDATAW_V2_SIZE : getNOTIFYICONDATAA_V2_SIZE;
+//         OSVERSIONINFO info;
+//         IsWin32s = (info.dwPlatformId is VER_PLATFORM_WIN32s);
+//         IsWin95 = (info.dwPlatformId is VER_PLATFORM_WIN32_WINDOWS);
+//         IsWinNT = (info.dwPlatformId is VER_PLATFORM_WIN32_NT);
+//         //IsSP_ = false;
+//         //IsPPC_ = false;
+//         //IsHPC = false;
+//         IsDBLocale = false;
+//         WIN32_MAJOR = info.dwMajorVersion;
+//         WIN32_MINOR = info.dwMinorVersion;
+//         WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
+//         //IsUnicode = !IsWin32s && !IsWin95;
+//         DLLVERSIONINFO dvi;
+//         COMCTL32_MAJOR = dvi.dwMajorVersion;
+//         COMCTL32_MINOR = dvi.dwMinorVersion;
+//         COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);
+//         SHELL32_MAJOR = dvi.dwMajorVersion;
+//         SHELL32_MINOR = dvi.dwMinorVersion;
+//         SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
+//     }
+
     /* Get the Windows version and the flags */
     public static this() {
         /*
@@ -184,8 +183,8 @@
         OSVERSIONINFO info;
         info.dwOSVersionInfoSize = OSVERSIONINFO.sizeof;
         if(!OS.GetVersionEx(&info)){
-                MessageBoxA(null, "DWT Unicode version applications can't run in a non-Unicode platform !", "Error", MB_OK|MB_ICONERROR);
-                exit(-1);
+            MessageBoxA(null, "DWT Unicode version applications can't run in a non-Unicode platform !", "Error", MB_OK|MB_ICONERROR);
+            tango.stdc.stdlib.exit(-1);
         }
         //OSVERSIONINFO info = new OSVERSIONINFOW ();
         //info.dwOSVersionInfoSize = OSVERSIONINFOW.sizeof;
@@ -199,43 +198,50 @@
         IsWin32s = (info.dwPlatformId is VER_PLATFORM_WIN32s);
         IsWin95 = (info.dwPlatformId is VER_PLATFORM_WIN32_WINDOWS);
         IsWinNT = (info.dwPlatformId is VER_PLATFORM_WIN32_NT);
-        IsWinCE = (info.dwPlatformId is VER_PLATFORM_WIN32_CE);
-        IsSP_ = IsSP();
-        IsPPC_ = IsPPC();
-        IsHPC = IsWinCE && !IsPPC && !IsSP;
+        //PORTING_CHANGE: made by version
+        //IsWinCE = (info.dwPlatformId is VER_PLATFORM_WIN32_CE);
+        //PORTING_CHANGE: made by version
+        //IsSP  = IsSP();
+        //PORTING_CHANGE: made by version
+        //IsPPC = IsPPC();
+
+        version(WinCE) {
+            IsHPC = IsWinCE && !IsPPC && !IsSP;
+        }
         WIN32_MAJOR = info.dwMajorVersion;
         WIN32_MINOR = info.dwMinorVersion;
         WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
-        IsUnicode = !IsWin32s && !IsWin95;
-
+
+        //PORTING_CHANGE: made by version
+        //IsUnicode = !IsWin32s && !IsWin95;
         /* Load the manifest to force the XP Theme */
-        if (System.getProperty (NO_MANIFEST) is null) {
+        //if (System.getProperty (NO_MANIFEST) is null) {
             if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
-                TCHAR buffer = new TCHAR (0, MAX_PATH);
-                int /*long*/ hModule = OS.GetLibraryHandle ();
-                while (OS.GetModuleFileName (hModule, buffer, buffer.length ()) is buffer.length ()) {
-                    buffer = new TCHAR (0, buffer.length () + MAX_PATH);
+                TCHAR[] buffer = new TCHAR[ MAX_PATH ];
+                HANDLE hModule = OS.GetLibraryHandle ();
+                while (OS.GetModuleFileName (hModule, buffer.ptr, buffer.length ) is buffer.length ) {
+                    buffer.length = buffer.length + MAX_PATH;
                 }
-                int /*long*/ hHeap = OS.GetProcessHeap ();
-                int byteCount = buffer.length () * TCHAR.sizeof;
-                int /*long*/ pszText = OS.HeapAlloc (hHeap, HEAP_ZERO_MEMORY, byteCount);
-                OS.MoveMemory (pszText, buffer, byteCount);
-                ACTCTX pActCtx = new ACTCTX ();
+                auto hHeap = OS.GetProcessHeap ();
+                int byteCount = buffer.length * TCHAR.sizeof;
+                TCHAR* pszText = cast(TCHAR*) OS.HeapAlloc (hHeap, HEAP_ZERO_MEMORY, byteCount);
+                OS.MoveMemory (pszText, buffer.ptr, byteCount);
+                ACTCTX pActCtx;
                 pActCtx.cbSize = ACTCTX.sizeof;
                 pActCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT;
                 pActCtx.lpSource = pszText;
-                pActCtx.lpResourceName = MANIFEST_RESOURCE_ID;
-                int /*long*/ hActCtx = OS.CreateActCtx (pActCtx);
-                if (pszText !is 0) OS.HeapFree (hHeap, 0, pszText);
-                int /*long*/ [] lpCookie = new int /*long*/ [1];
-                OS.ActivateActCtx (hActCtx, lpCookie);
+                pActCtx.lpResourceName = cast(char*)MANIFEST_RESOURCE_ID;
+                HANDLE hActCtx = OS.CreateActCtx (&pActCtx);
+                if (pszText !is null) OS.HeapFree (hHeap, 0, pszText);
+                uint lpCookie;
+                OS.ActivateActCtx (hActCtx, &lpCookie);
                 /*
                 * NOTE:  A single activation context is created and activated
                 * for the entire lifetime of the program.  It is deactivated
                 * and released by Windows when the program exits.
                 */
             }
-        }
+        //}
 
         /* Make the process DPI aware for Windows Vista */
         if (OS.WIN32_VERSION >= OS.VERSION (6, 0)) OS.SetProcessDPIAware ();
@@ -260,61 +266,58 @@
             short langID = OS.GetSystemDefaultUILanguage ();
             short primaryLang = OS.PRIMARYLANGID (langID);
             if (primaryLang is LANG_KOREAN) {
-                OSVERSIONINFOEX infoex = IsUnicode ? (OSVERSIONINFOEX)new OSVERSIONINFOEXW () : (OSVERSIONINFOEX)new OSVERSIONINFOEXA ();
+                OSVERSIONINFOEX infoex;
                 infoex.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof;
-                GetVersionEx (infoex);
+                GetVersionEx (cast(OSVERSIONINFO*) &infoex );
                 if (infoex.wServicePackMajor < 2) {
                     OS.ImmDisableTextFrameService (0);
                 }
             }
         }
-    }
-
-    /* Get the COMCTL32.DLL version */
-    static this() {
-        DLLVERSIONINFO dvi = new DLLVERSIONINFO ();
+
+        /* Get the COMCTL32.DLL version */
+        DLLVERSIONINFO dvi;
         dvi.cbSize = DLLVERSIONINFO.sizeof;
         dvi.dwMajorVersion = 4;
         dvi.dwMinorVersion = 0;
-        TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$
-        int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
-        if (hModule !is 0) {
+        //PORTING_CHANGE: comctl is loaded automatically
+        //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$
+        //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
+        if (auto lib = SharedLib.load( `comctl32.dll`) ) {
             char[] name = "DllGetVersion\0"; //$NON-NLS-1$
-            byte [] lpProcName = new byte [name.length ()];
-            for (int i=0; i<lpProcName.length; i++) {
-                lpProcName [i] = (byte) name.charAt (i);
+            void* DllGetVersion = lib.getSymbol(name.ptr);
+            if (DllGetVersion !is null){
+                alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
+                TDllVersion f = cast( TDllVersion )DllGetVersion;
+                f(&dvi);
             }
-            int /*long*/ DllGetVersion = OS.GetProcAddress (hModule, lpProcName);
-            if (DllGetVersion !is 0) OS.Call (DllGetVersion, dvi);
-            OS.FreeLibrary (hModule);
+            lib.unload();
         }
         COMCTL32_MAJOR = dvi.dwMajorVersion;
         COMCTL32_MINOR = dvi.dwMinorVersion;
         COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);
-    }
-
-    /* Get the Shell32.DLL version */
-    static {
-        DLLVERSIONINFO dvi = new DLLVERSIONINFO ();
+
+        /* Get the Shell32.DLL version */
+        dvi = DLLVERSIONINFO.init;
         dvi.cbSize = DLLVERSIONINFO.sizeof;
         dvi.dwMajorVersion = 4;
-        TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$
-        int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
-        if (hModule !is 0) {
+        //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$
+        //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
+        if ( auto lib = SharedLib.load( `Shell32.dll`)) {
             char[] name = "DllGetVersion\0"; //$NON-NLS-1$
-            byte [] lpProcName = new byte [name.length ()];
-            for (int i=0; i<lpProcName.length; i++) {
-                lpProcName [i] = (byte) name.charAt (i);
+            void* DllGetVersion = lib.getSymbol(name.ptr);
+            if (DllGetVersion !is null){
+                alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
+                TDllVersion f = cast( TDllVersion )DllGetVersion;
+                f(&dvi);
             }
-            int /*long*/ DllGetVersion = OS.GetProcAddress (hModule, lpProcName);
-            if (DllGetVersion !is 0) OS.Call (DllGetVersion, dvi);
-            OS.FreeLibrary (hModule);
+            lib.unload();
         }
         SHELL32_MAJOR = dvi.dwMajorVersion;
         SHELL32_MINOR = dvi.dwMinorVersion;
         SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
+    Trace.formatln("line:{} in {}", __LINE__, __FILE__ );
     }
-++/
 
     /* Flag used on WinCE */
     static const int SYS_COLOR_INDEX_FLAG = OS.IsWinCE ? 0x40000000 : 0x0;
@@ -4336,6 +4339,16 @@
     }
 }
 
+// user32.dll vista
+public static extern(Windows) BOOL function() SetProcessDPIAware;
+// Imm32.lib
+public static extern(Windows) BOOL function( DWORD idThread ) ImmDisableTextFrameService;
+
+// kernel32 winxp/vista
+public static extern(Windows) {
+HANDLE function( ACTCTX* pActCtx ) CreateActCtx;
+BOOL function( HACTCTX hActCtx, uint* lpCookie ) ActivateActCtx;
+}
 //------------------------------------------------------------------------
 /** All Natives */
 alias WINAPI.AbortDoc AbortDoc;
--- a/dwt/internal/win32/WINAPI.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/internal/win32/WINAPI.d	Wed Feb 06 15:45:27 2008 +0100
@@ -167,6 +167,24 @@
   int nRightRect,  // x-coord of lower-right corner
   int nBottomRect  // y-coord of lower-right corner
 );
+
+/+
+// kernel32 winxp/vista
+version(ANSI){
+HANDLE CreateActCtxA(
+  ACTCTXA* pActCtx
+);
+}
+else{
+HANDLE CreateActCtxW(
+  ACTCTXW* pActCtx
+);
+}
+BOOL ActivateActCtx(
+  HACTCTX hActCtx,
+  uint* lpCookie
+);
++/
 }
 //--------------------------------------------------------------------------------------
 
--- a/dwt/internal/win32/WINTYPES.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/internal/win32/WINTYPES.d	Wed Feb 06 15:45:27 2008 +0100
@@ -82,6 +82,49 @@
     UINT uStateOld;
     LPARAM lParam;
 }
+
+struct ACTCTXA {
+  ULONG cbSize;
+  DWORD dwFlags;
+  LPCSTR lpSource;
+  USHORT wProcessorArchitecture;
+  LANGID wLangId;
+  LPCTSTR lpAssemblyDirectory;
+  LPCTSTR lpResourceName;
+  LPCTSTR lpApplicationName;
+  HMODULE hModule;
+}
+struct ACTCTXW {
+  ULONG cbSize;
+  DWORD dwFlags;
+  LPCWSTR lpSource;
+  USHORT wProcessorArchitecture;
+  LANGID wLangId;
+  LPCTSTR lpAssemblyDirectory;
+  LPCTSTR lpResourceName;
+  LPCTSTR lpApplicationName;
+  HMODULE hModule;
+}
+version(ANSI) alias ACTCTXA ACTCTX;
+else          alias ACTCTXW ACTCTX;
+alias HANDLE HACTCTX;
+
+struct OSVERSIONINFOEX {
+  DWORD dwOSVersionInfoSize;
+  DWORD dwMajorVersion;
+  DWORD dwMinorVersion;
+  DWORD dwBuildNumber;
+  DWORD dwPlatformId;
+  TCHAR szCSDVersion[128];
+  WORD wServicePackMajor;
+  WORD wServicePackMinor;
+  WORD wSuiteMask;
+  BYTE wProductType;
+  BYTE wReserved;
+}
+
+
+
 // ....
 //--------------------------------------------------------------------------------
 
--- a/dwt/widgets/Button.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Button.d	Wed Feb 06 15:45:27 2008 +0100
@@ -221,6 +221,7 @@
                             imageBits = OS.BS_BITMAP;
                             fImageType = OS.IMAGE_BITMAP;
                             break;
+                        default:
                     }
                     break;
                 }
@@ -230,6 +231,7 @@
                     fImageType = OS.IMAGE_ICON;
                     break;
                 }
+                default:
             }
             /*
             * Feature in Windows.  The button control mirrors its image when the
@@ -1207,6 +1209,7 @@
                 }
             }
             postEvent (DWT.Selection);
+        default:
     }
     return super.wmCommandChild (wParam, lParam);
 }
@@ -1245,6 +1248,7 @@
             case DWT.DOWN: iStateId = OS.ABS_DOWNNORMAL; break;
             case DWT.LEFT: iStateId = OS.ABS_LEFTNORMAL; break;
             case DWT.RIGHT: iStateId = OS.ABS_RIGHTNORMAL; break;
+            default:
         }
         /*
         * NOTE: The normal, hot, pressed and disabled state is
@@ -1261,6 +1265,7 @@
             case DWT.DOWN: uState = OS.DFCS_SCROLLDOWN; break;
             case DWT.LEFT: uState = OS.DFCS_SCROLLLEFT; break;
             case DWT.RIGHT: uState = OS.DFCS_SCROLLRIGHT; break;
+            default:
         }
         if (!getEnabled ()) uState |= OS.DFCS_INACTIVE;
         if ((style & DWT.FLAT) is DWT.FLAT) uState |= OS.DFCS_FLAT;
--- a/dwt/widgets/ColorDialog.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/ColorDialog.d	Wed Feb 06 15:45:27 2008 +0100
@@ -132,6 +132,7 @@
             }
             break;
         }
+        default:
     }
     return 0;
 }
--- a/dwt/widgets/Combo.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Combo.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1327,6 +1327,7 @@
         case OS.WM_KEYDOWN:
             if ((stateMask & (DWT.ALT | DWT.SHIFT | DWT.CONTROL)) !is 0) return false;
             break;
+        default:
     }
 
     /*
@@ -1914,6 +1915,7 @@
                     return false;
                 }
             }
+        default:
     }
     return super.translateTraversal (msg);
 }
@@ -2065,6 +2067,7 @@
                         result = wmClipboard (hwnd, msg, wParam, lParam);
                     }
                     break;
+                default:
             }
             if (result !is LRESULT.NULL) return result;
             return callWindowProc (hwnd, msg, wParam, lParam);
@@ -2259,6 +2262,7 @@
                     return LRESULT.ZERO;
                 }
             }
+        default:
     }
     return result;
 }
@@ -2311,6 +2315,7 @@
             //newText = buffer.toString (0, length_);
             newText = TCHARzToStr( cast(TCHAR*)lParam );
             break;
+        default:
     }
     if (newText !is null) {
         char[] oldText = newText;
@@ -2400,6 +2405,7 @@
             sendFocusEvent (DWT.FocusOut);
             if (isDisposed ()) return LRESULT.ZERO;
             break;
+        default:
     }
     return super.wmCommandChild (wParam, lParam);
 }
--- a/dwt/widgets/Composite.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Composite.d	Wed Feb 06 15:45:27 2008 +0100
@@ -991,6 +991,7 @@
             case OS.VK_NEXT:
                 OS.SendMessage (msg.hwnd, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0);
                 break;
+            default:
         }
     }
     return super.translateTraversal (msg);
@@ -1461,6 +1462,7 @@
                     }
                 if (code is 0) return LRESULT.ZERO;
                 return cast( LRESULT )(code);
+            default:
         }
     }
     /* Return the result */
@@ -1600,6 +1602,7 @@
                 }
                 break;
             }
+            default:
         }
     }
     return super.wmNotify (hdr, wParam, lParam);
--- a/dwt/widgets/Control.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Control.d	Wed Feb 06 15:45:27 2008 +0100
@@ -53,6 +53,12 @@
 import dwt.dwthelper.utils;
 import dwt.dwthelper.System;
 
+import tango.util.log.Trace;
+static import tango.sys.Common;
+void trc( int line ){
+    Trace.formatln( "Control {}", line );
+}
+
 /**
  * Control is the abstract superclass of all windowed user interface classes.
  * <p>
@@ -2411,6 +2417,7 @@
                     shell.setActiveControl (null);
                 }
                 break;
+            default:
         }
     }
     return true;
@@ -3437,6 +3444,7 @@
         case DWT.TRAVERSE_MNEMONIC:     return traverseMnemonic (event.character);
         case DWT.TRAVERSE_PAGE_NEXT:        return traversePage (true);
         case DWT.TRAVERSE_PAGE_PREVIOUS:    return traversePage (false);
+        default:
     }
     return false;
 }
@@ -3796,6 +3804,7 @@
         case OS.WM_XBUTTONDBLCLK:       result = WM_XBUTTONDBLCLK (wParam, lParam); break;
         case OS.WM_XBUTTONDOWN:         result = WM_XBUTTONDOWN (wParam, lParam); break;
         case OS.WM_XBUTTONUP:           result = WM_XBUTTONUP (wParam, lParam); break;
+        default:
     }
     if (result !is LRESULT.NULL) return result;
     return callWindowProc (hwnd, msg, wParam, lParam);
@@ -4458,6 +4467,7 @@
             /* Save the focus widget when the shell is minimized */
             menuShell ().saveFocus ();
             break;
+        default:
     }
     return LRESULT.NULL;
 }
--- a/dwt/widgets/CoolBar.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/CoolBar.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1208,10 +1208,12 @@
                     case OS.CDDS_POSTERASE:
                         drawBackground (nmcd.hdc);
                         break;
+                    default:
                 }
             }
             break;
         }
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
--- a/dwt/widgets/DateTime.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/DateTime.d	Wed Feb 06 15:45:27 2008 +0100
@@ -399,6 +399,7 @@
                 // skip the preceding separator
                 while (start > 0 && buffer.charAt (start) !is MONTH_FORMAT_CONSTANT) start--;
                 break;
+            default:
             }
             break;
         }
@@ -793,6 +794,7 @@
         case OS.DTN_DATETIMECHANGE:
             sendEvent (DWT.Selection);
             break;
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
--- a/dwt/widgets/Decorations.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Decorations.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1026,6 +1026,7 @@
             case DWT.ICON:
                 hSmallIcon = smallIcon.handle;
                 break;
+            default:
         }
     } else {
         /*
@@ -1052,6 +1053,7 @@
             case DWT.ICON:
                 hLargeIcon = largeIcon.handle;
                 break;
+            default:
         }
     }
     OS.SendMessage (handle, OS.WM_SETICON, OS.ICON_BIG, hLargeIcon);
@@ -1496,6 +1498,7 @@
                     return true;
                 case OS.VK_F6:
                     if (traverseDecorations (true)) return true;
+                default:
             }
             return false;
         }
@@ -1504,6 +1507,7 @@
                 case OS.VK_F4:
                     OS.PostMessage (shell.handle, OS.WM_CLOSE, 0, 0);
                     return true;
+                default:
             }
             return false;
         }
@@ -1610,6 +1614,7 @@
         case Display.SWT_GETACCELCOUNT:
             if (hAccel is cast(HACCEL)-1) createAccelerators ();
             return msg is Display.SWT_GETACCELCOUNT ? nAccel : cast(int)hAccel;
+        default:
     }
     return super.windowProc (hwnd, msg, wParam, lParam);
 }
@@ -1784,6 +1789,7 @@
                 newWidth = rect.width;
                 newHeight = rect.height;
                 break;
+            default:
         }
         changed = newWidth !is oldWidth || newHeight !is oldHeight;
         if (changed) {
@@ -1816,6 +1822,7 @@
                 traverseDecorations (true);
                 return LRESULT.ZERO;
             }
+            default:
         }
     }
     return result;
--- a/dwt/widgets/DirectoryDialog.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/DirectoryDialog.d	Wed Feb 06 15:45:27 2008 +0100
@@ -117,6 +117,7 @@
             OS.MoveMemory (buffer, lParam, byteCount);
             directoryPath = buffer.toString (0, length);
             break;
+        default:
     }
     return 0;
 }
--- a/dwt/widgets/Display.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Display.d	Wed Feb 06 15:45:27 2008 +0100
@@ -151,7 +151,7 @@
     //Callback windowCallback;
     //int windowProc_;
     int threadId;
-    TCHAR* windowClass_, windowShadowClass;
+    TCHAR[] windowClass_, windowShadowClass;
     static int WindowClassCount;
     static const char[] WindowName = "SWT_Window"; //$NON-NLS-1$
     static const char[] WindowShadowName = "SWT_WindowShadow"; //$NON-NLS-1$
@@ -827,6 +827,7 @@
             alphaData = data.alphaData;
             transparentPixel = data.transparentPixel;
             break;
+        default:
     }
     BITMAP bm;
     OS.GetObject (hBitmap, BITMAP.sizeof, &bm);
@@ -878,6 +879,7 @@
                     green = cast(byte)((transparentPixel & 0xFF0000) >> 16);
                     red = cast(byte)((transparentPixel & 0xFF00) >> 8);
                     break;
+                default:
             }
         }
     }
@@ -991,6 +993,7 @@
                     green = cast(byte)((transparentPixel & 0xFF0000) >> 16);
                     red = cast(byte)((transparentPixel & 0xFF00) >> 8);
                     break;
+                default:
             }
         }
     }
@@ -1191,6 +1194,7 @@
             //embeddedProc_ = getMsgProc_ = 0;
             break;
         }
+        default:
     }
     return OS.DefWindowProc (hwnd, msg, wParam, lParam);
 }
@@ -1440,6 +1444,7 @@
             //FALL THROUGH
         case DWT.MouseUp:
             return clickCount;
+        default:
     }
     return 0;
 }
@@ -1997,7 +2002,7 @@
     if (embeddedHwnd is null) {
         auto hInstance = OS.GetModuleHandle (null);
         embeddedHwnd = OS.CreateWindowEx (0,
-            windowClass_,
+            windowClass_.ptr,
             null,
             OS.WS_OVERLAPPED,
             0, 0, 0, 0,
@@ -2027,6 +2032,7 @@
                     //OS.MoveMemory (lParam, msg, MSG.sizeof);
                 }
             }
+            default:
         }
     }
     return OS.CallNextHookEx (msgHook, code, wParam, lParam);
@@ -2156,6 +2162,7 @@
             gc.dispose ();
             return downArrow;
         }
+        default:
     }
     return null;
 }
@@ -2374,6 +2381,7 @@
             auto hIcon = OS.LoadImage (null, cast(wchar*)OS.OIC_BANG, OS.IMAGE_ICON, 0, 0, OS.LR_SHARED);
             return warningIcon = Image.win32_new (this, DWT.ICON, hIcon);
         }
+        default:
     }
     return null;
 }
@@ -2494,8 +2502,8 @@
     threadId = OS.GetCurrentThreadId ();
 
     /* Use the character encoding for the default locale */
-    windowClass_ = StrToTCHARz ( WindowName ~ to!(char[])(WindowClassCount));
-    windowShadowClass = StrToTCHARz ( WindowShadowName ~ to!(char[])(WindowClassCount));
+    windowClass_ = StrToTCHARs ( 0, WindowName ~ to!(char[])(WindowClassCount), true );
+    windowShadowClass = StrToTCHARs ( 0, WindowShadowName ~ to!(char[])(WindowClassCount), true );
     WindowClassCount++;
 
     /* Register the DWT window class */
@@ -2506,25 +2514,23 @@
     lpWndClass.lpfnWndProc = &windowProcFunc;
     lpWndClass.style = OS.CS_BYTEALIGNWINDOW | OS.CS_DBLCLKS;
     lpWndClass.hCursor = OS.LoadCursor (null, cast(wchar*)OS.IDC_ARROW);
-    int len = strlenz( windowClass_ );
-    int byteCount = len * TCHAR.sizeof;
-    lpWndClass.lpszClassName = cast(wchar*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
-    lpWndClass.lpszClassName[ 0 .. len ] = windowClass_[ 0 .. len ];
+    int byteCount = windowClass_.length * TCHAR.sizeof;
+    lpWndClass.lpszClassName = cast(TCHAR*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+    OS.MoveMemory (lpWndClass.lpszClassName, windowClass_.ptr, byteCount);
     OS.RegisterClass (&lpWndClass);
     OS.HeapFree (hHeap, 0, lpWndClass.lpszClassName);
 
     /* Register the DWT drop shadow window class */
     if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) lpWndClass.style |= OS.CS_DROPSHADOW;
-    len = strlenz( windowShadowClass );
-    byteCount = len * TCHAR.sizeof;
-    lpWndClass.lpszClassName = cast(wchar*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
-    lpWndClass.lpszClassName[ 0 .. len ] = windowShadowClass[ 0 .. len ];
+    byteCount = windowShadowClass.length * TCHAR.sizeof;
+    lpWndClass.lpszClassName = cast(TCHAR*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+    OS.MoveMemory (lpWndClass.lpszClassName, windowShadowClass.ptr, byteCount);
     OS.RegisterClass (&lpWndClass);
     OS.HeapFree (hHeap, 0, lpWndClass.lpszClassName);
 
     /* Create the message only HWND */
     hwndMessage = OS.CreateWindowEx (0,
-        windowClass_,
+        windowClass_.ptr,
         null,
         OS.WS_OVERLAPPED,
         0, 0, 0, 0,
@@ -2909,6 +2915,7 @@
                         }
                         break;
                     }
+                    default:
                 }
                 if (!accentKey && !ignoreNextKey) {
                     keyMsg.hwnd = control.handle;
@@ -2937,6 +2944,7 @@
                             }
                         }
                     }
+                    default:
                 }
             }
             if (consumed) {
@@ -3026,6 +3034,7 @@
                 case 1:
                 case OS.SPI_SETHIGHCONTRAST:
                     OS.SetTimer (hwndMessage, SETTINGS_ID, SETTINGS_DELAY, null);
+                default:
             }
             break;
         }
@@ -3134,6 +3143,7 @@
             }
             break;
         }
+        default:
     }
     return OS.CallNextHookEx (filterHook, code, wParam, lParam);
 }
@@ -3156,6 +3166,7 @@
         case OS.VK_SUBTRACT:    return '-';
         case OS.VK_DECIMAL: return '.';
         case OS.VK_DIVIDE:      return '/';
+        default:
     }
     return 0;
 }
@@ -3323,6 +3334,7 @@
             OS.HeapFree (hHeap, 0, pInputs);
             return result;
         }
+        default:
     }
     return false;
 }
@@ -3498,10 +3510,10 @@
     /* Unregister the DWT window class */
     auto hHeap = OS.GetProcessHeap ();
     auto hInstance = OS.GetModuleHandle (null);
-    OS.UnregisterClass (windowClass_, hInstance);
+    OS.UnregisterClass (windowClass_.ptr, hInstance);
 
     /* Unregister the DWT drop shadow window class */
-    OS.UnregisterClass (windowShadowClass, hInstance);
+    OS.UnregisterClass (windowShadowClass.ptr, hInstance);
     windowClass_ = windowShadowClass = null;
     //windowCallback.dispose ();
     //windowCallback = null;
@@ -4310,6 +4322,7 @@
                 default:
             }
             break;
+        default:
     }
     return false;
 }
@@ -4524,7 +4537,7 @@
 }
 
 char[] windowClass(){
-    return TCHARzToStr( windowClass_ );
+    return TCHARsToStr( windowClass_ );
 }
 
 }
--- a/dwt/widgets/ExpandBar.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/ExpandBar.d	Wed Feb 06 15:45:27 2008 +0100
@@ -617,6 +617,7 @@
             }
             break;
         }
+        default:
     }
     return result;
 }
--- a/dwt/widgets/FileDialog.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/FileDialog.d	Wed Feb 06 15:45:27 2008 +0100
@@ -183,6 +183,7 @@
               }
           }
           break;
+        default:
     }
     return 0;
 }
@@ -331,6 +332,7 @@
         case OS.FNERR_BUFFERTOOSMALL:
             USE_HOOK = true;
             break;
+        default:
     }
     display.runMessagesInIdle = oldRunMessagesInIdle;
 
--- a/dwt/widgets/Group.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Group.d	Wed Feb 06 15:45:27 2008 +0100
@@ -154,6 +154,7 @@
         case OS.WM_LBUTTONDOWN:
         case OS.WM_LBUTTONDBLCLK:
             return cast(LRESULT) OS.DefWindowProc (hwnd, msg, wParam, lParam);
+        default:
     }
     return cast(LRESULT) OS.CallWindowProc (GroupProc, hwnd, msg, wParam, lParam);
 }
--- a/dwt/widgets/Link.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Link.d	Wed Feb 06 15:45:27 2008 +0100
@@ -697,6 +697,7 @@
                     }
                 }
                 break;
+            default:
         }
     } else {
         switch (wParam) {
@@ -711,6 +712,7 @@
                 */
                 int code = callWindowProc (handle, OS.WM_KEYDOWN, wParam, lParam);
                 return cast(LRESULT) (code);
+            default:
         }
 
     }
@@ -775,6 +777,7 @@
                 * is normally performed in WM_KEYDOWN from WM_CHAR.
                 */
                 return LRESULT.ZERO;
+            default:
         }
     }
     return result;
@@ -976,6 +979,7 @@
                 event.text = ids [item.item.iLink];
                 sendEvent (DWT.Selection, event);
                 break;
+            default:
         }
     }
     return cast(LRESULT) super.wmNotifyChild (hdr, wParam, lParam);
--- a/dwt/widgets/List.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/List.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1569,6 +1569,7 @@
         case OS.LBN_DBLCLK:
             postEvent (DWT.DefaultSelection);
             break;
+        default:
     }
     return super.wmCommandChild (wParam, lParam);
 }
--- a/dwt/widgets/Sash.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Sash.d	Wed Feb 06 15:45:27 2008 +0100
@@ -265,6 +265,7 @@
                 }
             }
             return result;
+        default:
     }
     return result;
 }
--- a/dwt/widgets/Scale.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Scale.d	Wed Feb 06 15:45:27 2008 +0100
@@ -496,6 +496,7 @@
         case OS.TB_ENDTRACK:
         case OS.TB_THUMBPOSITION:
             return LRESULT.NULL;
+        default:
     }
 
     Event event = new Event ();
@@ -511,6 +512,7 @@
 //      case OS.TB_LINEUP:      event.detail = DWT.ARROW_UP;  break;
 //      case OS.TB_PAGEDOWN:    event.detail = DWT.PAGE_DOWN;  break;
 //      case OS.TB_PAGEUP:      event.detail = DWT.PAGE_UP;  break;
+//      default:
 //  }
 
     /*
--- a/dwt/widgets/ScrollBar.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/ScrollBar.d	Wed Feb 06 15:45:27 2008 +0100
@@ -676,6 +676,7 @@
                 case OS.SB_VERT:
                     bar = parent.getHorizontalBar ();
                     break;
+                default:
             }
             bool both = bar !is null && !bar.getVisible ();
             OS.ShowScrollBar (hwnd, both ? OS.SB_BOTH : flags, false);
@@ -915,6 +916,7 @@
         case OS.SB_LINEUP:          event.detail = DWT.ARROW_UP;  break;
         case OS.SB_PAGEDOWN:        event.detail = DWT.PAGE_DOWN;  break;
         case OS.SB_PAGEUP:          event.detail = DWT.PAGE_UP;  break;
+        default:
     }
     sendEvent (DWT.Selection, event);
     // the widget could be destroyed at this point
--- a/dwt/widgets/Scrollable.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Scrollable.d	Wed Feb 06 15:45:27 2008 +0100
@@ -406,6 +406,7 @@
                 int pageIncrement = bar.getPageIncrement ();
                 info.nPos = Math.max (info.nMin, info.nPos - pageIncrement);
                 break;
+            default:
         }
         OS.SetScrollInfo (hwnd, type, &info, true);
     } else {
--- a/dwt/widgets/Shell.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Shell.d	Wed Feb 06 15:45:27 2008 +0100
@@ -31,6 +31,11 @@
 
 import dwt.dwthelper.utils;
 
+import tango.util.log.Trace;
+void trc( int line ){
+    Trace.formatln( "Shell {}", line );
+}
+
 /**
  * Instances of this class represent the "windows"
  * which the desktop or "window manager" is managing.
@@ -494,6 +499,7 @@
             case OS.WM_KILLFOCUS:
             case OS.WM_SETFOCUS:
                 return cast(LRESULT) OS.DefWindowProc (hwnd, msg, wParam, lParam);
+            default:
         }
         return cast(LRESULT) DialogProc( hwnd, msg, wParam, lParam);
     }
@@ -737,6 +743,7 @@
                     if (logBrush.lbHatch is value) return hBrush;
                 }
                 break;
+            default:
         }
     }
     int length_ = brushes.length;
@@ -750,6 +757,7 @@
         case OS.BS_PATTERN:
             hBrush = OS.CreatePatternBrush ( cast(HBITMAP) value);
             break;
+        default:
     }
     return brushes [0] = hBrush;
 }
@@ -1763,7 +1771,7 @@
     static if (OS.IsSP) return DialogClass;
     if ((style & DWT.TOOL) !is 0) {
         int trim = DWT.TITLE | DWT.CLOSE | DWT.MIN | DWT.MAX | DWT.BORDER | DWT.RESIZE;
-        if ((style & trim) is 0) return TCHARzToStr( display.windowShadowClass );
+        if ((style & trim) is 0) return TCHARsToStr( display.windowShadowClass );
     }
     return parent !is null ? TCHARzToStr(DialogClass.ptr) : super.windowClass ();
 }
@@ -1798,6 +1806,7 @@
                 }
                 break;
             }
+            default:
         }
         return callWindowProc (hwnd, msg, wParam, lParam);
     }
@@ -2213,6 +2222,7 @@
                         case OS.WM_MBUTTONDOWN:
                         case OS.WM_XBUTTONDOWN:
                             OS.MessageBeep (OS.MB_OK);
+                        default:
                     }
                     return LRESULT.ONE;
                 }
@@ -2298,6 +2308,7 @@
                     OS.ShowWindow (handle, OS.SW_SHOWMINIMIZED);
                     return LRESULT.ZERO;
                 }
+            default:
         }
     }
     return result;
--- a/dwt/widgets/Slider.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Slider.d	Wed Feb 06 15:45:27 2008 +0100
@@ -189,6 +189,7 @@
         case OS.WM_LBUTTONDOWN:
         case OS.WM_LBUTTONDBLCLK:
             display.runDeferredEvents ();
+        default:
     }
     return cast(LRESULT) OS.CallWindowProc (ScrollBarProc, hwnd, msg, wParam, lParam);
 }
@@ -671,6 +672,7 @@
                 int code = callWindowProc (handle, OS.WM_KEYDOWN, key, lParam);
                 return cast(LRESULT) (code);
             }
+            default:
         }
     }
     return result;
@@ -793,6 +795,7 @@
             event.detail = DWT.PAGE_UP;
             info.nPos = Math.max (info.nMin, info.nPos - pageIncrement);
             break;
+        default:
     }
     OS.SetScrollInfo (handle, OS.SB_CTL, &info, true);
 
--- a/dwt/widgets/Spinner.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Spinner.d	Wed Feb 06 15:45:27 2008 +0100
@@ -723,6 +723,7 @@
         case OS.WM_KEYDOWN:
             if ((stateMask & (DWT.ALT | DWT.SHIFT | DWT.CONTROL)) !is 0) return false;
             break;
+        default:
     }
 
     /*
@@ -1137,6 +1138,7 @@
                     result = wmClipboard (hwnd, msg, wParam, lParam);
                 }
                 break;
+            default:
         }
         if (result !is LRESULT.NULL) return result;
         return callWindowProc (hwnd, msg, wParam, lParam);
@@ -1195,6 +1197,7 @@
             // FALL THROUGH
         case DWT.TAB:
         case DWT.ESC: return LRESULT.ZERO;
+        default:
     }
     return result;
 }
@@ -1238,6 +1241,7 @@
                 ignoreModify = false;
             }
             break;
+        default:
     }
     if (newText !is null) {
         char[] oldText = newText;
@@ -1283,6 +1287,7 @@
             sendEvent (DWT.Modify);
             if (isDisposed ()) return LRESULT.ZERO;
             break;
+        default:
     }
     return super.wmCommandChild (wParam, lParam);
 }
@@ -1300,6 +1305,7 @@
         case OS.VK_DOWN: delta = -udaccel.nInc; break;
         case OS.VK_PRIOR: delta = pageIncrement; break;
         case OS.VK_NEXT: delta = -pageIncrement; break;
+        default:
     }
     if (delta !is 0) {
         int value = getSelectionText ();
@@ -1326,6 +1332,7 @@
         case OS.VK_UP:
         case OS.VK_DOWN:
             return LRESULT.ZERO;
+        default:
     }
     return result;
 }
@@ -1368,6 +1375,7 @@
                 setSelection (value, true, true, true);
             }
             return LRESULT.ONE;
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
@@ -1378,6 +1386,7 @@
         case OS.SB_THUMBPOSITION:
             postEvent (DWT.Selection);
             break;
+        default:
     }
     return super.wmScrollChild (wParam, lParam);
 }
--- a/dwt/widgets/TabFolder.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/TabFolder.d	Wed Feb 06 15:45:27 2008 +0100
@@ -889,6 +889,7 @@
                 }
                 break;
             }
+            default:
         }
     }
     return result;
@@ -986,6 +987,7 @@
                 event.item = item;
                 postEvent (DWT.Selection, event);
             }
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
--- a/dwt/widgets/Table.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Table.d	Wed Feb 06 15:45:27 2008 +0100
@@ -179,6 +179,7 @@
             //TODO - LVS_EX_LABELTIP causes white rectangles (turn it off)
             OS.SendMessage (handle, OS.LVM_SETEXTENDEDLISTVIEWSTYLE, OS.LVS_EX_LABELTIP, 0);
             break;
+        default:
     }
 }
 
@@ -292,6 +293,7 @@
                 topIndex = OS.SendMessage (handle, OS.LVM_GETTOPINDEX, 0, 0);
             }
         }
+        default:
     }
     bool oldSelected = wasSelected;
     if (checkSelection) wasSelected = false;
@@ -361,6 +363,7 @@
                 }
             }
         }
+        default:
     }
     return cast(LRESULT) code;
 }
@@ -4941,6 +4944,7 @@
                 case DWT.DOWN:
                     sortColumn.setImage (display.getSortImage (sortDirection), true, true);
                     break;
+                default:
             }
         }
     }
@@ -5032,6 +5036,7 @@
                     case OS.TTN_GETDISPINFOA:
                     case OS.TTN_GETDISPINFOW:
                         return OS.SendMessage (handle, msg, wParam, lParam);
+                    default:
                 }
                 break;
             }
@@ -5059,6 +5064,7 @@
                 }
                 break;
             }
+            default:
         }
         return callWindowProc (hwnd, msg, wParam, lParam);
     }
@@ -5103,6 +5109,7 @@
                 postEvent (DWT.DefaultSelection, event);
             }
             return LRESULT.ZERO;
+        default:
     }
     return result;
 }
@@ -5212,6 +5219,7 @@
         case OS.VK_DOWN:
             OS.SendMessage (handle, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0);
             break;
+        default:
     }
     return result;
 }
@@ -5650,6 +5658,7 @@
             case OS.SB_PAGEUP:
                 OS.InvalidateRect (handle, null, true);
                 break;
+            default:
         }
     }
     return result;
@@ -5714,6 +5723,7 @@
                             column.pack ();
                             return LRESULT.ONE;
                         }
+                    default:
                 }
                 break;
             }
@@ -5843,6 +5853,7 @@
                 }
                 break;
             }
+            default:
         }
     }
     LRESULT result = super.wmNotify (hdr, wParam, lParam);
@@ -5855,6 +5866,7 @@
             tipRequested = false;
             return cast(LRESULT) (code);
         }
+        default:
     }
     return result;
 }
@@ -6033,6 +6045,7 @@
                 case OS.CDDS_SUBITEMPREPAINT: return CDDS_SUBITEMPREPAINT (nmcd, wParam, lParam);
                 case OS.CDDS_SUBITEMPOSTPAINT: return CDDS_SUBITEMPOSTPAINT (nmcd, wParam, lParam);
                 case OS.CDDS_POSTPAINT: return CDDS_POSTPAINT (nmcd, wParam, lParam);
+                default:
             }
             break;
         }
@@ -6144,6 +6157,7 @@
                 }
             }
             break;
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
--- a/dwt/widgets/Text.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Text.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1358,6 +1358,7 @@
         case OS.WM_KEYDOWN:
             if ((stateMask & (DWT.ALT | DWT.SHIFT | DWT.CONTROL)) !is 0) return false;
             break;
+        default:
     }
 
     /*
@@ -2063,6 +2064,7 @@
             if (OS.GetKeyState (OS.VK_CONTROL) < 0) {
                 return LRESULT.ZERO;
             }
+        default:
     }
 
     /*
@@ -2079,6 +2081,7 @@
                 // FALL THROUGH
             case DWT.TAB:
             case DWT.ESC: return LRESULT.ZERO;
+            default:
         }
     }
     return result;
@@ -2323,6 +2326,7 @@
                 ignoreModify = ignoreCharacter = false;
             }
             break;
+        default:
     }
     if (newText !is null) {
         char[] oldText = newText;
@@ -2410,6 +2414,7 @@
             style |= DWT.RIGHT_TO_LEFT;
             fixAlignment ();
             break;
+        default:
     }
     return super.wmCommandChild (wParam, lParam);
 }
--- a/dwt/widgets/ToolBar.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/ToolBar.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1086,6 +1086,7 @@
                     return LRESULT.ZERO;
                 }
             }
+        default:
     }
     return result;
 }
@@ -1153,6 +1154,7 @@
             * application the opportunity to cancel the operation.
             */
             return LRESULT.ZERO;
+        default:
     }
     return result;
 }
@@ -1373,6 +1375,7 @@
                     }
                     return cast(LRESULT) (OS.CDRF_SKIPDEFAULT);
                 }
+                default:
             }
             break;
         case OS.TBN_HOTITEMCHANGE:
@@ -1390,9 +1393,11 @@
                             return LRESULT.ONE;
                         }
                         break;
+                    default:
                 }
             }
             break;
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
--- a/dwt/widgets/Tracker.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Tracker.d	Wed Feb 06 15:45:27 2008 +0100
@@ -558,6 +558,7 @@
                 case OS.WM_SYSCHAR: wmSysChar (msg.hwnd, msg.wParam, msg.lParam); break;
                 case OS.WM_SYSKEYDOWN: wmSysKeyDown (msg.hwnd, msg.wParam, msg.lParam); break;
                 case OS.WM_SYSKEYUP: wmSysKeyUp (msg.hwnd, msg.wParam, msg.lParam); break;
+                default:
             }
             if (OS.WM_KEYFIRST <= msg.message && msg.message <= OS.WM_KEYLAST) continue;
             if (OS.WM_MOUSEFIRST <= msg.message && msg.message <= OS.WM_MOUSELAST) continue;
@@ -903,6 +904,7 @@
                 OS.EndPaint (hwnd, &ps);
                 return 0;
             }
+        default:
     }
     return OS.CallWindowProc (oldProc, hwnd, msg, wParam, lParam);
 }
@@ -944,6 +946,7 @@
         case OS.VK_DOWN:
             yChange = stepSize;
             break;
+        default:
     }
     if (xChange !is 0 || yChange !is 0) {
         Rectangle [] oldRectangles = rectangles;
--- a/dwt/widgets/TrayItem.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/TrayItem.d	Wed Feb 06 15:45:27 2008 +0100
@@ -306,6 +306,7 @@
                 }
             }
             break;
+        default:
     }
     display.wakeThread ();
     return 0;
@@ -420,6 +421,7 @@
             case DWT.ICON:
                 hIcon = icon.handle;
                 break;
+            default:
         }
     }
     NOTIFYICONDATA iconData;
--- a/dwt/widgets/Tree.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Tree.d	Wed Feb 06 15:45:27 2008 +0100
@@ -247,6 +247,7 @@
             }
             break;
         }
+        default:
     }
 }
 
@@ -1533,6 +1534,7 @@
             }
             break;
         }
+        default:
     }
     HANDLE hItem;
     bool redraw = false;
@@ -1587,6 +1589,7 @@
             }
             break;
         }
+        default:
     }
     int code = OS.CallWindowProc (TreeProc, hwnd, msg, wParam, lParam);
     switch (msg) {
@@ -1650,6 +1653,7 @@
         case OS.WM_PAINT:
             painted = true;
             break;
+        default:
     }
     return cast(LRESULT) code;
 }
@@ -2149,6 +2153,7 @@
             case OS.TVI_LAST:
                 hFirstIndexOf = hLastIndexOf = hFirstItem = hNewItem;
                 itemCount = lastIndexOf = 0;
+            default:
         }
     }
     if (hFirstItem is hFirstIndexOf && itemCount !is -1) itemCount++;
@@ -5211,6 +5216,7 @@
                 case DWT.DOWN:
                     sortColumn.setImage (display.getSortImage (sortDirection), true, true);
                     break;
+                default:
             }
         }
     }
@@ -5319,6 +5325,7 @@
                     case OS.TTN_GETDISPINFOA:
                     case OS.TTN_GETDISPINFOW:
                         return OS.SendMessage (handle, msg, wParam, lParam);
+                    default:
                 }
                 break;
             }
@@ -5346,6 +5353,7 @@
                 }
                 break;
             }
+            default:
         }
         return callWindowProc (hwnd, msg, wParam, lParam);
     }
@@ -5423,6 +5431,7 @@
                 OS.SetScrollInfo (hwndParent, OS.SB_VERT, &info, true);
                 return cast(LRESULT)code;
             }
+            default:
         }
         return callWindowProc (hwnd, msg, wParam, lParam);
     }
@@ -5511,6 +5520,7 @@
         }
         case DWT.ESC:
             return LRESULT.ZERO;
+        default:
     }
     return result;
 }
@@ -5662,6 +5672,7 @@
                         case OS.VK_END:
                             hNewItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_LASTVISIBLE, 0);
                             break;
+                        default:
                     }
                     if (hNewItem !is null) {
                         OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hNewItem);
@@ -5709,6 +5720,7 @@
             hAnchor = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0);
             return cast(LRESULT) (code);
         }
+        default:
     }
     return result;
 }
@@ -6593,6 +6605,7 @@
                         if (result !is LRESULT.NULL) return result;
                     }
                 }
+                default:
             }
         }
     }
@@ -6627,6 +6640,7 @@
                     case OS.HDN_DIVIDERDBLCLICKW:
                     case OS.HDN_DIVIDERDBLCLICKA:
                         if (column !is null) column.pack ();
+                    default:
                 }
                 break;
             }
@@ -6796,6 +6810,7 @@
                 }
                 break;
             }
+            default:
         }
     }
     return super.wmNotify (hdr, wParam, lParam);
@@ -6955,6 +6970,7 @@
                 case OS.CDDS_ITEMPREPAINT: return CDDS_ITEMPREPAINT (nmcd, wParam, lParam);
                 case OS.CDDS_ITEMPOSTPAINT: return CDDS_ITEMPOSTPAINT (nmcd, wParam, lParam);
                 case OS.CDDS_POSTPAINT: return CDDS_POSTPAINT (nmcd, wParam, lParam);
+                default:
             }
             break;
         }
@@ -7119,6 +7135,7 @@
                         sendEvent (DWT.Collapse, event);
                         if (isDisposed ()) return LRESULT.ZERO;
                         break;
+                    default:
                 }
                 /*
                 * Bug in Windows.  When all of the items are deleted during
@@ -7222,6 +7239,7 @@
             }
             break;
         }
+        default:
     }
     return super.wmNotifyChild (hdr, wParam, lParam);
 }
--- a/dwt/widgets/TreeColumn.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/TreeColumn.d	Wed Feb 06 15:45:27 2008 +0100
@@ -637,6 +637,7 @@
                         hdItem.fmt &= ~OS.HDF_IMAGE;
                     }
                     break;
+                default:
             }
             OS.SendMessage (hwndHeader, OS.HDM_SETITEM, index, &hdItem);
             if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
@@ -659,6 +660,7 @@
             case DWT.NONE:
                 setImage (image, false, false);
                 break;
+            default:
         }
     }
 }
--- a/dwt/widgets/Widget.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/dwt/widgets/Widget.d	Wed Feb 06 15:45:27 2008 +0100
@@ -1179,6 +1179,7 @@
             if (event.keyCode is DWT.SHIFT) event.stateMask |= DWT.SHIFT;
             if (event.keyCode is DWT.CONTROL) event.stateMask |= DWT.CONTROL;
             break;
+        default:
     }
     return true;
 }
@@ -1199,6 +1200,7 @@
         case DWT.LF:
             if (display.lastKey is DWT.CR) display.lastAscii = DWT.CR;
             break;
+        default:
     }
 
     /*
@@ -1397,6 +1399,7 @@
         case OS.VK_NUMLOCK:
         case OS.VK_SCROLL:
             if ((lParam & 0x40000000) !is 0) return LRESULT.NULL;
+        default:
     }
 
     /* Clear last key and last ascii because a new key has been typed */
@@ -1429,6 +1432,7 @@
             case OS.VK_DELETE: mapKey = DWT.DEL; break;
             case OS.VK_ESCAPE: mapKey = DWT.ESC; break;
             case OS.VK_TAB: mapKey = DWT.TAB; break;
+            default:
         }
     } else {
         mapKey = OS.MapVirtualKey (wParam, 2);
@@ -1657,6 +1661,7 @@
             case OS.VK_DELETE: mapKey = DWT.DEL; break;
             case OS.VK_ESCAPE: mapKey = DWT.ESC; break;
             case OS.VK_TAB: mapKey = DWT.TAB; break;
+            default:
         }
     } else {
         mapKey = OS.MapVirtualKey (wParam, 2);
@@ -2291,6 +2296,7 @@
             int bits = OS.GetWindowLong (hwndShell, OS.GWL_STYLE);
             if ((bits & OS.WS_SYSMENU) !is 0) return LRESULT.NULL;
         }
+        default:
     }
 
     /* Ignore repeating modifier keys by testing key down state */
@@ -2302,6 +2308,7 @@
         case OS.VK_NUMLOCK:
         case OS.VK_SCROLL:
             if ((lParam & 0x40000000) !is 0) return LRESULT.NULL;
+        default:
     }
 
     /* Clear last key and last ascii because a new key has been typed */
@@ -2326,6 +2333,7 @@
             case OS.VK_DELETE: mapKey = DWT.DEL; break;
             case OS.VK_ESCAPE: mapKey = DWT.ESC; break;
             case OS.VK_TAB: mapKey = DWT.TAB; break;
+            default:
         }
     } else {
         mapKey = OS.MapVirtualKey (wParam, 2);
@@ -2359,6 +2367,7 @@
                 case OS.VK_SUBTRACT:
                 case OS.VK_DECIMAL:
                 case OS.VK_DIVIDE: return LRESULT.NULL;
+                default:
             }
             display.lastAscii = display.numpadKey (display.lastKey);
         }
--- a/simple.d	Wed Feb 06 15:12:11 2008 +0100
+++ b/simple.d	Wed Feb 06 15:45:27 2008 +0100
@@ -7,6 +7,7 @@
 import dwt.widgets.Text;
 
 import tango.io.Stdout;
+import tango.util.log.Trace;
 import tango.math.Math;
 import tango.text.convert.Format;
 import tango.util.Convert;
@@ -21,7 +22,6 @@
 void main(){
 
     try{
-
         Display display = new Display();
         Shell shell = new Shell(display);
         shell.setSize(300, 200);
@@ -50,7 +50,7 @@
         }
     }
     catch (Exception e) {
-        Stdout.formatln (e.toString);
+        Stdout.formatln ( "'{}', {}:{}", e.toString, e.file, e.line );
     }
 }