diff options
Diffstat (limited to 'indra/media_plugins/cef/media_plugin_cef.cpp')
| -rw-r--r-- | indra/media_plugins/cef/media_plugin_cef.cpp | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index caf804f915..a2b664c755 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -114,6 +114,8 @@ private: bool mCanDelete; bool mCanSelectAll; std::string mRootCachePath; + std::string mCachePath; + std::string mContextCachePath; std::string mCefLogFile; bool mCefLogVerbose; std::vector<std::string> mPickedFiles; @@ -911,7 +913,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) keyEvent(key_event, native_key_data); -#elif LL_WINDOWS +#else std::string event = message_in.getValue("event"); LLSD native_key_data = message_in.getValueLLSD("native_key_data"); @@ -933,6 +935,13 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mEnableMediaPluginDebugging = message_in.getValueBoolean("enable"); } +#if LL_LINUX + else if (message_name == "enable_pipewire_volume_catcher") + { + bool enable = message_in.getValueBoolean("enable"); + mVolumeCatcher.onEnablePipeWireVolumeCatcher(enable); + } +#endif if (message_name == "pick_file_response") { LLSD file_list_llsd = message_in.getValueLLSD("file_list"); @@ -948,6 +957,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { authResponse(message_in); } +#if !LL_LINUX if (message_name == "edit_undo") { mCEFLib->editUndo(); @@ -956,6 +966,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mCEFLib->editRedo(); } +#endif if (message_name == "edit_cut") { mCEFLib->editCut(); @@ -968,6 +979,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mCEFLib->editPaste(); } +#if !LL_LINUX if (message_name == "edit_delete") { mCEFLib->editDelete(); @@ -980,6 +992,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mCEFLib->viewSource(); } +#endif } else if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER) { @@ -1095,6 +1108,28 @@ void MediaPluginCEF::keyEvent(dullahan::EKeyEvent key_event, LLSD native_key_dat mCEFLib->nativeKeyboardEventWin(msg, wparam, lparam); #endif + +#if LL_LINUX + + uint32_t native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); // this is actually the SDL event.key.keysym.sym; + uint32_t native_virtual_key_win = (uint32_t)(native_key_data["virtual_key_win"].asInteger()); + uint32_t native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); + + // only for non-printable keysyms, the actual text input is done in unicodeInput() below + if (native_virtual_key <= 0x1b || native_virtual_key >= 0x7f) + { + // set keypad flag, not sure if this even does anything + bool keypad = false; + if (native_virtual_key_win >= 0x60 && native_virtual_key_win <= 0x6f) + { + keypad = true; + } + + // yes, we send native_virtual_key_win twice because native_virtual_key breaks it + mCEFLib->nativeKeyboardEventSDL2(key_event, native_virtual_key, native_modifiers, keypad); + } + +#endif // LL_LINUX }; void MediaPluginCEF::unicodeInput(std::string event, LLSD native_key_data = LLSD::emptyMap()) @@ -1125,25 +1160,44 @@ void MediaPluginCEF::unicodeInput(std::string event, LLSD native_key_data = LLSD U64 lparam = ll_U32_from_sd(native_key_data["l_param"]); mCEFLib->nativeKeyboardEventWin(msg, wparam, lparam); #endif + +#if LL_LINUX + + uint32_t native_scan_code = (uint32_t)(native_key_data["sdl_sym"].asInteger()); + uint32_t native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); + uint32_t native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); + + mCEFLib->nativeKeyboardEvent(dullahan::KE_KEY_DOWN, native_scan_code, native_virtual_key, native_modifiers); + +#endif // LL_LINUX }; //////////////////////////////////////////////////////////////////////////////// // void MediaPluginCEF::checkEditState() { +#if !LL_LINUX bool can_undo = mCEFLib->editCanUndo(); bool can_redo = mCEFLib->editCanRedo(); +#endif bool can_cut = mCEFLib->editCanCut(); bool can_copy = mCEFLib->editCanCopy(); bool can_paste = mCEFLib->editCanPaste(); +#if !LL_LINUX bool can_delete = mCEFLib->editCanDelete(); bool can_select_all = mCEFLib->editCanSelectAll(); +#endif +#if LL_LINUX + if ((can_cut != mCanCut) || (can_copy != mCanCopy) || (can_paste != mCanPaste)) +#else if ((can_undo != mCanUndo) || (can_redo != mCanRedo) || (can_cut != mCanCut) || (can_copy != mCanCopy) || (can_paste != mCanPaste) || (can_delete != mCanDelete) || (can_select_all != mCanSelectAll)) +#endif { LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_state"); +#if !LL_LINUX if (can_undo != mCanUndo) { mCanUndo = can_undo; @@ -1155,6 +1209,7 @@ void MediaPluginCEF::checkEditState() mCanRedo = can_redo; message.setValueBoolean("redo", can_redo); } +#endif if (can_cut != mCanCut) { @@ -1174,6 +1229,7 @@ void MediaPluginCEF::checkEditState() message.setValueBoolean("paste", can_paste); } +#if !LL_LINUX if (can_delete != mCanDelete) { mCanDelete = can_delete; @@ -1185,6 +1241,7 @@ void MediaPluginCEF::checkEditState() mCanSelectAll = can_select_all; message.setValueBoolean("select_all", can_select_all); } +#endif sendMessage(message); } |
