Don't add popup windows to wxTopLevelWindows,
       espially not if you don't delete them later.
     Corrected ReleaseMouse().


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14195 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-02-14 00:45:13 +00:00
parent 81762e79b8
commit 346d4fcde7
2 changed files with 27 additions and 31 deletions

View File

@@ -49,8 +49,6 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
m_parent = parent; m_parent = parent;
if (m_parent) m_parent->AddChild( this ); if (m_parent) m_parent->AddChild( this );
wxTopLevelWindows.Append(this);
Display *xdisplay = wxGlobalDisplay(); Display *xdisplay = wxGlobalDisplay();
int xscreen = DefaultScreen( xdisplay ); int xscreen = DefaultScreen( xdisplay );
Visual *xvisual = DefaultVisual( xdisplay, xscreen ); Visual *xvisual = DefaultVisual( xdisplay, xscreen );

View File

@@ -304,11 +304,13 @@ void wxWindowX11::DoCaptureMouse()
if (m_winCaptured) if (m_winCaptured)
return; return;
Window xwindow = (Window) GetMainWindow();
g_captureWindow = (wxWindow*) this; g_captureWindow = (wxWindow*) this;
if (GetMainWindow()) if (xwindow)
{ {
int res = XGrabPointer(wxGlobalDisplay(), (Window) GetMainWindow(), int res = XGrabPointer(wxGlobalDisplay(), xwindow,
FALSE, FALSE,
ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask,
GrabModeAsync, GrabModeAsync,
@@ -329,6 +331,7 @@ void wxWindowX11::DoCaptureMouse()
g_captureWindow = NULL; g_captureWindow = NULL;
return; return;
} }
wxLogDebug("Grabbed pointer"); wxLogDebug("Grabbed pointer");
#if 0 #if 0
@@ -351,11 +354,8 @@ void wxWindowX11::DoCaptureMouse()
#if 0 #if 0
res = XGrabKeyboard(wxGlobalDisplay(), (Window) GetMainWindow(), res = XGrabKeyboard(wxGlobalDisplay(), (Window) GetMainWindow(),
#if 0
ShiftMask | LockMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask, ShiftMask | LockMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask,
#else
FALSE, FALSE,
#endif
GrabModeAsync, GrabModeAsync,
GrabModeAsync, GrabModeAsync,
CurrentTime); CurrentTime);
@@ -364,10 +364,8 @@ void wxWindowX11::DoCaptureMouse()
{ {
wxLogDebug("Failed to grab keyboard."); wxLogDebug("Failed to grab keyboard.");
XUngrabPointer(wxGlobalDisplay(), CurrentTime); XUngrabPointer(wxGlobalDisplay(), CurrentTime);
#if 0
XUngrabButton(wxGlobalDisplay(), AnyButton, AnyModifier, XUngrabButton(wxGlobalDisplay(), AnyButton, AnyModifier,
(Window) GetMainWindow()); (Window) GetMainWindow());
#endif
return; return;
} }
#endif #endif
@@ -379,17 +377,17 @@ void wxWindowX11::DoCaptureMouse()
void wxWindowX11::DoReleaseMouse() void wxWindowX11::DoReleaseMouse()
{ {
g_captureWindow = NULL; g_captureWindow = NULL;
if ( !m_winCaptured ) if ( !m_winCaptured )
return; return;
Window wMain = (Window)GetMainWindow(); Window xwindow = (Window) GetMainWindow();
if ( wMain ) if (xwindow)
{ {
XUngrabPointer(wxGlobalDisplay(), wMain); XUngrabPointer( wxGlobalDisplay(), CurrentTime );
#if 0 #if 0
XUngrabButton(wxGlobalDisplay(), AnyButton, AnyModifier, XUngrabButton( wxGlobalDisplay(), AnyButton, AnyModifier, xwindow);
wMain);
XUngrabKeyboard( wxGlobalDisplay(), CurrentTime ); XUngrabKeyboard( wxGlobalDisplay(), CurrentTime );
#endif #endif
} }