[glibmm] Pass 0 (NULL) instead of for C properties.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glibmm] Pass 0 (NULL) instead of for C properties.
- Date: Tue, 3 Sep 2013 19:41:37 +0000 (UTC)
commit db1668a39d9646882d5aa6b7386a3b7ea70f99af
Author: Murray Cumming <murrayc murrayc com>
Date: Tue Sep 3 21:40:25 2013 +0200
Pass 0 (NULL) instead of for C properties.
* glib/glibmm/objectbase.cc: set_property_value():
* glib/glibmm/propertyproxy_base.cc: set_property():
If the value is a G_TYPE_STRING (a gchar*), and is "",
then pass 0 instead.
Bug #686909
glib/glibmm/objectbase.cc | 12 ++++++++++++
glib/glibmm/propertyproxy_base.cc | 15 ++++++++++++++-
2 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/glib/glibmm/objectbase.cc b/glib/glibmm/objectbase.cc
index 140816a..047f192 100644
--- a/glib/glibmm/objectbase.cc
+++ b/glib/glibmm/objectbase.cc
@@ -260,6 +260,18 @@ bool ObjectBase::_cpp_destruction_is_in_progress() const
void ObjectBase::set_property_value(const Glib::ustring& property_name, const Glib::ValueBase& value)
{
+ const GValue* cvalue = value.gobj();
+ if(cvalue && G_VALUE_HOLDS(cvalue, G_TYPE_STRING))
+ {
+ const gchar* str = g_value_get_string (cvalue);
+ if(str && (strcmp(str, "") == 0))
+ {
+ //Pass NULL to the C API instead of "":
+ g_object_set(gobj(), property_name.c_str(), (void*)0, (void*)0);
+ return;
+ }
+ }
+
g_object_set_property(gobj(), property_name.c_str(), value.gobj());
}
diff --git a/glib/glibmm/propertyproxy_base.cc b/glib/glibmm/propertyproxy_base.cc
index 0f1fac8..4274c65 100644
--- a/glib/glibmm/propertyproxy_base.cc
+++ b/glib/glibmm/propertyproxy_base.cc
@@ -26,6 +26,7 @@
#include <glibmm/signalproxy_connectionnode.h>
#include <glibmm/object.h>
#include <glibmm/private/object_p.h>
+#include <cstring>
namespace Glib
{
@@ -98,7 +99,19 @@ SignalProxyProperty PropertyProxy_Base::signal_changed()
void PropertyProxy_Base::set_property_(const Glib::ValueBase& value)
{
- g_object_set_property(obj_->gobj(), property_name_, value.gobj());
+ const GValue* cvalue = value.gobj();
+ if(cvalue && G_VALUE_HOLDS(cvalue, G_TYPE_STRING))
+ {
+ const gchar* str = g_value_get_string (cvalue);
+ if(str && (strcmp(str, "") == 0))
+ {
+ //Pass NULL to the C API instead of "":
+ g_object_set(obj_->gobj(), property_name_, (void*)0, (void*)0);
+ return;
+ }
+ }
+
+ g_object_set_property(obj_->gobj(), property_name_, cvalue);
}
void PropertyProxy_Base::get_property_(Glib::ValueBase& value) const
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]