summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcallum_linden <none@none>2015-07-15 02:27:33 +0100
committercallum_linden <none@none>2015-07-15 02:27:33 +0100
commit83a9ae7b3c66e87179362f0da9fa7a378b1527e2 (patch)
tree06f185396e03113d643d2c6d96431d3cf25a5493
parenta5f1226f248c4d32f7ea84967e3e2f3acc0e0698 (diff)
New keyboard code for windows that uses system messages directly and works ok. Points to new LLCEFLib
-rwxr-xr-xautobuild.xml10
-rwxr-xr-xindra/llwindow/llwindowwin32.cpp13
-rwxr-xr-xindra/llwindow/llwindowwin32.h3
-rw-r--r--indra/media_plugins/cef/media_plugin_cef.cpp90
4 files changed, 30 insertions, 86 deletions
diff --git a/autobuild.xml b/autobuild.xml
index e09626ad41..9a1484fd50 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1536,11 +1536,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>15f7db04113c492d32918ff518cddca7</string>
+ <string>cd6b75ae4ebcf592155fada871b5e4e8</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llceflib_3p-llceflib/rev/303194/arch/Darwin/installer/llceflib-1.0.0.CEF-OSX-3.2171.2069-32.303194-darwin-303194.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llceflib_3p-llceflib/rev/303548/arch/Darwin/installer/llceflib-1.0.0.CEF-OSX-3.2171.2069-32.303548-darwin-303548.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1550,18 +1550,18 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>baaf891741e1d21a4f73ac0b6045b6a1</string>
+ <string>d0dfc921a000ae10b0d931782ac782e6</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llceflib_3p-llceflib/rev/303466/arch/CYGWIN/installer/llceflib-1.0.0.CEF-WIN-3.2272.gbda8dc7-32.303466-windows-303466.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llceflib_3p-llceflib/rev/303548/arch/CYGWIN/installer/llceflib-1.0.0.CEF-WIN-3.2272.gbda8dc7-32.303548-windows-303548.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
<key>version</key>
- <string>1.0.0.CEF-WIN-3.2272.gbda8dc7-32.303466</string>
+ <string>1.0.0.CEF-OSX-3.2171.2069-32.303548</string>
</map>
<key>llphysicsextensions_source</key>
<map>
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index cd2be87fad..7503d95263 100755
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -42,6 +42,7 @@
#include "llgl.h"
#include "llstring.h"
#include "lldir.h"
+#include "llsdutil.h"
#include "llglslshader.h"
// System includes
@@ -2068,6 +2069,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
window_imp->mKeyCharCode = 0; // don't know until wm_char comes in next
window_imp->mKeyScanCode = ( l_param >> 16 ) & 0xff;
window_imp->mKeyVirtualKey = w_param;
+ window_imp->mRawMsg = u_msg;
+ window_imp->mRawWParam = w_param;
+ window_imp->mRawLParam = l_param;
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_KEYDOWN");
{
@@ -2090,6 +2094,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
{
window_imp->mKeyScanCode = ( l_param >> 16 ) & 0xff;
window_imp->mKeyVirtualKey = w_param;
+ window_imp->mRawMsg = u_msg;
+ window_imp->mRawWParam = w_param;
+ window_imp->mRawLParam = l_param;
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_KEYUP");
LL_RECORD_BLOCK_TIME(FTM_KEYHANDLER);
@@ -2177,6 +2184,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
case WM_CHAR:
window_imp->mKeyCharCode = w_param;
+ window_imp->mRawMsg = u_msg;
+ window_imp->mRawWParam = w_param;
+ window_imp->mRawLParam = l_param;
// Should really use WM_UNICHAR eventually, but it requires a specific Windows version and I need
// to figure out how that works. - Doug
@@ -3238,6 +3248,9 @@ LLSD LLWindowWin32::getNativeKeyData()
result["scan_code"] = (S32)mKeyScanCode;
result["virtual_key"] = (S32)mKeyVirtualKey;
+ result["msg"] = ll_sd_from_U32(mRawMsg);
+ result["w_param"] = ll_sd_from_U32(mRawWParam);
+ result["l_param"] = ll_sd_from_U32(mRawLParam);
return result;
}
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 2ca8d48fc7..376bef3e50 100755
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -208,6 +208,9 @@ protected:
U32 mKeyCharCode;
U32 mKeyScanCode;
U32 mKeyVirtualKey;
+ U32 mRawMsg;
+ U32 mRawWParam;
+ U32 mRawLParam;
friend class LLWindowManager;
};
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp
index f4ffd6d634..c1724fba3e 100644
--- a/indra/media_plugins/cef/media_plugin_cef.cpp
+++ b/indra/media_plugins/cef/media_plugin_cef.cpp
@@ -30,6 +30,7 @@
#include "indra_constants.h" // for indra keyboard codes
#include "llgl.h"
+#include "llsdutil.h"
#include "llplugininstance.h"
#include "llpluginmessage.h"
#include "llpluginmessageclasses.h"
@@ -502,93 +503,20 @@ void MediaPluginCEF::deserializeKeyboardData(LLSD native_key_data, uint32_t& nat
//
void MediaPluginCEF::keyEvent(EKeyEvent key_event, int key, EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
{
- // The incoming values for 'key' will be the ones from indra_constants.h
- std::string utf8_text;
+ U32 msg = ll_U32_from_sd(native_key_data["msg"]);
+ U32 wparam = ll_U32_from_sd(native_key_data["w_param"]);
+ U64 lparam = ll_U32_from_sd(native_key_data["l_param"]);
- if (key < 128)
- {
- // Low-ascii characters need to get passed through.
- utf8_text = (char)key;
- }
-
- // Any special-case handling we want to do for particular keys...
- switch ((KEY)key)
- {
- // ASCII codes for some standard keys
- case KEY_BACKSPACE: utf8_text = (char)8; break;
- case KEY_TAB: utf8_text = (char)9; break;
- case KEY_RETURN: utf8_text = (char)13; break;
- case KEY_PAD_RETURN: utf8_text = (char)13; break;
- case KEY_ESCAPE: utf8_text = (char)27; break;
-
- default:
- break;
- }
-
- uint32_t native_scan_code = 0;
- uint32_t native_virtual_key = 0;
- uint32_t native_modifiers = 0;
- deserializeKeyboardData(native_key_data, native_scan_code, native_virtual_key, native_modifiers);
-
- //std::stringstream str;
- //str << "@@@@@ KEYBOARD EVENT native_modifiers = " << native_modifiers;
- //postDebugMessage(str.str());
-
- mLLCEFLib->keyboardEvent(key_event, (uint32_t)key, utf8_text.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
-
-
- std::stringstream str;
- str << "@@@@@@@@@@@@@@@@ MediaPluginCEF::keyEvent";
- postDebugMessage(str.str());
-
- //uint32_t msg = native_key_data["msg"].asInteger();
- //uint32_t wparam = native_key_data["w_param"].asInteger();
- //uint64_t lparam = native_key_data["l_param"].asInteger();
-
- //std::stringstream str;
- //str << "@@@@@@@@@@@@@@@@ keyEvent Native message" << msg << ", " << wparam << ", " << lparam;
- //postDebugMessage(str.str());
-
- //mLLCEFLib->nativeKeyboardEvent(msg, wparam, lparam);
-
-
- //checkEditState();
+ mLLCEFLib->nativeKeyboardEvent(msg, wparam, lparam);
};
void MediaPluginCEF::unicodeInput(const std::string &utf8str, EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
{
- uint32_t key = KEY_NONE;
-
- if (utf8str.size() == 1)
- {
- // The only way a utf8 string can be one byte long is if it's actually a single 7-bit ascii character.
- // In this case, use it as the key value.
- key = utf8str[0];
- }
-
- uint32_t native_scan_code = 0;
- uint32_t native_virtual_key = 0;
- uint32_t native_modifiers = 0;
- deserializeKeyboardData(native_key_data, native_scan_code, native_virtual_key, native_modifiers);
-
- std::stringstream str;
- str << "@@@@@@@@@@@@@@@@ MediaPluginCEF::unicodeInput";
- postDebugMessage(str.str());
-
- //uint32_t msg = native_key_data["msg"].asInteger();
- //uint32_t wparam = native_key_data["w_param"].asInteger();
- //uint64_t lparam = native_key_data["l_param"].asInteger();
-
- //std::stringstream str;
- //str << "@@@@@@@@@@@@@@@@ unicodeInput Native message" << msg << ", " << wparam << ", " << lparam;
- //postDebugMessage(str.str());
-
- //mLLCEFLib->nativeKeyboardEvent(msg, wparam, lparam);
-
- mLLCEFLib->keyboardEvent(KE_KEY_DOWN, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
- mLLCEFLib->keyboardEvent(KE_KEY_UP, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
+ U32 msg = ll_U32_from_sd(native_key_data["msg"]);
+ U32 wparam = ll_U32_from_sd(native_key_data["w_param"]);
+ U64 lparam = ll_U32_from_sd(native_key_data["l_param"]);
- // checkEditState();
+ mLLCEFLib->nativeKeyboardEvent(msg, wparam, lparam);
};
////////////////////////////////////////////////////////////////////////////////