Got wxHelpContext working, plus wxFindWindowAtPointer, wxGetMousePosition,

wxFindWindowAtPoint.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8282 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2000-09-07 13:22:42 +00:00
parent b85cfb6fd4
commit 59a12e9034
9 changed files with 123 additions and 100 deletions

View File

@@ -3754,61 +3754,42 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
*/
}
// Helper for wxFindWindowAtPointer
wxWindow* wxFindWindowForGdkWindow(wxWindow* win, GdkWindow* gdkWindow)
{
GdkWindow* thisGdkWindow1 = 0;
GdkWindow* thisGdkWindow2 = 0;
if (win->m_wxwindow)
thisGdkWindow1 = GTK_PIZZA(win->m_wxwindow)->bin_window;
thisGdkWindow2 = win->m_widget->window;
if (gdkWindow == thisGdkWindow1 || gdkWindow == thisGdkWindow2)
return win;
wxNode* node = win->GetChildren().First();
while (node)
{
wxWindow* child = (wxWindow*) node->Data();
wxWindow* found = wxFindWindowForGdkWindow(child, gdkWindow);
if (found)
return found;
node = node->Next();
}
return NULL;
}
// Find the wxWindow at the current mouse position, also returning the mouse
// position.
wxWindow* wxFindWindowAtPointer(wxPoint& pt)
{
int x, y;
GdkWindow* windowAtPtr = gdk_window_at_pointer(& x, & y);
pt.x = x;
pt.y = y;
if (windowAtPtr)
{
wxNode* node = wxTopLevelWindows.First();
while (node)
{
wxWindow* win = (wxWindow*) node->Data();
wxWindow* wxWinAtPtr = wxFindWindowForGdkWindow(win, windowAtPtr);
if (wxWinAtPtr)
return wxWinAtPtr;
node = node->Next();
}
}
return NULL;
pt = wxGetMousePosition();
wxWindow* found = wxFindWindowAtPoint(pt);
return found;
}
// Get the current mouse position.
wxPoint wxGetMousePosition()
{
/* This crashes when used within wxHelpContext,
so we have to use the X-specific implementation below.
gint x, y;
GdkModifierType *mask;
(void) gdk_window_get_pointer(NULL, &x, &y, mask);
return wxPoint(x, y);
*/
int x, y;
GdkWindow* windowAtPtr = gdk_window_at_pointer(& x, & y);
return wxPoint(x, y);
Display *display = GDK_WINDOW_XDISPLAY(windowAtPtr);
Window rootWindow = RootWindowOfScreen (DefaultScreenOfDisplay(display));
Window rootReturn, childReturn;
int rootX, rootY, winX, winY;
unsigned int maskReturn;
XQueryPointer (display,
rootWindow,
&rootReturn,
&childReturn,
&rootX, &rootY, &winX, &winY, &maskReturn);
return wxPoint(rootX, rootY);
}