fix showing keyboard cues under Win2k/XP
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35417 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -151,6 +151,7 @@ wxMSW:
|
|||||||
- Fixed ownerdrawn multiline buttons.
|
- Fixed ownerdrawn multiline buttons.
|
||||||
- wxCheckListBox item background fixed.
|
- wxCheckListBox item background fixed.
|
||||||
- Fixed error when trying to read a value from key not accessible for writing.
|
- Fixed error when trying to read a value from key not accessible for writing.
|
||||||
|
- Fixed keyboard cue visibility issues under Windows 2000/XP
|
||||||
|
|
||||||
wxWinCE:
|
wxWinCE:
|
||||||
|
|
||||||
|
@@ -491,6 +491,9 @@ protected:
|
|||||||
// the background, false otherwise (i.e. the system should erase it)
|
// the background, false otherwise (i.e. the system should erase it)
|
||||||
bool DoEraseBackground(WXHDC hDC);
|
bool DoEraseBackground(WXHDC hDC);
|
||||||
|
|
||||||
|
// generate WM_UPDATEUISTATE if it's needed for the OS we're running under
|
||||||
|
void MSWUpdateUIState();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
void Init();
|
void Init();
|
||||||
|
@@ -527,21 +527,13 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// for some reason we need to manually send ourselves this message as
|
// for standard dialogs the dialog manager generates WM_CHANGEUISTATE
|
||||||
// otherwise the mnemonics are always shown -- even if they're configured
|
// itself but for custom windows we have to do it ourselves in order to
|
||||||
// to be hidden until "Alt" is pressed in the control panel
|
// make the keyboard indicators (such as underlines for accelerators and
|
||||||
//
|
// focus rectangles) work under Win2k+
|
||||||
// this could indicate a bug somewhere else but for now this is the only
|
|
||||||
// fix we have
|
|
||||||
if ( ret )
|
if ( ret )
|
||||||
{
|
{
|
||||||
::SendMessage
|
MSWUpdateUIState();
|
||||||
(
|
|
||||||
GetHwnd(),
|
|
||||||
WM_UPDATEUISTATE,
|
|
||||||
MAKEWPARAM(UIS_INITIALIZE, UISF_HIDEFOCUS | UISF_HIDEACCEL),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: if we include PocketPC in this test, dialogs can fail to show up,
|
// Note: if we include PocketPC in this test, dialogs can fail to show up,
|
||||||
|
@@ -800,7 +800,7 @@ bool wxWindowMSW::SetCursor(const wxCursor& cursor)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindowMSW::WarpPointer (int x, int y)
|
void wxWindowMSW::WarpPointer(int x, int y)
|
||||||
{
|
{
|
||||||
ClientToScreen(&x, &y);
|
ClientToScreen(&x, &y);
|
||||||
|
|
||||||
@@ -810,6 +810,29 @@ void wxWindowMSW::WarpPointer (int x, int y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxWindowMSW::MSWUpdateUIState()
|
||||||
|
{
|
||||||
|
// WM_UPDATEUISTATE only appeared in Windows 2000 so it can do us no good
|
||||||
|
// to use it on older systems -- and could possibly do some harm
|
||||||
|
static int s_needToUpdate = -1;
|
||||||
|
if ( s_needToUpdate == -1 )
|
||||||
|
{
|
||||||
|
int verMaj, verMin;
|
||||||
|
s_needToUpdate = wxGetOsVersion(&verMaj, &verMin) == wxWINDOWS_NT &&
|
||||||
|
verMaj >= 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( s_needToUpdate )
|
||||||
|
{
|
||||||
|
// NB: it doesn't seem to matter what we put in wParam, whether we
|
||||||
|
// include just one UISF_XXX or both, both are affected, no idea
|
||||||
|
// why
|
||||||
|
::SendMessage(GetHwnd(), WM_UPDATEUISTATE,
|
||||||
|
MAKEWPARAM(UIS_INITIALIZE,
|
||||||
|
UISF_HIDEFOCUS | UISF_HIDEACCEL), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// scrolling stuff
|
// scrolling stuff
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -2061,6 +2084,12 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg)
|
|||||||
|
|
||||||
if ( GetEventHandler()->ProcessEvent(event) )
|
if ( GetEventHandler()->ProcessEvent(event) )
|
||||||
{
|
{
|
||||||
|
// as we don't call IsDialogMessage(), which would take of
|
||||||
|
// this by default, we need to manually send this message
|
||||||
|
// so that controls could change their appearance
|
||||||
|
// appropriately
|
||||||
|
MSWUpdateUIState();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user