diff --git a/build/tizen/demo/CMakeLists.txt b/build/tizen/demo/CMakeLists.txt index aae6103..4e73070 100644 --- a/build/tizen/demo/CMakeLists.txt +++ b/build/tizen/demo/CMakeLists.txt @@ -6,6 +6,7 @@ SET(DEMO_SRCS ${DEMO_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp" "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" + "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" ) ADD_EXECUTABLE(${PROJECT_NAME} ${DEMO_SRCS}) diff --git a/build/tizen/examples-reel/CMakeLists.txt b/build/tizen/examples-reel/CMakeLists.txt index e12fa99..887ce5c 100644 --- a/build/tizen/examples-reel/CMakeLists.txt +++ b/build/tizen/examples-reel/CMakeLists.txt @@ -6,6 +6,7 @@ SET(EXAMPLES_REEL_SRCS ${EXAMPLES_REEL_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp" "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" + "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" ) ADD_EXECUTABLE(dali-examples ${EXAMPLES_REEL_SRCS}) diff --git a/build/tizen/tests-reel/CMakeLists.txt b/build/tizen/tests-reel/CMakeLists.txt index b48714c..2eb4c53 100644 --- a/build/tizen/tests-reel/CMakeLists.txt +++ b/build/tizen/tests-reel/CMakeLists.txt @@ -6,6 +6,7 @@ SET(TESTS_REEL_SRCS ${TESTS_REEL_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp" "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" + "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" ) ADD_EXECUTABLE(dali-tests ${TESTS_REEL_SRCS}) diff --git a/shared/dali-table-view.cpp b/shared/dali-table-view.cpp index aba375a..9be600d 100644 --- a/shared/dali-table-view.cpp +++ b/shared/dali-table-view.cpp @@ -20,8 +20,6 @@ // EXTERNAL INCLUDES #include -#include -#include #include #include #include @@ -29,8 +27,9 @@ #include // INTERNAL INCLUDES -#include "shared/view.h" +#include "shared/execute-process.h" #include "shared/utility.h" +#include "shared/view.h" using namespace Dali; using namespace Dali::Toolkit; @@ -621,14 +620,8 @@ void DaliTableView::OnPressedAnimationFinished( Dali::Animation& source ) { std::string name = mPressedActor.GetName(); - std::stringstream stream; - stream << DEMO_EXAMPLE_BIN << name.c_str(); - pid_t pid = fork(); - if( pid == 0) - { - execlp( stream.str().c_str(), name.c_str(), NULL ); - DALI_ASSERT_ALWAYS(false && "exec failed!"); - } + ExecuteProcess( name ); + mPressedActor.Reset(); } } diff --git a/shared/execute-process-unix.cpp b/shared/execute-process-unix.cpp new file mode 100644 index 0000000..6b87e54 --- /dev/null +++ b/shared/execute-process-unix.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + // FILE HEADER +#include "execute-process.h" + + // EXTERNAL INCLUDES +#include +#include +#include + +void ExecuteProcess( const std::string& processName ) +{ + std::stringstream stream; + stream << DEMO_EXAMPLE_BIN << processName.c_str(); + pid_t pid = fork(); + if( pid == 0) + { + execlp( stream.str().c_str(), processName.c_str(), NULL ); + DALI_ASSERT_ALWAYS(false && "exec failed!"); + } +} diff --git a/shared/execute-process-win.cpp b/shared/execute-process-win.cpp new file mode 100644 index 0000000..3eb89f4 --- /dev/null +++ b/shared/execute-process-win.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + // FILE HEADER +#include "execute-process.h" + + // EXTERNAL INCLUDES +#include +#include + +namespace +{ +const std::string PATH_SEPARATOR( "\\" ); +} + +void ExecuteProcess( const std::string& processName ) +{ + char currentPath[MAX_PATH]; + DWORD numberOfCharacters = GetCurrentDirectory( MAX_PATH, currentPath ); + + if( 0u == numberOfCharacters ) + { + DALI_ASSERT_ALWAYS( !"Failed to retrieve the current working directory" ); + } + + currentPath[numberOfCharacters] = '\0'; + + const std::string processPathName = std::string( currentPath ) + PATH_SEPARATOR + DEMO_EXAMPLE_BIN + PATH_SEPARATOR + processName + ".exe"; + + STARTUPINFO info = { sizeof( info ) }; + PROCESS_INFORMATION processInfo; + if( CreateProcess( processPathName.c_str(), nullptr, nullptr, nullptr, TRUE, 0, nullptr, nullptr, &info, &processInfo ) ) + { + WaitForSingleObject( processInfo.hProcess, INFINITE ); + CloseHandle( processInfo.hProcess ); + CloseHandle( processInfo.hThread ); + } +} diff --git a/shared/execute-process.h b/shared/execute-process.h new file mode 100644 index 0000000..d31a4a1 --- /dev/null +++ b/shared/execute-process.h @@ -0,0 +1,27 @@ +#ifndef DALI_DEMO_EXECUTE_PROCESS_H +#define DALI_DEMO_EXECUTE_PROCESS_H + +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + // EXTERNAL INCLUDES +#include + +void ExecuteProcess( const std::string& processName ); + + +#endif // DALI_DEMO_EXECUTE_PROCESS_H