Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'features/org.eclipse.equinox.executable.feature/library/wpf/eclipseWpf.cpp')
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/wpf/eclipseWpf.cpp561
1 files changed, 0 insertions, 561 deletions
diff --git a/features/org.eclipse.equinox.executable.feature/library/wpf/eclipseWpf.cpp b/features/org.eclipse.equinox.executable.feature/library/wpf/eclipseWpf.cpp
deleted file mode 100644
index f96523995..000000000
--- a/features/org.eclipse.equinox.executable.feature/library/wpf/eclipseWpf.cpp
+++ /dev/null
@@ -1,561 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- * Kevin Cornell (Rational Software Corporation)
- *******************************************************************************/
-
-extern "C" {
-
-#include "eclipseOS.h"
-#include "eclipseUtil.h"
-#include "eclipseCommon.h"
-#include "eclipseJNI.h"
-
-#include <process.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-using namespace System;
-using namespace System::IO;
-using namespace System::Windows;
-using namespace System::Windows::Input;
-using namespace System::Windows::Media;
-using namespace System::Windows::Media::Imaging;
-using namespace System::Windows::Controls;
-using namespace System::Windows::Threading;
-using namespace System::Runtime::InteropServices;
-using namespace System::ComponentModel;
-
-
-/* Global Variables */
-_TCHAR* defaultVM = _T("javaw.exe");
-_TCHAR* consoleVM = _T("java.exe");
-_TCHAR* vmLibrary = _T("jvm.dll");
-_TCHAR* shippedVMDir = _T("jre\\bin\\");
-
-/* Define the window system arguments for the Java VM. */
-static _TCHAR* argVM[] = { NULL };
-
-/* Define local variables for running the JVM and detecting its exit. */
-static int jvmProcess = 0;
-static JavaResults* jvmResults = NULL;
-static int jvmExitTimeout = 100;
-static int jvmExitTimerId = 99;
-
-static void CALLBACK detectJvmExit ();
-static _TCHAR* checkVMRegistryKey(HKEY jrekey, _TCHAR* subKeyName);
-static void adjustSearchPath( _TCHAR * vmLibrary );
-static _TCHAR* findLib( _TCHAR* command );
-
-/* define default locations in which to find the jvm shared library
- * these are paths relative to the java exe, the shared library is
- * for example jvmLocations[0] + dirSeparator + vmLibrary */
-#define MAX_LOCATION_LENGTH 25 /* none of the jvmLocations strings should be longer than this */
-static const _TCHAR* jvmLocations [] = { _T("j9vm"), _T("..\\jre\\bin\\j9vm"),
- _T("client"), _T("..\\jre\\bin\\client"),
- _T("server"), _T("..\\jre\\bin\\server"),
- _T("classic"), _T("..\\jre\\bin\\classic"),
- _T("jrockit"), _T("..\\jre\\bin\\jrockit"),
- NULL };
-/* for detecting sun vms */
-typedef struct {
- WORD language;
- WORD codepage;
-} TRANSLATIONS;
-
-#define COMPANY_NAME_KEY _T_ECLIPSE("\\StringFileInfo\\%04x%04x\\CompanyName")
-#define SUN_MICROSYSTEMS _T_ECLIPSE("Sun Microsystems")
-
-delegate void NoArgsHandler ();
-
-public ref class Globals {
-public:
- static Window^ window = nullptr;
- static DispatcherFrame^ frame = nullptr;
-
- static void HandleDispatcherInactive (Object^ o, EventArgs^ e) {
- if (frame != nullptr) frame->Continue = false;
- }
- static void HandleClosing (Object^ o, CancelEventArgs^ e) {
- window = nullptr;
- }
- static void HandleTimer (Object^ o, EventArgs^ e) {
- detectJvmExit();
- if (jvmProcess == 0) {
- if (frame != nullptr) {
- frame->Continue = false;
- }
- }
- }
- static void CloseWindow () {
- if (window != nullptr) {
- window->Close();
- window = nullptr;
- }
- }
-};
-
-
-/* Show the Splash Window
- *
- * Open the bitmap, insert into the splash window and display it.
- *
- */
-int showSplash( const _TCHAR* featureImage )
-{
- static int splashing = 0;
-
- if(splashing) {
- /*splash screen is already showing, do nothing */
- return 0;
- }
- if (featureImage == NULL)
- return -1;
-
- /* if Java was started first and is calling back to show the splash, we might not
- * have initialized the window system yet
- */
- initWindowSystem(0, NULL, 1);
-
- /* Load the bitmap for the feature. */
- BitmapSource^ image = nullptr;
- if (featureImage != NULL) {
- String^ string = gcnew String (featureImage);
- if (File::Exists (string)) {
- Uri^ uri = gcnew Uri (string);
- image = gcnew BitmapImage (uri);
- }
- }
-
- /* If the bitmap could not be found, return an error. */
- if (image == nullptr)
- return ERROR_FILE_NOT_FOUND;
-
- /* Create a window that has no decorations. */
- Window^ window = Globals::window = gcnew Window();
- window->Closing += gcnew CancelEventHandler(&Globals::HandleClosing);
- window->WindowStyle = WindowStyle::None;
- window->ShowInTaskbar = false;
- window->ResizeMode = ResizeMode::NoResize;
- window->WindowStartupLocation = WindowStartupLocation::CenterScreen;
- KeyboardNavigation::SetTabNavigation (window, KeyboardNavigationMode::None);
-
- Grid^ grid = gcnew Grid();
- GridLength length (1, GridUnitType::Auto);
- ColumnDefinition^ column = gcnew ColumnDefinition();
- grid->ColumnDefinitions->Add (column);
- column = gcnew ColumnDefinition();
- column->Width = length;
- grid->ColumnDefinitions->Add (column);
- RowDefinition^ row = gcnew RowDefinition ();
- row->Height = length;
- grid->RowDefinitions->Add (row);
- row = gcnew RowDefinition ();
- grid->RowDefinitions->Add (row);
- row = gcnew RowDefinition ();
- row->Height = length;
- grid->RowDefinitions->Add (row);
- window->Content = grid;
-
- Canvas^ canvas = gcnew Canvas ();
- canvas->FocusVisualStyle = nullptr;
- canvas->Focusable = true;
- Grid::SetRow (canvas, 1);
- Grid::SetColumn (canvas, 0);
- grid->Children->Add (canvas);
-
- ImageBrush^ brush = gcnew ImageBrush(image);
- canvas->Background = brush;
-
- window->Width = image->Width;
- window->Height = image->Height;
- window->Show();
-
- splashing = 1;
-
- /* Process messages */
- dispatchMessages();
- return 0;
-}
-
-void dispatchMessages() {
- DispatcherFrame^ frame = gcnew DispatcherFrame();
- Globals::frame = frame;
- EventHandler^ handler = gcnew EventHandler (&Globals::HandleDispatcherInactive);
- Dispatcher^ dispatcher = Dispatcher::CurrentDispatcher;
- DispatcherHooks^ hooks = dispatcher->Hooks;
- hooks->DispatcherInactive += handler;
- Dispatcher::PushFrame (frame);
- hooks->DispatcherInactive -= handler;
- Globals::frame = nullptr;
-}
-
-jlong getSplashHandle() {
- Window^ window = Globals::window;
- return (jlong)(int)GCHandle::ToIntPtr(GCHandle::Alloc(window));
-}
-
-void takeDownSplash() {
- if (false) {
- NoArgsHandler^ handler = gcnew NoArgsHandler(&Globals::CloseWindow);
- Dispatcher::CurrentDispatcher->BeginInvoke(DispatcherPriority::Send, handler);
- } else {
- Window^ window = Globals::window;
- if(window != nullptr) {
- window->Close ();
- window = nullptr;
- dispatchMessages();
- }
- }
-}
-
-/* Get the window system specific VM args */
-_TCHAR** getArgVM( _TCHAR *vm )
-{
- return argVM;
-}
-
-/* Local functions */
-
-/*
- * Find the VM shared library starting from the java executable
- */
-_TCHAR * findVMLibrary( _TCHAR* command ) {
- _TCHAR* lib = findLib(command);
- if( lib != NULL ) {
- adjustSearchPath(lib);
- }
- return lib;
-}
-
-void adjustSearchPath( _TCHAR* vmLib ){
- _TCHAR ** paths;
- _TCHAR * path = NULL, *newPath = NULL;
- _TCHAR * buffer, *c;
- int i, length;
- int needAdjust = 0, freePath = 0;
-
- /* we want the directory containing the library, and the parent directory of that */
- paths = getVMLibrarySearchPath(vmLib);
-
- /* first call to GetEnvironmentVariable tells us how big to make the buffer */
- length = GetEnvironmentVariable(_T_ECLIPSE("PATH"), path, 0);
- if (length > 0) {
- path = (_TCHAR*)malloc(length * sizeof(_TCHAR));
- GetEnvironmentVariable(_T_ECLIPSE("PATH"), path, length);
- needAdjust = !containsPaths(path, paths);
- freePath = 1;
- } else {
- path = _T_ECLIPSE("");
- freePath = 0;
- needAdjust = 1;
- }
-
- if (needAdjust) {
- c = concatStrings(paths);
- newPath = (_TCHAR*)malloc((_tcslen(c) + length + 1) * sizeof(_TCHAR));
- _stprintf(newPath, _T_ECLIPSE("%s%s"), c, path);
- SetEnvironmentVariable( _T_ECLIPSE("PATH"), newPath);
- free(c);
- free(newPath);
- }
-
- for (i = 0; i < 2 && paths[i] != NULL; i++)
- free(paths[i]);
- free(paths);
- if (freePath)
- free(path);
-}
-
-static _TCHAR* findLib( _TCHAR* command ) {
- int i, j;
- int pathLength;
- struct _stat stats;
- _TCHAR * path; /* path to resulting jvm shared library */
- _TCHAR * location; /* points to begining of jvmLocations section of path */
-
- /* for looking in the registry */
- HKEY jreKey = NULL;
- DWORD length = MAX_PATH;
- _TCHAR keyName[MAX_PATH];
- _TCHAR * jreKeyName;
-
- if (command != NULL) {
- location = lastDirSeparator( command ) + 1;
-
- /*check first to see if command already points to the library */
- if (isVMLibrary(command)) {
- if (_tstat( command, &stats ) == 0 && (stats.st_mode & S_IFREG) != 0)
- return command; /* exists */
- return NULL; /* doesn't exist */
- }
-
- pathLength = location - command;
- path = (_TCHAR *)malloc((pathLength + MAX_LOCATION_LENGTH + 1 + _tcslen(vmLibrary) + 1) * sizeof(_TCHAR));
- _tcsncpy(path, command, pathLength);
- location = &path[pathLength];
-
- /*
- * We are trying base/jvmLocations[*]/vmLibrary
- * where base is the directory containing the given java command, normally jre/bin
- */
- i = -1;
- while(jvmLocations[++i] != NULL) {
- _stprintf(location, _T_ECLIPSE("%s%c%s"), jvmLocations[i], dirSeparator, vmLibrary);
- if (_tstat( path, &stats ) == 0 && (stats.st_mode & S_IFREG) != 0)
- { /* found it */
- return path;
- }
- }
- }
-
- /* Not found yet, try the registry, we will use the first vm >= 1.4 */
- jreKeyName = _T("Software\\JavaSoft\\Java Runtime Environment");
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, jreKeyName, 0, KEY_READ, &jreKey) == ERROR_SUCCESS) {
- if(RegQueryValueEx(jreKey, _T_ECLIPSE("CurrentVersion"), NULL, NULL, (LPBYTE)&keyName, &length) == ERROR_SUCCESS) {
- path = checkVMRegistryKey(jreKey, keyName);
- if (path != NULL) {
- RegCloseKey(jreKey);
- return path;
- }
- }
- j = 0;
- length = MAX_PATH;
- while (RegEnumKeyEx(jreKey, j++, keyName, &length, 0, 0, 0, 0) == ERROR_SUCCESS) {
- /*look for a 1.4 or 1.5 vm*/
- if( _tcsncmp(_T("1.4"), keyName, 3) <= 0 ) {
- path = checkVMRegistryKey(jreKey, keyName);
- if (path != NULL) {
- RegCloseKey(jreKey);
- return path;
- }
- }
- }
- RegCloseKey(jreKey);
- }
- return NULL;
-}
-
-/*
- * Read the subKeyName subKey of jreKey and look to see if it has a Value
- * "RuntimeLib" which points to a jvm library we can use
- *
- * Does not close jreKey
- */
-static _TCHAR* checkVMRegistryKey(HKEY jreKey, _TCHAR* subKeyName) {
- _TCHAR value[MAX_PATH];
- HKEY subKey = NULL;
- DWORD length = MAX_PATH;
- _TCHAR *result = NULL;
- struct _stat stats;
-
- if(RegOpenKeyEx(jreKey, subKeyName, 0, KEY_READ, &subKey) == ERROR_SUCCESS) {
- /*The RuntimeLib value should point to the library we want*/
- if(RegQueryValueEx(subKey, _T("RuntimeLib"), NULL, NULL, (LPBYTE)&value, &length) == ERROR_SUCCESS) {
- if (_tstat( value, &stats ) == 0 && (stats.st_mode & S_IFREG) != 0)
- { /*library exists*/
- result = _tcsdup(value);
- }
- }
- RegCloseKey(subKey);
- }
- return result;
-}
-
-static _TCHAR* buildCommandLine( _TCHAR* program, _TCHAR* args[] )
-{
- int index, length = 0, slash;
- _TCHAR *commandLine, *ch, *space;
-
- /*
- * Build the command line. Any argument with spaces must be in
- * double quotes in the command line.
- */
- if(program != NULL)
- length = _tcslen(program) + 1;
- for (index = 0; args[index] != NULL; index++)
- {
- /* String length plus space character */
- length += _tcslen( args[ index ] ) + 1;
- /* Quotes + potential escaping '\' */
- if (_tcschr( args[ index ], _T(' ') ) != NULL) length += 3;
- }
-
- commandLine = ch = (_TCHAR *)malloc ( (length + 1) * sizeof(_TCHAR) );
- if (program != NULL) {
- _tcscpy(ch, program);
- ch += _tcslen(program);
- *ch++ = _T(' ');
- }
- for (index = 0; args[index] != NULL; index++)
- {
- space = _tcschr( args[ index ], _T(' '));
- if (space != NULL) *ch++ = _T('\"');
- _tcscpy( ch, args[index] );
- ch += _tcslen( args[index] );
- if (space != NULL) {
- if ( *(ch - 1) == _T('\\') ) {
- /* escape a trailing unescaped '\' or it will escape our closing '"' and mess things up */
- slash = 1;
- while ( *(ch - 1 - slash) == _T('\\')) slash++;
- if (slash % 2) *ch++ = _T('\\');
- }
- *ch++ = _T('\"');
- }
- *ch++ = _T(' ');
- }
- *ch = _T('\0');
- return commandLine;
-}
-void restartLauncher( _TCHAR* program, _TCHAR* args[] )
-{
- _TCHAR* commandLine = buildCommandLine(program, args);
-
- {
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- GetStartupInfo(&si);
- if (CreateProcess(NULL, commandLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
- CloseHandle( pi.hThread );
- }
- }
- free(commandLine);
-}
-
-JavaResults* launchJavaVM( _TCHAR* args[] )
-{
- MSG msg;
- _TCHAR* commandLine;
- jvmProcess = -1;
- commandLine = buildCommandLine(NULL, args);
- jvmResults = (JavaResults*) malloc(sizeof(JavaResults));
- memset(jvmResults, 0, sizeof(JavaResults));
-
- /*
- * Start the Java virtual machine. Use CreateProcess() instead of spawnv()
- * otherwise the arguments cannot be freed since spawnv() segments fault.
- */
- {
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- GetStartupInfo(&si);
- if (CreateProcess(NULL, commandLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
- CloseHandle( pi.hThread );
- jvmProcess = (int)pi.hProcess;
- }
- }
-
- free( commandLine );
-
- /* If the child process (JVM) would not start */
- if (jvmProcess == -1)
- {
- /* Return the error number. */
- jvmResults->launchResult = errno;
- jvmProcess = 0;
- }
-
- /* else */
- else
- {
-
- /* Set a timer to detect JVM process termination. */
- DispatcherTimer^ timer = gcnew DispatcherTimer();
- timer->Interval = TimeSpan::FromMilliseconds (jvmExitTimeout);
- timer->Tick += gcnew EventHandler(&Globals::HandleTimer);
-
- /* Process messages until the JVM terminates.
- This launcher process must continue to process events until the JVM exits
- or else Windows 2K will hang if the desktop properties (e.g., background) are
- changed by the user. Windows does a SendMessage() to every top level window
- process, which blocks the caller until the process responds. */
-
- DispatcherFrame^ frame = gcnew DispatcherFrame();
- Globals::frame = frame;
- timer->Start();
- Dispatcher::PushFrame(frame);
- Globals::frame = nullptr;
- timer->Stop();
-
- }
-
- /* Return the exit code from the JVM. */
- return jvmResults;
-}
-
-/* Detect JVM Process Termination */
-static void CALLBACK detectJvmExit ()
-{
- DWORD exitCode;
- /* If the JVM process has terminated */
- if (!GetExitCodeProcess( (HANDLE)jvmProcess, &exitCode ) ||
- exitCode != STILL_ACTIVE)
- {
- /* Save the JVM exit code. This should cause the loop in launchJavaVM() to exit. */
- jvmResults->runResult = exitCode;
- jvmProcess = 0;
- }
-}
-
-void processVMArgs(_TCHAR **vmargs[] ) {
-// /* nothing yet */
-}
-
-JavaResults* startJavaVM( _TCHAR* libPath, _TCHAR* vmArgs[], _TCHAR* progArgs[], _TCHAR* jarFile )
-{
- return startJavaJNI(libPath, vmArgs, progArgs, jarFile);
-}
-
-int isSunVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
- _TCHAR *vm = (jniLib != NULL) ? jniLib : javaVM;
- int result = 0;
- DWORD infoSize;
- DWORD handle;
- void * info;
-
- _TCHAR * key, *value;
- size_t i;
- int valueSize;
-
- if (vm == NULL)
- return 0;
-
- infoSize = GetFileVersionInfoSize(vm, &handle);
- if (infoSize > 0) {
- info = malloc(infoSize);
- if (GetFileVersionInfo(vm, 0, infoSize, info)) {
- TRANSLATIONS * translations;
- int translationsSize;
- VerQueryValue(info, _T_ECLIPSE("\\VarFileInfo\\Translation"), (LPVOID *) &translations, (PUINT)&translationsSize);
-
- /* this size is only right because %04x is 4 characters */
- key = (_TCHAR *) malloc( (_tcslen(COMPANY_NAME_KEY) + 1) * sizeof(_TCHAR));
- for (i = 0; i < (translationsSize / sizeof(TRANSLATIONS)); i++) {
- _stprintf(key, COMPANY_NAME_KEY, translations[i].language, translations[i].codepage);
-
- VerQueryValue(info, key, (LPVOID *)&value, (PUINT)&valueSize);
- if (_tcsncmp(value, SUN_MICROSYSTEMS, _tcslen(SUN_MICROSYSTEMS)) == 0) {
- result = 1;
- break;
- }
- }
- free(key);
- }
- free(info);
- }
- return result;
-}
-
-int reuseWorkbench(_TCHAR** filePath, int timeout) {
- /* not implemented for WPF */
- return -1;
-}
-} // extern "C"

Back to the top