From 391bf008a7c005f7245a6522a67819a94a051011 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 30 Oct 2006 17:07:27 +0000 Subject: [PATCH] handle XOpenDisplay() failure in GetSM(); reformatted the code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42733 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/utilsgtk.cpp | 62 ++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/src/gtk/utilsgtk.cpp b/src/gtk/utilsgtk.cpp index 287cb59948..1144d39c3a 100644 --- a/src/gtk/utilsgtk.cpp +++ b/src/gtk/utilsgtk.cpp @@ -293,46 +293,52 @@ wxPortId wxGUIAppTraits::GetToolkitVersion(int *verMaj, int *verMin) const #if wxUSE_DETECT_SM static wxString GetSM() { - Display *dpy; - SmcConn smc_conn; - char *vendor; - char *client_id_ret; - dpy = XOpenDisplay(NULL); - - smc_conn = SmcOpenConnection(NULL, NULL, - 999, 999, - 0 /* mask */, NULL /* callbacks */, - NULL, &client_id_ret, 0, NULL); - - if (smc_conn) + class Dpy { - vendor = SmcVendor(smc_conn); - wxString ret = wxString::FromAscii( vendor ); - free(vendor); + public: + Dpy() { m_dpy = XOpenDisplay(NULL); } + ~Dpy() { if ( m_dpy ) XCloseDisplay(m_dpy); } - SmcCloseConnection(smc_conn, 0, NULL); - free(client_id_ret); + operator Display *() const { return m_dpy; } + private: + Display *m_dpy; + } dpy; - XCloseDisplay(dpy); - - return ret; - } - - return wxEmptyString; + if ( !dpy ) + return wxEmptyString; + + char *client_id; + SmcConn smc_conn = SmcOpenConnection(NULL, NULL, + 999, 999, + 0 /* mask */, NULL /* callbacks */, + NULL, &client_id, + 0, NULL); + + if ( !smc_conn ) + return wxEmptyString; + + char *vendor = SmcVendor(smc_conn); + wxString ret = wxString::FromAscii( vendor ); + free(vendor); + + SmcCloseConnection(smc_conn, 0, NULL); + free(client_id); + + return ret; } -#endif +#endif // wxUSE_DETECT_SM wxString wxGUIAppTraits::GetDesktopEnvironment() const { #if wxUSE_DETECT_SM - wxString SM = GetSM(); - + const wxString SM = GetSM(); + if (SM == wxT("GnomeSM")) return wxT("GNOME"); - + if (SM == wxT("KDE")) return wxT("KDE"); -#endif +#endif // wxUSE_DETECT_SM return wxEmptyString; } -- 2.45.2