Index: source/gui/CGUI.cpp =================================================================== --- source/gui/CGUI.cpp +++ source/gui/CGUI.cpp @@ -73,7 +73,6 @@ if (m_GlobalHotkeys.count(hotkey) && ev->ev.type == SDL_HOTKEYDOWN) { - HotkeyInputHandler(ev); ret = IN_HANDLED; JSContext* cx = m_ScriptInterface->GetContext(); Index: source/gui/tests/test_GuiManager.h =================================================================== --- source/gui/tests/test_GuiManager.h +++ source/gui/tests/test_GuiManager.h @@ -62,9 +62,12 @@ LoadHotkeys(); // Load up a test page. - JS::RootedValue val(g_GUI->GetScriptInterface()->GetContext()); - g_GUI->GetScriptInterface()->Eval("({})", &val); - std::shared_ptr data = g_GUI->GetScriptInterface()->WriteStructuredClone(JS::NullHandleValue); + const ScriptInterface& scriptInterface = *(g_GUI->GetScriptInterface()); + JSAutoRequest rq(scriptInterface.GetContext()); + JS::RootedValue val(scriptInterface.GetContext()); + scriptInterface.CreateObject(scriptInterface.GetContext(), &val); + + std::shared_ptr data = scriptInterface.WriteStructuredClone(JS::NullHandleValue); g_GUI->PushPage(L"page_hotkey.xml", data, JS::UndefinedHandleValue); // Press 'a'. @@ -79,16 +82,21 @@ while (in_poll_event(&ev)) in_dispatch_event(&ev); + const ScriptInterface& pageScriptInterface = *(g_GUI->GetActiveGUI()->GetScriptInterface()); + JSAutoRequest pagerq(pageScriptInterface.GetContext()); + JS::RootedValue global(pageScriptInterface.GetContext(), pageScriptInterface.GetGlobalObject()); + // Ensure that our hotkey state was synchronised with the event itself. bool hotkey_pressed_value = false; - JS::RootedValue js_hotkey_pressed_value(g_GUI->GetActiveGUI()->GetScriptInterface()->GetContext()); - g_GUI->GetActiveGUI()->GetScriptInterface()->Eval("state_before", &js_hotkey_pressed_value); - g_GUI->GetActiveGUI()->GetScriptInterface()->FromJSVal(g_GUI->GetActiveGUI()->GetScriptInterface()->GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); + JS::RootedValue js_hotkey_pressed_value(pageScriptInterface.GetContext()); + + pageScriptInterface.GetProperty(global, "state_before", &js_hotkey_pressed_value); + ScriptInterface::FromJSVal(pageScriptInterface.GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); TS_ASSERT_EQUALS(hotkey_pressed_value, true); hotkey_pressed_value = false; - g_GUI->GetActiveGUI()->GetScriptInterface()->Eval("state_after", &js_hotkey_pressed_value); - g_GUI->GetActiveGUI()->GetScriptInterface()->FromJSVal(g_GUI->GetActiveGUI()->GetScriptInterface()->GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); + pageScriptInterface.GetProperty(global, "state_after", &js_hotkey_pressed_value); + ScriptInterface::FromJSVal(pageScriptInterface.GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); TS_ASSERT_EQUALS(hotkey_pressed_value, true); hotkeyNotification.ev.type = SDL_KEYUP; @@ -97,13 +105,13 @@ in_dispatch_event(&ev); hotkey_pressed_value = true; - g_GUI->GetActiveGUI()->GetScriptInterface()->Eval("state_before", &js_hotkey_pressed_value); - g_GUI->GetActiveGUI()->GetScriptInterface()->FromJSVal(g_GUI->GetActiveGUI()->GetScriptInterface()->GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); + pageScriptInterface.GetProperty(global, "state_before", &js_hotkey_pressed_value); + ScriptInterface::FromJSVal(pageScriptInterface.GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); TS_ASSERT_EQUALS(hotkey_pressed_value, false); hotkey_pressed_value = true; - g_GUI->GetActiveGUI()->GetScriptInterface()->Eval("state_after", &js_hotkey_pressed_value); - g_GUI->GetActiveGUI()->GetScriptInterface()->FromJSVal(g_GUI->GetActiveGUI()->GetScriptInterface()->GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); + pageScriptInterface.GetProperty(global, "state_after", &js_hotkey_pressed_value); + ScriptInterface::FromJSVal(pageScriptInterface.GetContext(), js_hotkey_pressed_value, hotkey_pressed_value); TS_ASSERT_EQUALS(hotkey_pressed_value, false); }