]> git.saurik.com Git - wxWidgets.git/commitdiff
Add a private wrapper for GError to wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 27 Jul 2012 15:36:45 +0000 (15:36 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 27 Jul 2012 15:36:45 +0000 (15:36 +0000)
This class simply calls g_error_free() automatically.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72217 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/private/error.h [new file with mode: 0644]

diff --git a/include/wx/gtk/private/error.h b/include/wx/gtk/private/error.h
new file mode 100644 (file)
index 0000000..a07e10e
--- /dev/null
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        gtk/private/error.h
+// Purpose:     Wrapper around GError.
+// Author:      Vadim Zeitlin
+// Created:     2012-07-25
+// RCS-ID:      $Id$
+// Copyright:   (c) 2012 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_GTK_PRIVATE_ERROR_H_
+#define _WX_GTK_PRIVATE_ERROR_H_
+
+// ----------------------------------------------------------------------------
+// wxGtkError wraps GError and releases it automatically.
+// ----------------------------------------------------------------------------
+
+// Create an object of this class and pass the result of its Out() method to a
+// function taking "GError**", then use GetMessage() if the function returned
+// false.
+class wxGtkError
+{
+public:
+    wxGtkError() { m_error = NULL; }
+    ~wxGtkError() { if ( m_error ) g_error_free(m_error); }
+
+    GError** Out()
+    {
+        // This would result in a GError leak.
+        wxASSERT_MSG( !m_error, wxS("Can't reuse the same object.") );
+
+        return &m_error;
+    }
+
+    wxString GetMessage() const
+    {
+        return wxString::FromUTF8(m_error->message);
+    }
+
+private:
+    GError* m_error;
+
+    wxDECLARE_NO_COPY_CLASS(wxGtkError);
+};
+
+#endif // _WX_GTK_PRIVATE_ERROR_H_