Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions sakura_core/_main/CNormalProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,14 +132,16 @@ bool CNormalProcess::InitializeProcess(
// スコープを抜けるときシグナル状態になるようにする
EventHolder grepEvent;

/* 共有メモリを初期化する */
// コントロールプロセスが起動している状態にする
if (!CProcessFactory::IsExistControlProcess() &&
!CProcessFactory::StartControlProcess() ||
!CProcess::InitializeProcess(nCmdShow))
!CProcessFactory::StartControlProcess())
{
return false;
}

// 共有メモリを初期化する
GetShareData().OpenShareData();

/* ダークモード設定を反映する */
ApplyDarkModeSetting(GetDllShareData().m_Common.m_sWindow.m_bDarkMode);

Expand Down Expand Up @@ -209,6 +211,9 @@ bool CNormalProcess::InitializeProcess(
if( GetDllShareData().m_Common.m_sTabBar.m_bNewWindow && nGroupId == -1 ){
nGroupId = CAppNodeManager::getInstance()->GetFreeGroupId();
}

(void)nCmdShow; //TODO: CEditWndのCreate()に渡すようにする

// CEditAppを作成
m_pcEditApp = CEditApp::getInstance();
m_pcEditApp->Create(GetProcessInstance(), nGroupId);
Expand Down
18 changes: 0 additions & 18 deletions sakura_core/_main/CProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,24 +188,6 @@ std::filesystem::path CProcess::GetIniFileName() const
return GetExeFileName().replace_extension(L".ini");
}

/*!
@brief プロセスを初期化する

共有メモリを初期化する
*/
bool CProcess::InitializeProcess(
int nCmdShow [[maybe_unused]]
)
{
GetShareData().InitShareData();

/* リソースから製品バージョンの取得 */
// 2004.05.13 Moca 共有データのバージョン情報はコントロールプロセスだけが
// ShareDataで設定するように変更したのでここからは削除

return true;
}

/*!
* @brief プロセス実行
*
Expand Down
2 changes: 1 addition & 1 deletion sakura_core/_main/CProcess.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ class CProcess : public TSingleInstance<CProcess> {

virtual bool InitializeProcess(
int nCmdShow [[maybe_unused]]
);
) = 0;

protected:
virtual bool MainLoop() = 0;
Expand Down
91 changes: 60 additions & 31 deletions sakura_core/env/CShareData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,20 +86,19 @@ CMutex& CShareData::GetMutexShareWork(){
return g_cMutexShareWork;
}

//! CShareDataクラスの初期化処理
/*!
CShareDataクラスを利用する前に必ず呼び出すこと。

@retval true 初期化成功
@retval false 初期化失敗

@note 既に存在する共有メモリのバージョンがこのエディタが使うものと
異なる場合は致命的エラーを防ぐためにfalseを返します。CProcess::Initialize()
でInit()に失敗するとメッセージを出してエディタの起動を中止します。

@date 2018/06/01 仕様変更 https://github.com/sakura-editor/sakura/issues/29
*/
bool CShareData::InitShareData()
* @brief CShareDataクラスの初期化処理
*
* 共有メモリを新規作成して初期化する。
* 他プロセスが作成した共有メモリが残っていても上書きする。
*
* コントロールプロセス専用。
*
* @note ここで初期化した共有メモリは、後続のINI設定ファイルの読み込み処理で上書きされる。
*
* @date 2018/06/01 仕様変更 https://github.com/sakura-editor/sakura/issues/29
*/
void CShareData::InitShareData()
{
MY_RUNNINGTIMER(cRunningTimer,L"CShareData::InitShareData" );

Expand Down Expand Up @@ -129,14 +128,12 @@ bool CShareData::InitShareData()
);
}

if( GetLastError() != ERROR_ALREADY_EXISTS ){
/* オブジェクトが存在していなかった場合 */
// ファイルのビューを、 呼び出し側プロセスのアドレス空間にマップします
m_MappedData = m_FileMapping.MapViewOfFile<DLLSHAREDATA*>(
FILE_MAP_ALL_ACCESS
);

// ファイルのビューを、 呼び出し側プロセスのアドレス空間にマップします
m_MappedData = m_FileMapping.MapViewOfFile<DLLSHAREDATA*>(
FILE_MAP_ALL_ACCESS
);

{
// マップされたビューにDLLSHAREDATA構造体を配置します
m_pShareData = new (m_MappedData.get()) DLLSHAREDATA;

Expand Down Expand Up @@ -666,14 +663,14 @@ bool CShareData::InitShareData()
/*
2006.08.16 Moca 初期化単位を PRINTSETTINGに変更。CShareDataには依存しない。
*/
WCHAR szSettingName[64];
int i = 0;
auto_sprintf( szSettingName, L"印刷設定 %d", i + 1 );
using SPrintSettingName = StaticString<64>;
SPrintSettingName szSettingName{};
szSettingName = strprintf(L"%s %d", LS(STR_PRINT_SET_NAME), 1);
CPrint::SettingInitialize( m_pShareData->m_PrintSettingArr[0], szSettingName ); // 初期化命令。
}
for( int i = 1; i < MAX_PRINTSETTINGARR; ++i ){
m_pShareData->m_PrintSettingArr[i] = m_pShareData->m_PrintSettingArr[0];
auto_sprintf( m_pShareData->m_PrintSettingArr[i].m_szPrintSettingName, L"印刷設定 %d", i + 1 ); /* 印刷設定の名前 */
auto_sprintf_s( m_pShareData->m_PrintSettingArr[i].m_szPrintSettingName, L"%s %d", LS(STR_PRINT_SET_NAME), i + 1 ); /* 印刷設定の名前 */
}
}

Expand Down Expand Up @@ -710,13 +707,46 @@ bool CShareData::InitShareData()

m_pShareData->m_bLineNumIsCRLF_ForJump = true; /* 指定行へジャンプの「改行単位の行番号」か「折り返し単位の行番号」か */
}
}else{
/* オブジェクトがすでに存在する場合 */
// ファイルのビューを、 呼び出し側プロセスのアドレス空間にマップします
m_MappedData = m_FileMapping.MapViewOfFile<DLLSHAREDATA*>(
FILE_MAP_ALL_ACCESS
}
}

/*!
* @brief CShareDataクラスの初期化処理
*
* 他プロセスが作成した共有メモリを開き、自プロセスに取り込む。
*
* エディタープロセス用。
*/
void CShareData::OpenShareData()
{
// ファイルマッピングオブジェクト
try
{
const auto pszProfileName = GetProfileName();
std::wstring strShareDataName = GSTR_SHAREDATA;
strShareDataName += pszProfileName;
m_FileMapping = FileMapping::OpenFileMappingW(
GENERIC_READ | GENERIC_WRITE,
FALSE,
strShareDataName
);

}
// エラーが発生した場合
catch (const std::system_error&)
{
throw basis::make_initialization_error(
// L"CreateFileMapping()に失敗しました"
LS(STR_ERR_CSHAREDATA01)
, static_cast<int>(EAppExitCode::Exited) //エラーなのに正常っぽいコードを返すのは妥当か?
);
}

// ファイルのビューを、 呼び出し側プロセスのアドレス空間にマップします
m_MappedData = m_FileMapping.MapViewOfFile<DLLSHAREDATA*>(
FILE_MAP_ALL_ACCESS
);

{
// マップされたビューに配置されたDLLSHAREDATA構造体を参照します
m_pShareData = m_MappedData.get();

Expand All @@ -736,7 +766,6 @@ bool CShareData::InitShareData()
SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_SHARE);
InitCharWidthCache(m_pShareData->m_Common.m_sView.m_lf);
}
return true;
}

static void ConvertLangString( wchar_t* pBuf, size_t chBufSize, std::wstring& org, std::wstring& to )
Expand Down
4 changes: 3 additions & 1 deletion sakura_core/env/CShareData.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ class CShareData : public TSingleInstance<CShareData>
/*
|| Attributes & Operations
*/
bool InitShareData(); /* CShareDataクラスの初期化処理 */
void InitShareData();
void OpenShareData();

void RefreshString(); /* 言語選択後に共有メモリ内の文字列を更新する */

//MRU系
Expand Down
2 changes: 0 additions & 2 deletions src/test/cpp/tests1/macro/test-macro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,6 @@ TEST_F(MacroMgrTest, CKeyMacroMgr001)

auto mgr = std::unique_ptr<CMacroManagerBase>(CMacroFactory::getInstance()->Create(L"mac"));

const HINSTANCE unusedArg1 = nullptr;

EXPECT_THAT(mgr->LoadKeyMacroStr(unusedArg1, L""), IsTrue());

EXPECT_THAT(mgr->ExecKeyMacro(&pcEditWnd->GetActiveView(), 0), IsTrue());
Expand Down
1 change: 0 additions & 1 deletion src/test/cpp/tests1/test-cdlgopenfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -619,7 +619,6 @@ struct SelectFileTest : public ::testing::Test, public window::EditorTestSuite,
std::ofstream ofs{ path };
ofs.close();

constexpr HINSTANCE unusedArg1 = nullptr;
hWnd = pcEditWnd->GetHwnd();

// テスト用ダミーダイアログを作る
Expand Down
10 changes: 9 additions & 1 deletion src/test/cpp/tests1/test-csakuraenvironment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@

#include <fstream>

#include "window/UiaTestSuite.hpp" //COleInit

using namespace std::literals::string_literals;

std::filesystem::path GetTempFilePathWithExt(std::wstring_view prefix, std::wstring_view extension);
Expand Down Expand Up @@ -351,6 +353,9 @@ TEST_F(CSakuraEnvironmentTest, GetDlgInitialDir001)
*/
TEST_F(CSakuraEnvironmentTest, ResolvePath001)
{
// OLEを初期化する
const auto pcOleInit = std::make_unique<cxx::COleInit>();

// ショートカットのターゲットとなるファイルを作成する
const auto target = GetTempFilePathWithExt(L"lnk", L"txt");
std::wofstream fs(target);
Expand Down Expand Up @@ -420,7 +425,10 @@ INSTANTIATE_TEST_SUITE_P(ExpandParamCases
ExpandParamTestParam{ L"$E", STR_NO_TITLE1 },
ExpandParamTestParam{ L"$e", STR_NO_TITLE1 },
ExpandParamTestParam{ L"$B", L""s },
ExpandParamTestParam{ L"$Q", L"印刷設定 1"s },

//TODO: GitHub Actionsでも動くよう対応する
//ExpandParamTestParam{ L"$Q", strprintf(L"%s %d", LS(STR_PRINT_SET_NAME), 1) },

ExpandParamTestParam{ L"$C", L""s },
ExpandParamTestParam{ L"$x", L"1"s },
ExpandParamTestParam{ L"$y", L"1"s },
Expand Down
2 changes: 1 addition & 1 deletion src/test/cpp/tests1/test-csharedata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1648,7 +1648,7 @@ MATCHER_P4(IsInitializedShareData, pszProfileName, isMultiUserSettings, userRoot
}

for (int i = 0; i < std::ssize(shareData.m_PrintSettingArr); ++i) {
EXPECT_THAT(shareData.m_PrintSettingArr[i].m_szPrintSettingName, StrEq(std::format(L"{:s} {:d}", LS(STR_PRINT_SET_NAME), i + 1))) << L"Unexpected value at index " << i;
EXPECT_THAT(shareData.m_PrintSettingArr[i].m_szPrintSettingName, StrEq(strprintf(L"%s %d", LS(STR_PRINT_SET_NAME), i + 1))) << L"Unexpected value at index " << i;
EXPECT_THAT(shareData.m_PrintSettingArr[i].m_szPrintFontFaceHan, StrEq(L"MS 明朝"));
EXPECT_THAT(shareData.m_PrintSettingArr[i].m_szPrintFontFaceZen, StrEq(L"MS 明朝"));
EXPECT_THAT(shareData.m_PrintSettingArr[i].m_bColorPrint, IsFalse());
Expand Down
2 changes: 0 additions & 2 deletions src/test/cpp/tests1/test-window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1359,8 +1359,6 @@ TEST_F(TrayWndTest, ShowContextMenu001)
}

struct EditWndTest : public ::testing::Test, public window::EditorTestSuite, public window::UiaTestSuite {
static constexpr HINSTANCE unusedArg1 = nullptr;

static inline std::filesystem::path backupAgentTargetPath{};
static inline std::filesystem::path backupPath{};
static inline std::filesystem::path backupPathB00{};
Expand Down
Loading
Loading