From 5a92b56137aa9914fb1463fbc9342d595e38a88e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 27 Jul 2012 15:36:45 +0000 Subject: [PATCH] Add a private wrapper for GError to wxGTK. 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 | 46 ++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 include/wx/gtk/private/error.h diff --git a/include/wx/gtk/private/error.h b/include/wx/gtk/private/error.h new file mode 100644 index 0000000000..a07e10e453 --- /dev/null +++ b/include/wx/gtk/private/error.h @@ -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 +// 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_