master (8c20b21) のソースの修正ソースを確認して気づいた点です。
1. CEditView のコンストラクタから呼ばれる SetFont()
気づいた点
コンストラクタから SetFont() が呼ばれるようになりましたが、
SetFont() の末尾の InvalidateRect() に渡す GetHwnd() が、
この時点ではまだ nullptr のようです。
該当箇所
- sakura_core/view/CEditView.cpp:133 コンストラクタからの SetFont() 呼び出し
- sakura_core/view/CEditView.cpp:1098 ::InvalidateRect( GetHwnd(), nullptr, TRUE );
- sakura_core/view/CEditView.h:745 m_hWnd の既定初期化子(nullptr)
影響
InvalidateRect() は第 1 引数が NULL の場合、自プロセスに限らず
全ウィンドウを対象に動作する仕様と認識しています。
CEditView は起動時と画面分割時に生成されるため、
そのたびに他アプリを含めた再描画が発生する可能性があります。
2. CLoadStrBuffer::LoadStringW() の catch 節
気づいた点
言語DLLに文字列が無い場合に std::out_of_range を捕捉して
本体リソースへフォールバックする作りのままですが、
差し替わった cxx::load_string() は例外を送出せず空を返すため、
この catch 節には到達しなくなっているように見えます。
該当箇所
- sakura_core/CSelectLang.cpp:341-352 catch (const std::out_of_range&) の節
- src/main/cpp/cxx/load_string.cpp:47 見つからない場合も空を返す
- sakura_core/CSelectLang.cpp:47-56 SSelLangInfo::Load() は empty() 判定へ変更済み
影響
同梱の en-US / zh-CN は必要なリソースが揃っているため、現状の挙動は変わりません。
今後、言語DLL側に無い文字列が生じた場合に、
本体リソースへ落ちずに空文字列となる可能性があります。
同じ PR 内で SSelLangInfo::Load() は empty() 判定へ書き換えられてました。
master (8c20b21) のソースの修正ソースを確認して気づいた点です。
1. CEditView のコンストラクタから呼ばれる SetFont()
気づいた点
コンストラクタから SetFont() が呼ばれるようになりましたが、
SetFont() の末尾の InvalidateRect() に渡す GetHwnd() が、
この時点ではまだ nullptr のようです。
該当箇所
影響
InvalidateRect() は第 1 引数が NULL の場合、自プロセスに限らず
全ウィンドウを対象に動作する仕様と認識しています。
CEditView は起動時と画面分割時に生成されるため、
そのたびに他アプリを含めた再描画が発生する可能性があります。
2. CLoadStrBuffer::LoadStringW() の catch 節
気づいた点
言語DLLに文字列が無い場合に std::out_of_range を捕捉して
本体リソースへフォールバックする作りのままですが、
差し替わった cxx::load_string() は例外を送出せず空を返すため、
この catch 節には到達しなくなっているように見えます。
該当箇所
影響
同梱の en-US / zh-CN は必要なリソースが揃っているため、現状の挙動は変わりません。
今後、言語DLL側に無い文字列が生じた場合に、
本体リソースへ落ちずに空文字列となる可能性があります。
同じ PR 内で SSelLangInfo::Load() は empty() 判定へ書き換えられてました。