Skip to content

master (8c20b211) の修正ソースを確認して #2617

Description

@hpmy-dev

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() 判定へ書き換えられてました。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions