//////////////////////////////////////////////////////////////////////// // Function: ToggleSIP // Description: Toggles the SIP state between ON and OFF. Reads the current // one to decide on what to do. Also, if ManualSIP is set it // reduces the SIP window size to 0,0 when hiding the SIP // Author: Dave Sheppard // Date: 2/3/2005 //////////////////////////////////////////////////////////////////////// void CSIP::ToggleSIP() { //first try the system sip (ie windows mobile) if(ToggleSystemSIP()) { return; } //failing that we'll use the api SIPINFO sipinfo; HRESULT hr = 0; memset(&sipinfo, 0, sizeof(SIPINFO)); sipinfo.cbSize = sizeof(SIPINFO); sipinfo.dwImDataSize = 0; SipGetInfo(&sipinfo); if(sipinfo.fdwFlags & SIPF_ON){ SipShowIM(SIPF_OFF); } else{ SipShowIM(SIPF_ON); } }
// Use SIP information, if available // SipGetInfo is not supported by SSDK (no definition!). static inline void qt_get_sip_info(QRect &rect) { SIPINFO sip; memset(&sip, 0, sizeof(SIPINFO)); sip.cbSize = sizeof(SIPINFO); if (SipGetInfo(&sip)) rect = QRect(QPoint(sip.rcVisibleDesktop.left, sip.rcVisibleDesktop.top), QPoint(sip.rcVisibleDesktop.right - 1, sip.rcVisibleDesktop.bottom - 1)); }
BOOL IsSIPOn() { SIPINFO sSipInfo; sSipInfo.cbSize = sizeof(SIPINFO); sSipInfo.dwImDataSize = 0; sSipInfo.pvImData = NULL; if (SipGetInfo(&sSipInfo) && (sSipInfo.fdwFlags & SIPF_ON)) return TRUE; return FALSE; }
BOOL CUIDialog::IsSipRaise() { SIPINFO tSipInfo; memset( &tSipInfo, 0, sizeof( tSipInfo ) ); tSipInfo.cbSize = sizeof( tSipInfo ); BOOL bGetSipResult = SipGetInfo( &tSipInfo ); if ( !bGetSipResult ) { Log() << _T( "BOOL bGetSipResult = SipGetInfo( &tSipInfo ); fail!!!" ) << endl; } return ( SIPF_ON & tSipInfo.fdwFlags ); }
/*********************************************************** * Name : roadmap_keyboard_hide * Purpose : Returns true if the native keyboard is currently visible * */ BOOL roadmap_native_keyboard_visible( void ) { #ifndef EMBEDDED_CE SIPINFO si; memset (&si, 0, sizeof (si)); si.cbSize = sizeof (si); if (SipGetInfo(&si)) { return (si.fdwFlags && SIPF_ON); } else return FALSE; #else return FALSE; #endif }
/** * \author Dave Sheppard (DS) * \author Darryn Campbell (DCC, JRQ768) * \date March 2005 (First Created, DS) * \date November 2009 (Converted from static to non-static. Made Compatible * with PocketBrowser 3.0) */ bool CSIP::MoveSip(int x, int y) { int iTemp; SIPINFO sipinfo; memset(&sipinfo, 0, sizeof(SIPINFO)); sipinfo.cbSize = sizeof(SIPINFO); sipinfo.dwImDataSize = 0; SipGetInfo(&sipinfo); if (!hSipWnd) return false; GetWindowRect(hSipWnd, &m_rcPosition); // Only alter the x value if not -9999 if (x != -9999) { iTemp = m_rcPosition.right - m_rcPosition.left; m_rcPosition.left = x; m_rcPosition.right = m_rcPosition.left + iTemp; } // Only alter the y value if not -9999 if (y != -9999) { iTemp = m_rcPosition.bottom - m_rcPosition.top; m_rcPosition.top = y; m_rcPosition.bottom = m_rcPosition.top + iTemp; } if (hSipWnd) MoveWindow(hSipWnd, m_rcPosition.left, m_rcPosition.top, m_rcPosition.right-m_rcPosition.left, m_rcPosition.bottom-m_rcPosition.top, TRUE); else return false; sipinfo.rcSipRect = m_rcPosition; SipSetInfo(&sipinfo); return true; }
/* Raise the software input panel. */ static void raise_sip (HWND dlg) { #ifdef HAVE_W32CE_SYSTEM SIPINFO si; SetForegroundWindow (dlg); memset (&si, 0, sizeof si); si.cbSize = sizeof si; if (SipGetInfo (&si)) { si.fdwFlags |= SIPF_ON; SipSetInfo (&si); } #else (void)dlg; #endif }
void GetWorkArea(LPRECT lprcWorkArea) { SIPINFO sSipInfo; memset(&sSipInfo, 0, sizeof(SIPINFO)); sSipInfo.cbSize = sizeof(SIPINFO); sSipInfo.dwImDataSize = 0; sSipInfo.pvImData = NULL; if (!GetWorkAreaFromPPCShell(lprcWorkArea, &sSipInfo)) { if (SipGetInfo(&sSipInfo)) { *lprcWorkArea = sSipInfo.rcVisibleDesktop; } else { SystemParametersInfo(SPI_GETWORKAREA, 0, lprcWorkArea, 0); } } murmur("rcWorkArea.top=%d; psi->rcWorkArea.bottom=%d\n",lprcWorkArea->top, lprcWorkArea->bottom); murmur("rcWorkArea.right=%d; psi->rcWorkArea.left=%d\n",lprcWorkArea->right, lprcWorkArea->left); }
BOOL CheckRectForSIP(CONST RECT * lprcRect, int& SipTop) { SIPINFO sSipInfo; RECT rcScr; RECT rcTmp1, rcTmp2; PFNSHSipInfo pfnSHSipInfo; HMODULE hMod; memset(&sSipInfo, 0, sizeof(SIPINFO)); sSipInfo.cbSize = sizeof(SIPINFO); sSipInfo.dwImDataSize = 0; sSipInfo.pvImData = NULL; // if (IsAPIReady(SH_SHELL,0))//WAIT_OBJECT_0 != WaitForAPIReady(SH_SHELL, 0)) // goto GeneralSipCheck; hMod = GetModuleHandle(TEXT("aygshell.dll")); if (!hMod) goto GeneralSipCheck; pfnSHSipInfo = (PFNSHSipInfo) GetProcAddress(hMod, TEXT("SHSipInfo")); if (!pfnSHSipInfo) goto GeneralSipCheck; if ((*pfnSHSipInfo)(SPI_GETSIPINFO, 0, (PVOID) &sSipInfo, 0)) { if (!SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScr, 0)) return FALSE; SipTop = sSipInfo.fdwFlags & SIPF_ON ? sSipInfo.rcSipRect.top : rcScr.bottom; if ((sSipInfo.fdwFlags & SIPF_ON) == 0) return false; // SIP can have minus coordinate. so let's get real display position if (!IntersectRect(&rcTmp1, &sSipInfo.rcSipRect, &rcScr)) return FALSE; // now check the given RECT is overlapped with SIP if (!IntersectRect(&rcTmp2, lprcRect, &rcTmp1)) return FALSE; // now they are overlapped. // but need to check that SIP is higher than the given rect. // if it is, there is no meaning to change candidate list position. if (rcTmp2.top > sSipInfo.rcSipRect.top) return FALSE; return TRUE; } GeneralSipCheck: if (SipGetInfo(&sSipInfo)) { if (!SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScr, 0)) return FALSE; SipTop = sSipInfo.fdwFlags & SIPF_ON ? sSipInfo.rcSipRect.top : rcScr.bottom; if ((sSipInfo.fdwFlags & SIPF_ON) == 0) return false; // SIP can have minus coordinate. so let's get real display position if (!IntersectRect(&rcTmp1, &sSipInfo.rcSipRect, &rcScr)) return FALSE; // now check the given RECT is overlapped with SIP if (!IntersectRect(&rcTmp2, lprcRect, &rcTmp1)) return FALSE; // now they are overlapped. // but need to check that SIP is higher than the given rect. // if it is, there is no meaning to change candidate list position. if (rcTmp2.top > sSipInfo.rcSipRect.top) return FALSE; return TRUE; } SipTop = g_sImeUIG.rcWorkArea.bottom; return FALSE; }
void CLoginPage::OnSize(UINT nType, int cx, int cy) { //AfxMessageBox(L"CLoginPage::OnSize"); //CXPropertyPage::OnSize(nType, cx, cy); OutputDebugString(L"CLoginPage::OnSize \n"); SIPINFO sipInfo={0}; sipInfo.cbSize=sizeof(SIPINFO); if (!bInitCtrlsPos) return; if (SipGetInfo(&sipInfo)){ if ((sipInfo.fdwFlags&SIPF_ON)==SIPF_ON){ OutputDebugString(L"Keyboard SIPF_ON \n"); GetDlgItem(IDC_STATIC_LOGO)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_VERSION)->ShowWindow(SW_HIDE); GetDlgItem(IDC_USERNAME)->SetWindowPos(&wndTop,rcUsername.left,rcUsername.top-nResizeTop,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_PASSWORD)->SetWindowPos(&wndTop,rcPassword.left,rcPassword.top-nResizeTop,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_STATIC_PASSWORD)->SetWindowPos(&wndTop,rcStaticPassword.left,rcStaticPassword.top-nResizeTop,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_STATIC_USERNAME)->SetWindowPos(&wndTop,rcStaticUsername.left,rcStaticUsername.top-nResizeTop,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_CONNECT_STATUS)->SetWindowPos(&wndTop,rcConnectStatus.left,rcConnectStatus.top-nResizeTop,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_SIGNIN_BUTTON)->SetWindowPos(&wndTop,rcSigninButton.left,rcSigninButton.top-nResizeTop,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); }else if ((sipInfo.fdwFlags&SIPF_OFF)==SIPF_OFF){ OutputDebugString(L"Keyboard SIPF_OFF \n"); GetDlgItem(IDC_STATIC_LOGO)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_VERSION)->ShowWindow(SW_SHOW); GetDlgItem(IDC_USERNAME)->SetWindowPos(&wndTop,rcUsername.left,rcUsername.top,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_PASSWORD)->SetWindowPos(&wndTop,rcPassword.left,rcPassword.top,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_STATIC_PASSWORD)->SetWindowPos(&wndTop,rcStaticPassword.left,rcStaticPassword.top,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_STATIC_USERNAME)->SetWindowPos(&wndTop,rcStaticUsername.left,rcStaticUsername.top,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_CONNECT_STATUS)->SetWindowPos(&wndTop,rcConnectStatus.left,rcConnectStatus.top,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); GetDlgItem(IDC_SIGNIN_BUTTON)->SetWindowPos(&wndTop,rcSigninButton.left,rcSigninButton.top,0,0, SWP_NOSIZE |SWP_SHOWWINDOW); } }else{ OutputDebugString(L"SipGetInfo Failed \n"); } }