bug 508210 - Gap between fennec window and soft keyboard r=vlad

This commit is contained in:
Brad Lassey 2009-08-06 15:07:13 -04:00
Родитель 8e3080a124
Коммит 7c60af6847
3 изменённых файлов: 39 добавлений и 24 удалений

Просмотреть файл

@ -5606,12 +5606,6 @@ PRBool nsWindow::OnHotKey(WPARAM wParam, LPARAM lParam)
void nsWindow::OnSettingsChange(WPARAM wParam, LPARAM lParam)
{
#if defined(WINCE_WINDOWS_MOBILE)
if (wParam == SPI_SETSIPINFO) {
nsWindowCE::NotifySoftKbObservers();
}
#endif
nsWindowGfx::OnSettingsChangeGfx(wParam);
}

Просмотреть файл

@ -78,25 +78,28 @@ TriStateBool nsWindowCE::sShowSIPButton = TRI_UNKNOWN;
**************************************************************/
#ifdef WINCE_HAVE_SOFTKB
void nsWindowCE::NotifySoftKbObservers()
void nsWindowCE::NotifySoftKbObservers(LPRECT visRect)
{
nsCOMPtr<nsIObserverService> observerService = do_GetService("@mozilla.org/observer-service;1");
if (observerService) {
if (!visRect) {
SIPINFO sipInfo;
wchar_t rectBuf[256];
memset(&sipInfo, 0, sizeof(SIPINFO));
sipInfo.cbSize = sizeof(SIPINFO);
if (SipGetInfo(&sipInfo)) {
if (SipGetInfo(&sipInfo))
visRect = &(sipInfo.rcVisibleDesktop);
else
return;
}
nsCOMPtr<nsIObserverService> observerService = do_GetService("@mozilla.org/observer-service;1");
if (observerService) {
wchar_t rectBuf[256];
_snwprintf(rectBuf, 256, L"{\"left\": %d, \"top\": %d,"
L" \"right\": %d, \"bottom\": %d}",
sipInfo.rcVisibleDesktop.left,
sipInfo.rcVisibleDesktop.top,
sipInfo.rcVisibleDesktop.right,
sipInfo.rcVisibleDesktop.bottom);
visRect->left, visRect->top, visRect->right, visRect->bottom);
observerService->NotifyObservers(nsnull, "softkb-change", rectBuf);
}
}
}
void nsWindowCE::ToggleSoftKB(PRBool show)
{
@ -131,11 +134,29 @@ void nsWindowCE::ToggleSoftKB(PRBool show)
GetWindowRect(hWndSIP, &sipRect);
int sipH = sipRect.bottom - sipRect.top;
int sipW = sipRect.right - sipRect.left;
MoveWindow(hWndSIP, (sX - sipW)/2, sY - sipH, sX, sY, TRUE);
}
sipRect.left = (sX - sipW)/2;
sipRect.top = sY - sipH;
sipRect.bottom = sY;
sipRect.right = sipRect.left + sipW;
MoveWindow(hWndSIP, (sX - sipW)/2, sY - sipH, sipW, sipH, TRUE);
SIPINFO sipInfo;
RECT visRect;
visRect.top = 0;
visRect.left = 0;
visRect.bottom = show ? sipRect.top : sY;
visRect.right = sX;
sipInfo.cbSize = sizeof(SIPINFO);
sipInfo.fdwFlags = SIPF_DOCKED | SIPF_LOCKED | (show ? SIPF_ON : SIPF_OFF);
sipInfo.rcSipRect = sipRect;
sipInfo.rcVisibleDesktop = visRect;
sipInfo.dwImDataSize = 0;
sipInfo.pvImData = NULL;
SipSetInfo(&sipInfo);
NotifySoftKbObservers(&visRect);
} else {
NotifySoftKbObservers();
}
}
void nsWindowCE::CreateSoftKeyMenuBar(HWND wnd)
{

Просмотреть файл

@ -86,7 +86,7 @@ public:
#if defined(WINCE_HAVE_SOFTKB)
static void ToggleSoftKB(PRBool show);
static void CreateSoftKeyMenuBar(HWND wnd);
static void NotifySoftKbObservers();
static void NotifySoftKbObservers(LPRECT = NULL);
static TriStateBool sShowSIPButton;
#endif
};