Add wxEVT_SET_FOCUS and wxEVT_KILL_FOCUS event to wxX11
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77776 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -177,6 +177,7 @@ protected:
|
|||||||
int incW, int incH);
|
int incW, int incH);
|
||||||
virtual void DoCaptureMouse();
|
virtual void DoCaptureMouse();
|
||||||
virtual void DoReleaseMouse();
|
virtual void DoReleaseMouse();
|
||||||
|
virtual void KillFocus();
|
||||||
|
|
||||||
#if wxUSE_TOOLTIPS
|
#if wxUSE_TOOLTIPS
|
||||||
virtual void DoSetToolTip( wxToolTip *tip );
|
virtual void DoSetToolTip( wxToolTip *tip );
|
||||||
|
@@ -66,8 +66,13 @@
|
|||||||
// global variables for this module
|
// global variables for this module
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
static wxWindow* g_captureWindow = NULL;
|
static wxWindowX11* g_captureWindow = NULL;
|
||||||
static GC g_eraseGC;
|
static GC g_eraseGC;
|
||||||
|
// the window that has keyboard focus:
|
||||||
|
static wxWindow* gs_focusedWindow = NULL;
|
||||||
|
// the window that is about to be focused after currently focused
|
||||||
|
// one looses focus:
|
||||||
|
static wxWindow* gs_toBeFocusedWindow = NULL;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// macros
|
// macros
|
||||||
@@ -351,6 +356,9 @@ wxWindowX11::~wxWindowX11()
|
|||||||
if (g_captureWindow == this)
|
if (g_captureWindow == this)
|
||||||
g_captureWindow = NULL;
|
g_captureWindow = NULL;
|
||||||
|
|
||||||
|
if ( gs_focusedWindow == this )
|
||||||
|
KillFocus();
|
||||||
|
|
||||||
DestroyChildren();
|
DestroyChildren();
|
||||||
|
|
||||||
if (m_clientWindow != m_mainWindow)
|
if (m_clientWindow != m_mainWindow)
|
||||||
@@ -388,6 +396,20 @@ void wxWindowX11::SetFocus()
|
|||||||
if (!AcceptsFocus())
|
if (!AcceptsFocus())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ( gs_focusedWindow == (wxWindow*)this )
|
||||||
|
return; // nothing to do, focused already
|
||||||
|
|
||||||
|
wxWindow *oldFocusedWindow = (wxWindow*)xwindow;
|
||||||
|
|
||||||
|
if ( gs_focusedWindow )
|
||||||
|
{
|
||||||
|
gs_toBeFocusedWindow = (wxWindow*)this;
|
||||||
|
gs_focusedWindow->KillFocus();
|
||||||
|
gs_toBeFocusedWindow = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
gs_focusedWindow = (wxWindow*)this;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (GetName() == "scrollBar")
|
if (GetName() == "scrollBar")
|
||||||
{
|
{
|
||||||
@@ -410,6 +432,34 @@ void wxWindowX11::SetFocus()
|
|||||||
{
|
{
|
||||||
m_needsInputFocus = true;
|
m_needsInputFocus = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// notify the parent keeping track of focus for the kbd navigation
|
||||||
|
// purposes that we got it
|
||||||
|
wxChildFocusEvent eventFocus((wxWindow*)this);
|
||||||
|
HandleWindowEvent(eventFocus);
|
||||||
|
|
||||||
|
wxFocusEvent event(wxEVT_SET_FOCUS, GetId());
|
||||||
|
event.SetEventObject(this);
|
||||||
|
event.SetWindow((wxWindow*)oldFocusedWindow);
|
||||||
|
HandleWindowEvent(event);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kill focus
|
||||||
|
void wxWindowX11::KillFocus()
|
||||||
|
{
|
||||||
|
wxCHECK_RET( gs_focusedWindow == this,
|
||||||
|
"killing focus on window that doesn't have it" );
|
||||||
|
|
||||||
|
gs_focusedWindow = NULL;
|
||||||
|
|
||||||
|
if ( m_isBeingDeleted )
|
||||||
|
return; // don't send any events from dtor
|
||||||
|
|
||||||
|
wxFocusEvent event(wxEVT_KILL_FOCUS, GetId());
|
||||||
|
event.SetEventObject(this);
|
||||||
|
event.SetWindow(gs_toBeFocusedWindow);
|
||||||
|
HandleWindowEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the window with the focus
|
// Get the window with the focus
|
||||||
|
Reference in New Issue
Block a user