123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- #include <precomp.h>
- //<?#include "<class data="implementationheader"/>"
- #include "api_applicationi.h"
- //?>
- #include <wasabicfg.h>
- #include <api/application/pathmgr.h>
- #include <api/application/version.h>
- #include <api/apiinit.h>
- #ifdef WA3COMPATIBILITY
- #include <runtime/main.h> // CUT!
- #include <wndmgr/layout.h> // CUT!
- #include <skin/skinparse.h>
- #endif
- StringW g_resourcepath;
- // {3CBD4483-DC44-11d3-B608-000086340885}
- static const GUID _baseGUID =
- { 0x3cbd4483, 0xdc44, 0x11d3, { 0xb6, 0x8, 0x0, 0x0, 0x86, 0x34, 0x8, 0x85 } };
- api_application *applicationApi = NULL;
- api_applicationI::api_applicationI(HINSTANCE instance, const wchar_t *_userPath)
- : appInstance(instance), mainthread(0), shuttingdown(0)
- {
- userPath = _userPath;
- #ifndef _WASABIRUNTIME
- #ifdef WASABI_DIRS_FROMEXEPATH
- HINSTANCE hInst = GetModuleHandle(0);
- #else
- HINSTANCE hInst = appInstance;
- #endif
- StringW path;
- {
- wchar_t g[WA_MAX_PATH];
- GetModuleFileNameW(hInst, g, WA_MAX_PATH - 1);
- wchar_t *p = wcsrchr(g, '\\');
- if (p) *p = 0;
- path = g;
- }
- #ifdef WIN32
- g_resourcepath = path;
- #elif defined(LINUX)
- g_resourcepath = "/usr/local/share/";
- g_resourcepath += WasabiVersion::getAppName();
- #endif
- #ifdef LINUX
- //char *file = getenv( "WASABI_LOG_FILE" );
- //if (!ACCESS(file, 0)) UNLINK(file);
- #endif
- apppath = path;
- g_resourcepath.AddBackslash();
- #if defined(WASABI_COMPILE_SKIN) || defined(WASABI_COMPILE_IMGLDR)
- g_resourcepath.AppendPath(WASABI_RESOURCES_SUBDIRECTORY);
- #endif
- #endif
- #ifdef WIN32
- HANDLE h = NULL;
- DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &h, 0, FALSE, DUPLICATE_SAME_ACCESS);
- mainthread = h; // 32-bit writes assumed atomic
- #endif
- #ifdef LINUX
- DebugString("portme: api main thread handle dup\n");
- #endif
- }
- api_applicationI::~api_applicationI()
- {
- g_resourcepath.purge();
- }
- const wchar_t *api_applicationI::main_getAppName()
- {
- return WasabiVersion::getAppName();
- }
- const wchar_t *api_applicationI::main_getVersionString()
- {
- return WasabiVersion::getVersionString();
- }
- unsigned int api_applicationI::main_getBuildNumber()
- {
- return WasabiVersion::getBuildNumber();
- }
- GUID api_applicationI::main_getGUID()
- {
- return guid;
- }
- HANDLE api_applicationI::main_getMainThreadHandle()
- {
- if (mainthread == 0) return (HANDLE)0;
- HANDLE h = (HANDLE)0;
- #ifdef WIN32
- DuplicateHandle(GetCurrentProcess(), mainthread, GetCurrentProcess(), &h, 0, FALSE, DUPLICATE_SAME_ACCESS);
- #endif
- #ifdef LINUX
- DebugString("portme: dup handle\n");
- #endif
- return h;
- }
- HINSTANCE api_applicationI::main_gethInstance()
- {
- return appInstance;
- }
- const wchar_t *api_applicationI::main_getCommandLine()
- {
- return cmdLine;
- }
- void api_applicationI::main_shutdown(int deferred)
- {
- int x = 1;
- #ifdef WASABI_CHECK_CAN_EXIT
- WASABI_CHECK_CAN_EXIT(x)
- #endif
- if (!x) return ;
- shuttingdown = 1;
- #ifdef _WASABIRUNTIME
- Main::doAction(ACTION_CLOSE, deferred);
- #endif
- #ifdef WASABI_CUSTOM_QUIT
- WASABI_CUSTOM_QUITFN
- #endif
- }
- void api_applicationI::main_cancelShutdown()
- {
- #ifdef _WASABIRUNTIME
- Main::cancelShutdown();
- #endif
- shuttingdown = 0;
- }
- int api_applicationI::main_isShuttingDown()
- {
- return shuttingdown;
- }
- const wchar_t *api_applicationI::path_getAppPath()
- {
- #ifdef _WASABIRUNTIME
- return Main::getMainAppPath();
- #endif
- return apppath;
- }
- const wchar_t *api_applicationI::path_getUserSettingsPath()
- {
- return userPath;
- //return PathMgr::getUserSettingsPath();
- }
- void api_applicationI::setHInstance(HINSTANCE instance)
- {
- appInstance = instance;
- };
- void api_applicationI::setCommandLine(const wchar_t *cmdline)
- {
- cmdLine = cmdline;
- }
- void api_applicationI::setGUID(GUID g)
- {
- guid = g;
- }
- int api_applicationI::app_getInitCount()
- {
- return ApiInit::getInitCount();
- }
- int api_applicationI::app_messageLoopStep()
- {
- #if defined(WASABI_COMPILE_TIMERS) || defined(WASABI_COMPILE_WND)
- MSG msg;
- if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
- {
- if (!GetMessage( &msg, NULL, 0, 0 )) return 0;
- #ifdef WASABI_COMPILE_WND
- TranslateMessage( &msg );
- #endif
- DispatchMessage( &msg );
- }
- #endif
- return 1;
- }
|