comparison dwt/internal/win32/OS.d @ 91:b5c6e5033649

debug
author Frank Benoit <benoit@tionex.de>
date Wed, 06 Feb 2008 23:12:32 +0100
parents be0b130bb29a
children 3b6217fd97e9
comparison
equal deleted inserted replaced
90:be0b130bb29a 91:b5c6e5033649
20 import dwt.internal.Library; 20 import dwt.internal.Library;
21 import tango.sys.SharedLib : SharedLib; 21 import tango.sys.SharedLib : SharedLib;
22 import tango.util.log.Trace; 22 import tango.util.log.Trace;
23 static import tango.stdc.stdlib; 23 static import tango.stdc.stdlib;
24 24
25 void trace(int line ){
26 Trace.formatln( "OS {}", line );
27 }
25 28
26 // declare of Callback functions 29 // declare of Callback functions
27 extern (Windows) 30 extern (Windows)
28 { 31 {
29 alias int function() Function0; 32 alias int function() Function0;
218 //IsWinCE = (info.dwPlatformId is VER_PLATFORM_WIN32_CE); 221 //IsWinCE = (info.dwPlatformId is VER_PLATFORM_WIN32_CE);
219 //PORTING_CHANGE: made by version 222 //PORTING_CHANGE: made by version
220 //IsSP = IsSP(); 223 //IsSP = IsSP();
221 //PORTING_CHANGE: made by version 224 //PORTING_CHANGE: made by version
222 //IsPPC = IsPPC(); 225 //IsPPC = IsPPC();
223 226 trace(__LINE__);
224 version(WinCE) { 227 version(WinCE) {
225 IsHPC = IsWinCE && !IsPPC && !IsSP; 228 IsHPC = IsWinCE && !IsPPC && !IsSP;
226 } 229 }
227 WIN32_MAJOR = info.dwMajorVersion; 230 WIN32_MAJOR = info.dwMajorVersion;
228 WIN32_MINOR = info.dwMinorVersion; 231 WIN32_MINOR = info.dwMinorVersion;
229 WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR); 232 WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
230 233
234 trace(__LINE__);
231 // when to load uxtheme 235 // when to load uxtheme
232 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 236 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
233 loadLib( Symbols_UxTheme, `UxTheme.dll` ); 237 loadLib( Symbols_UxTheme, `UxTheme.dll` );
234 } 238 }
235 if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 239 if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
236 loadLib( Symbols_CoreImm, `Coreimm.dll` ); 240 loadLib( Symbols_CoreImm, `Coreimm.dll` );
237 } 241 }
238 if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) { 242 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
239 loadLib( Symbols_User32, `User32.dll` ); 243 loadLib( Symbols_User32, `User32.dll` );
240 } 244 }
241 if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 245 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
242 loadLib( Symbols_Imm32, `Imm32.dll` ); 246 loadLib( Symbols_Imm32, `Imm32.dll` );
243 } 247 }
244 if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 248 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
245 loadLib( Symbols_Kernel32, `Kernel32.dll` ); 249 loadLib( Symbols_Kernel32, `Kernel32.dll` );
246 } 250 }
247 251
252 trace(__LINE__);
248 //PORTING_CHANGE: made by version 253 //PORTING_CHANGE: made by version
249 //IsUnicode = !IsWin32s && !IsWin95; 254 //IsUnicode = !IsWin32s && !IsWin95;
250 /* Load the manifest to force the XP Theme */ 255 /* Load the manifest to force the XP Theme */
251 //if (System.getProperty (NO_MANIFEST) is null) { 256 //if (System.getProperty (NO_MANIFEST) is null) {
252 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 257 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
258 trace(__LINE__);
253 TCHAR[] buffer = new TCHAR[ MAX_PATH ]; 259 TCHAR[] buffer = new TCHAR[ MAX_PATH ];
254 HANDLE hModule = OS.GetLibraryHandle (); 260 HANDLE hModule = OS.GetLibraryHandle ();
255 while (OS.GetModuleFileName (hModule, buffer.ptr, buffer.length ) is buffer.length ) { 261 while (OS.GetModuleFileName (hModule, buffer.ptr, buffer.length ) is buffer.length ) {
256 buffer.length = buffer.length + MAX_PATH; 262 buffer.length = buffer.length + MAX_PATH;
257 } 263 }
258 auto hHeap = OS.GetProcessHeap (); 264 auto hHeap = OS.GetProcessHeap ();
259 int byteCount = buffer.length * TCHAR.sizeof; 265 int byteCount = buffer.length * TCHAR.sizeof;
260 TCHAR* pszText = cast(TCHAR*) OS.HeapAlloc (hHeap, HEAP_ZERO_MEMORY, byteCount); 266 TCHAR* pszText = cast(TCHAR*) OS.HeapAlloc (hHeap, HEAP_ZERO_MEMORY, byteCount);
261 OS.MoveMemory (pszText, buffer.ptr, byteCount); 267 OS.MoveMemory (pszText, buffer.ptr, byteCount);
268 trace(__LINE__);
262 ACTCTX pActCtx; 269 ACTCTX pActCtx;
263 pActCtx.cbSize = ACTCTX.sizeof; 270 pActCtx.cbSize = ACTCTX.sizeof;
264 pActCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT; 271 pActCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT;
265 pActCtx.lpSource = pszText; 272 pActCtx.lpSource = pszText;
266 pActCtx.lpResourceName = cast(TCHAR*)MANIFEST_RESOURCE_ID; 273 pActCtx.lpResourceName = cast(TCHAR*)MANIFEST_RESOURCE_ID;
274 trace(__LINE__);
275 Trace.formatln( "is loaded {}", ( OS.CreateActCtx !is null ));
267 HANDLE hActCtx = OS.CreateActCtx (&pActCtx); 276 HANDLE hActCtx = OS.CreateActCtx (&pActCtx);
277 trace(__LINE__);
268 if (pszText !is null) OS.HeapFree (hHeap, 0, pszText); 278 if (pszText !is null) OS.HeapFree (hHeap, 0, pszText);
269 uint lpCookie; 279 uint lpCookie;
270 OS.ActivateActCtx (hActCtx, &lpCookie); 280 OS.ActivateActCtx (hActCtx, &lpCookie);
281 trace(__LINE__);
271 /* 282 /*
272 * NOTE: A single activation context is created and activated 283 * NOTE: A single activation context is created and activated
273 * for the entire lifetime of the program. It is deactivated 284 * for the entire lifetime of the program. It is deactivated
274 * and released by Windows when the program exits. 285 * and released by Windows when the program exits.
275 */ 286 */
281 292
282 /* Get the DBCS flag */ 293 /* Get the DBCS flag */
283 BOOL dbcsEnabled = OS.GetSystemMetrics (SM_DBCSENABLED) !is 0; 294 BOOL dbcsEnabled = OS.GetSystemMetrics (SM_DBCSENABLED) !is 0;
284 BOOL immEnabled = OS.GetSystemMetrics (SM_IMMENABLED) !is 0; 295 BOOL immEnabled = OS.GetSystemMetrics (SM_IMMENABLED) !is 0;
285 IsDBLocale = dbcsEnabled || immEnabled; 296 IsDBLocale = dbcsEnabled || immEnabled;
297 trace(__LINE__);
286 298
287 /* 299 /*
288 * Bug in Windows. On Korean Windows XP when the Text 300 * Bug in Windows. On Korean Windows XP when the Text
289 * Services Framework support for legacy applications 301 * Services Framework support for legacy applications
290 * is enabled, certain legacy calls segment fault. 302 * is enabled, certain legacy calls segment fault.
296 * Note: The bug is fixed in Service Pack 2. 308 * Note: The bug is fixed in Service Pack 2.
297 */ 309 */
298 if (!OS.IsWinCE && OS.WIN32_VERSION is OS.VERSION (5, 1)) { 310 if (!OS.IsWinCE && OS.WIN32_VERSION is OS.VERSION (5, 1)) {
299 short langID = OS.GetSystemDefaultUILanguage (); 311 short langID = OS.GetSystemDefaultUILanguage ();
300 short primaryLang = OS.PRIMARYLANGID (langID); 312 short primaryLang = OS.PRIMARYLANGID (langID);
313 trace(__LINE__);
301 if (primaryLang is LANG_KOREAN) { 314 if (primaryLang is LANG_KOREAN) {
302 OSVERSIONINFOEX infoex; 315 OSVERSIONINFOEX infoex;
303 infoex.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof; 316 infoex.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof;
304 GetVersionEx (cast(OSVERSIONINFO*) &infoex ); 317 GetVersionEx (cast(OSVERSIONINFO*) &infoex );
305 if (infoex.wServicePackMajor < 2) { 318 if (infoex.wServicePackMajor < 2) {
319 trace(__LINE__);
306 OS.ImmDisableTextFrameService (0); 320 OS.ImmDisableTextFrameService (0);
307 } 321 }
308 } 322 }
309 } 323 }
324 trace(__LINE__);
310 325
311 /* Get the COMCTL32.DLL version */ 326 /* Get the COMCTL32.DLL version */
312 DLLVERSIONINFO dvi; 327 DLLVERSIONINFO dvi;
313 dvi.cbSize = DLLVERSIONINFO.sizeof; 328 dvi.cbSize = DLLVERSIONINFO.sizeof;
314 dvi.dwMajorVersion = 4; 329 dvi.dwMajorVersion = 4;
317 //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$ 332 //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$
318 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName); 333 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
319 if (auto lib = SharedLib.load( `comctl32.dll`) ) { 334 if (auto lib = SharedLib.load( `comctl32.dll`) ) {
320 char[] name = "DllGetVersion\0"; //$NON-NLS-1$ 335 char[] name = "DllGetVersion\0"; //$NON-NLS-1$
321 void* DllGetVersion = lib.getSymbol(name.ptr); 336 void* DllGetVersion = lib.getSymbol(name.ptr);
337 trace(__LINE__);
322 if (DllGetVersion !is null){ 338 if (DllGetVersion !is null){
323 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion; 339 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
324 TDllVersion f = cast( TDllVersion )DllGetVersion; 340 TDllVersion f = cast( TDllVersion )DllGetVersion;
341 trace(__LINE__);
325 f(&dvi); 342 f(&dvi);
326 } 343 }
344 trace(__LINE__);
327 lib.unload(); 345 lib.unload();
328 } 346 }
347 trace(__LINE__);
329 COMCTL32_MAJOR = dvi.dwMajorVersion; 348 COMCTL32_MAJOR = dvi.dwMajorVersion;
330 COMCTL32_MINOR = dvi.dwMinorVersion; 349 COMCTL32_MINOR = dvi.dwMinorVersion;
331 COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR); 350 COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);
332 351
333 /* Get the Shell32.DLL version */ 352 /* Get the Shell32.DLL version */
334 dvi = DLLVERSIONINFO.init; 353 dvi = DLLVERSIONINFO.init;
335 dvi.cbSize = DLLVERSIONINFO.sizeof; 354 dvi.cbSize = DLLVERSIONINFO.sizeof;
336 dvi.dwMajorVersion = 4; 355 dvi.dwMajorVersion = 4;
337 //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$ 356 //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$
338 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName); 357 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
358 trace(__LINE__);
339 if ( auto lib = SharedLib.load( `Shell32.dll`)) { 359 if ( auto lib = SharedLib.load( `Shell32.dll`)) {
340 char[] name = "DllGetVersion\0"; //$NON-NLS-1$ 360 char[] name = "DllGetVersion\0"; //$NON-NLS-1$
341 void* DllGetVersion = lib.getSymbol(name.ptr); 361 void* DllGetVersion = lib.getSymbol(name.ptr);
362 trace(__LINE__);
342 if (DllGetVersion !is null){ 363 if (DllGetVersion !is null){
343 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion; 364 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
344 TDllVersion f = cast( TDllVersion )DllGetVersion; 365 TDllVersion f = cast( TDllVersion )DllGetVersion;
366 trace(__LINE__);
345 f(&dvi); 367 f(&dvi);
346 } 368 }
369 trace(__LINE__);
347 lib.unload(); 370 lib.unload();
348 } 371 }
349 SHELL32_MAJOR = dvi.dwMajorVersion; 372 SHELL32_MAJOR = dvi.dwMajorVersion;
350 SHELL32_MINOR = dvi.dwMinorVersion; 373 SHELL32_MINOR = dvi.dwMinorVersion;
351 SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR); 374 SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
375 trace(__LINE__);
352 } 376 }
353 377
354 /* Flag used on WinCE */ 378 /* Flag used on WinCE */
355 static const int SYS_COLOR_INDEX_FLAG = OS.IsWinCE ? 0x40000000 : 0x0; 379 static const int SYS_COLOR_INDEX_FLAG = OS.IsWinCE ? 0x40000000 : 0x0;
356 380