diff options
Diffstat (limited to 'win/bootstrap.cpp')
-rw-r--r-- | win/bootstrap.cpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/win/bootstrap.cpp b/win/bootstrap.cpp new file mode 100644 index 000000000..9f24f315c --- /dev/null +++ b/win/bootstrap.cpp @@ -0,0 +1,135 @@ +/* + This file is part of the KDE libraries + Copyright (C) 2004 Jaroslaw Staniek <js@iidea.pl> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <windows.h> +#include <string.h> +#include <stdlib.h> +#include <io.h> +#include <sys/file.h> +#include <stdio.h> + +#include "qeventloopex.h" + +QEventLoopEx* qeventloopex = 0; + +/** + Actions to perform at very early stage of KDE application life on MS Windows. + Currently not much is performed here but later, who knows... + + Additional algorithm for win9x (including Millenium), where are problems with + easy setting environment variables: + + - try to find HOME env. variable + - if not found, try to find USERPROFILE env. variable + - if not found, try to find both HOMEDRIVE and HOMEPATH env. variables + - if not found, try in the Windows Registry: + - try get 'Software\KDE' value from HKEY_CURRENT_USER section of Windows Registry + - if not found, try to get from + 'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\AppData' + - if one of above two found, put the value as HOME environment variable + using putenv() function. + + Once HOME variable is set, Qt handles it well. +*/ +KDEWIN32_EXPORT void kde_bootstrap() +{ + OSVERSIONINFOA osver; + osver.dwOSVersionInfoSize = sizeof(osver); + DWORD rc = GetVersionExA( &osver ); + + WSADATA wsadata; + WSAStartup(MAKEWORD(2,2),&wsadata); + + qeventloopex = new QEventLoopEx(); + + //for win9x only: + if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { + //set $HOME if not available + char *s, *s2; + s = getenv("HOME"); + if (!s) + s = getenv("USERPROFILE"); + if (!s) { + s = getenv("HOMEDRIVE"); + s2 = getenv("HOMEPATH"); + if (!s2) + s = 0; + } + if (!s) { + //no $HOME! : set a value from registry: + HKEY hKey; + DWORD len; + char path[1024]; + char path2[1024]; + bool ok; +#define KEY "Software\\KDE" + ok = (ERROR_SUCCESS == RegOpenKeyExA( HKEY_CURRENT_USER, KEY, 0, KEY_QUERY_VALUE, &hKey )); + if (ok) { + len = sizeof(path); + ok = (ERROR_SUCCESS == RegQueryValueExA( hKey, "HOME", 0, 0, (LPBYTE)path, &len )); + fprintf(stderr,"RegQueryValueExA = %d, %s\n", ok, path); + } +#define KEY2 "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" + if (!ok) { + ok = (ERROR_SUCCESS == RegOpenKeyExA( HKEY_CURRENT_USER, KEY, 0, KEY_QUERY_VALUE, &hKey )); + if (ok) { + len = sizeof(path); + ok = (ERROR_SUCCESS == RegQueryValueExA( hKey, "AppData", 0, 0, (LPBYTE)path, &len )); + fprintf(stderr,"RegQueryValueExA = %d, %s\n", ok, path); + } + } + if (ok) { + ok = (0==access(path, R_OK)); + if (!ok) { + CreateDirectoryA(path,NULL); + ok = (0==access(path, R_OK)); + fprintf(stderr,"CreateDirectoryA(%s) = %d\n", path, ok); + } + + if (ok) { + //it's not a problem with encoding, because Qt will use fromLocal8Bit() + strcpy(path2, "HOME="); + strncat(path2, path, sizeof(path2)-1-strlen(path2)); + rc = putenv(path2); + fprintf(stderr,"putenv(HOME) = %d\n",(int)rc); +/* + path[0]=0; + char *p = getenv( "HOME" ); + fprintf(stderr,"getenv(HOME) = %s\n", p);*/ + } + else + fprintf(stderr,"'%s' doesn't exist\n",path); + } + else + fprintf(stderr,"$HOME not found!\n",path); + + RegCloseKey( hKey ); + } + } +} + +/** + Actions to perform after destroying KDE application on MS Windows. + + Currently, custom even loop (QEventLoopEx) is deleted here. +*/ +KDEWIN32_EXPORT void kde_destroy() +{ + delete qeventloopex; +} |