Implement access to a global toplevel GdkWindow in a way that does not require always having an extra GtkWindow.

And don't use "RootWindow" in the name, it is not a root window in the X11 sense.
Also add wxGetPangoContext() to get access to a PangoContext.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76465 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2014-05-05 15:53:27 +00:00
parent 70387b4857
commit a0f10ec1d6
10 changed files with 96 additions and 82 deletions

View File

@@ -241,6 +241,55 @@ const char* wxDumpGtkWidget(GtkWidget* w)
return s.c_str();
}
//-----------------------------------------------------------------------------
// global top level GtkWidget/GdkWindow
//-----------------------------------------------------------------------------
static bool wxGetTopLevel(GtkWidget** widget, GdkWindow** window)
{
wxWindowList::const_iterator i = wxTopLevelWindows.begin();
for (; i != wxTopLevelWindows.end(); ++i)
{
const wxWindow* win = *i;
if (win->m_widget)
{
GdkWindow* gdkwin = gtk_widget_get_window(win->m_widget);
if (gdkwin)
{
if (widget)
*widget = win->m_widget;
if (window)
*window = gdkwin;
return true;
}
}
}
return false;
}
GdkWindow* wxGetTopLevelGDK()
{
GdkWindow* window;
if (!wxGetTopLevel(NULL, &window))
window = gdk_get_default_root_window();
return window;
}
PangoContext* wxGetPangoContext()
{
PangoContext* context;
GtkWidget* widget;
if (wxGetTopLevel(&widget, NULL))
{
context = gtk_widget_get_pango_context(widget);
g_object_ref(context);
}
else
context = gdk_pango_context_get_for_screen(gdk_screen_get_default());
return context;
}
//-----------------------------------------------------------------------------
// "expose_event"/"draw" from m_wxwindow
//-----------------------------------------------------------------------------
@@ -2208,19 +2257,6 @@ bool wxGetKeyState(wxKeyCode WXUNUSED(key))
}
#endif // __WINDOWS__
static GdkDisplay* GetDisplay()
{
wxWindow* tlw = NULL;
if (!wxTopLevelWindows.empty())
tlw = wxTopLevelWindows.front();
GdkDisplay* display;
if (tlw && tlw->m_widget)
display = gtk_widget_get_display(tlw->m_widget);
else
display = gdk_display_get_default();
return display;
}
wxMouseState wxGetMouseState()
{
wxMouseState ms;
@@ -2229,7 +2265,7 @@ wxMouseState wxGetMouseState()
gint y;
GdkModifierType mask;
GdkDisplay* display = GetDisplay();
GdkDisplay* display = gdk_window_get_display(wxGetTopLevelGDK());
#ifdef __WXGTK3__
GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
@@ -4891,7 +4927,7 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt)
// Get the current mouse position.
void wxGetMousePosition(int* x, int* y)
{
GdkDisplay* display = GetDisplay();
GdkDisplay* display = gdk_window_get_display(wxGetTopLevelGDK());
#ifdef __WXGTK3__
GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager);