--- nono/wx/wxsoftkey.cpp 2026/04/29 17:04:56 1.1.1.7 +++ nono/wx/wxsoftkey.cpp 2026/04/29 17:04:59 1.1.1.8 @@ -8,6 +8,7 @@ #include "wxcolor.h" #include "wxmainview.h" #include "wxtextscreen.h" +#include "wxuimessage.h" #include "sram.h" // @@ -28,7 +29,6 @@ wxBEGIN_EVENT_TABLE(WXSoftKeyPanel, inhe EVT_LEFT_DCLICK(WXSoftKeyPanel::OnLeftDClick) EVT_RIGHT_DOWN(WXSoftKeyPanel::OnRightDown) EVT_PAINT(WXSoftKeyPanel::OnPaint) - EVT_TIMER(wxID_ANY, WXSoftKeyPanel::OnTimer) wxEND_EVENT_TABLE() // コンストラクタ @@ -54,14 +54,16 @@ WXSoftKeyPanel::WXSoftKeyPanel(wxWindow Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(WXMainView::OnKeyDown), NULL, gMainView); - // 更新間隔は適当 - timer.SetOwner(this); - timer.Start(100); + // VM からの通知を受け取る + WXUIMessage::Connect(UIMessage::KEYBOARD, this, + wxCommandEventHandler(WXSoftKeyPanel::OnKeyChanged)); } // デストラクタ WXSoftKeyPanel::~WXSoftKeyPanel() { + WXUIMessage::Disconnect(UIMessage::KEYBOARD, + wxCommandEventHandler(WXSoftKeyPanel::OnKeyChanged)); } // フォントサイズ変更 (外部インタフェース) @@ -139,9 +141,9 @@ WXSoftKeyPanel::DoSize() Refresh(); } -// タイマーイベント +// キー状態変更イベント (UIMessage) void -WXSoftKeyPanel::OnTimer(wxTimerEvent& event) +WXSoftKeyPanel::OnKeyChanged(wxCommandEvent& event) { // 更新があれば再描画を指示 const std::vector& pressed = gKeyboard->GetPressed();