From 4e2f4d0e4afd9b588d165d6386e7c4e477b75a77 Mon Sep 17 00:00:00 2001 From: Sheen Tian Date: Sun, 7 Jan 2024 20:29:51 +0800 Subject: [PATCH] Support set icon for CefWing and windows job object --- .gitignore | 1 + include/CefViewCoreProtocol.h | 5 +++++ include/CefViewWingProcessName.h | 12 ------------ src/CMakeLists.txt | 13 +++++++++++++ src/CefWing/win/main.cpp | 18 +++++++++++++++++- src/CefWing/win/resource.rc.in | 3 +++ 6 files changed, 39 insertions(+), 13 deletions(-) delete mode 100644 include/CefViewWingProcessName.h create mode 100644 src/CefWing/win/resource.rc.in diff --git a/.gitignore b/.gitignore index 4b59a52..cc4ea13 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ dep/*.bz2 .DS_Store dep/cef_binary_* .build +include/CefViewWingProcessName.h diff --git a/include/CefViewCoreProtocol.h b/include/CefViewCoreProtocol.h index 73a9d24..9e4f8f6 100644 --- a/include/CefViewCoreProtocol.h +++ b/include/CefViewCoreProtocol.h @@ -22,6 +22,11 @@ /// #define kCefViewBridgeObjectNameKey "bridge-obj-name" +/// +/// +/// +#define kCefViewWindowsJobNameKey "windows-job-name" + /// /// /// diff --git a/include/CefViewWingProcessName.h b/include/CefViewWingProcessName.h deleted file mode 100644 index aece6ef..0000000 --- a/include/CefViewWingProcessName.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CefViewWingProcessName_h -#define CefViewWingProcessName_h -#pragma once - -/* clang-format off */ -/// -/// CefView Helper Process Name -/// -#define kCefViewRenderProcessName "XXXefHelper" -/* clang-format on */ - -#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 24704c2..016d2c2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -166,11 +166,24 @@ if(OS_WINDOWS) FILES ${CefViewWing_PLATFORM_SRC_FILES} ) + if(EXISTS ${CEFVIEW_WING_ICON}) + # Config resource file + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/CefWing/win/resource.rc.in" + "${CMAKE_CURRENT_BINARY_DIR}/resource.rc" + @ONLY + ) + set(CefViewWing_WIN_RESOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/resource.rc") + else() + set(CefViewWing_WIN_RESOURCE_FILE "") + endif() + # Create Helper executable target. add_executable(${CEFVIEW_WING_NAME} WIN32 ${CefViewCore_SHARED_SRC_FILES} ${CefViewWing_SRC_FILES} ${CefViewWing_PLATFORM_SRC_FILES} + ${CefViewWing_WIN_RESOURCE_FILE} ) SET_EXECUTABLE_TARGET_PROPERTIES(${CEFVIEW_WING_NAME}) diff --git a/src/CefWing/win/main.cpp b/src/CefWing/win/main.cpp index a954d06..b358e65 100644 --- a/src/CefWing/win/main.cpp +++ b/src/CefWing/win/main.cpp @@ -18,10 +18,12 @@ #pragma endregion win_headers #pragma region project_heasers +#include +#include + #include "../CefRenderApp/CefViewAppBase.h" #include "../CefRenderApp/CefViewOtherApp.h" #include "../CefRenderApp/CefViewRenderApp.h" -#include #pragma endregion project_heasers int @@ -56,6 +58,20 @@ CefViewWingMain(HINSTANCE hInstance) return 1; } + // assign current process to window job + if (command_line->HasSwitch(kCefViewWindowsJobNameKey)) { + auto job_name = command_line->GetSwitchValue(kCefViewWindowsJobNameKey); + HANDLE job_handle = ::OpenJobObjectA(JOB_OBJECT_ASSIGN_PROCESS, FALSE, job_name.ToString().c_str()); + if (job_handle) { + if (!::AssignProcessToJobObject(job_handle, ::GetCurrentProcess())) { + logE("Failed to assign current process to windows job object: %d", ::GetLastError()); + } + ::CloseHandle(job_handle); + } else { + logE("Failed to open windows job object: %d", ::GetLastError()); + } + } + // Execute the secondary process. int rt = CefExecuteProcess(main_args, app, sandbox_info); logI("process returned with code: %d", rt); diff --git a/src/CefWing/win/resource.rc.in b/src/CefWing/win/resource.rc.in new file mode 100644 index 0000000..fb997f5 --- /dev/null +++ b/src/CefWing/win/resource.rc.in @@ -0,0 +1,3 @@ +#include "winres.h" + +IDI_ICON ICON "@CEFVIEW_WING_ICON@"