From 69af9e3fb047c7c52e89cb204a529abb13c565db Mon Sep 17 00:00:00 2001 From: Scott Talbert Date: Sat, 12 Mar 2016 13:04:15 -0500 Subject: [PATCH] Fix crash when calling GetHandle() on unrealized window with wxGTK3 Unlike GDK_WINDOW_XWINDOW(), GDK_WINDOW_XID() seems unable to handle NULLs, so check for a NULL first. This is similar to a patch I submitted for Classic: http://trac.wxwidgets.org/ticket/16765 --- src/window_ex.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/window_ex.cpp b/src/window_ex.cpp index e4159328..4df37253 100644 --- a/src/window_ex.cpp +++ b/src/window_ex.cpp @@ -7,9 +7,19 @@ #include #include #ifdef __WXGTK3__ -#define GetXWindow(wxwin) (wxwin)->m_wxwindow ? \ - GDK_WINDOW_XID(gtk_widget_get_window((wxwin)->m_wxwindow)) : \ - GDK_WINDOW_XID(gtk_widget_get_window((wxwin)->m_widget)) +// Unlike GDK_WINDOW_XWINDOW, GDK_WINDOW_XID can't handle a NULL, so check 1st +static XID GetXWindow(const wxWindow* wxwin) { + if ((wxwin)->m_wxwindow) { + if (gtk_widget_get_window((wxwin)->m_wxwindow)) + return GDK_WINDOW_XID(gtk_widget_get_window((wxwin)->m_wxwindow)); + return 0; + } + else { + if (gtk_widget_get_window((wxwin)->m_widget)) + return GDK_WINDOW_XID(gtk_widget_get_window((wxwin)->m_widget)); + return 0; + } +} #else #define GetXWindow(wxwin) (wxwin)->m_wxwindow ? \ GDK_WINDOW_XWINDOW((wxwin)->m_wxwindow->window) : \