[glibmm] Gio::Action: Make get_state() templated.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glibmm] Gio::Action: Make get_state() templated.
- Date: Tue, 6 Aug 2013 19:12:58 +0000 (UTC)
commit 14a000d4a7e2e3312bae25bdc5cc8e0062b63314
Author: Murray Cumming <murrayc murrayc com>
Date: Tue Aug 6 20:53:52 2013 +0200
Gio::Action: Make get_state() templated.
And do the same for get_state_hint(), renaming the originals to
get_state_variant() and get_state_hint_variant(). We had already
decided to break the ABI of these because the method signatures
in the stable release were useless, so this is OK.
We use the same technique elsewhere in glibmm and gtkmm for
Glib::ValueBase.
gio/src/action.ccg | 13 -------------
gio/src/action.hg | 47 +++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 43 insertions(+), 17 deletions(-)
---
diff --git a/gio/src/action.ccg b/gio/src/action.ccg
index 496aa30..78cad2d 100644
--- a/gio/src/action.ccg
+++ b/gio/src/action.ccg
@@ -24,19 +24,6 @@
namespace Gio
{
-bool Action::get_state_bool() const
-{
- g_return_val_if_fail(
- g_variant_type_equal(g_action_get_state_type(const_cast<GAction*>(gobj())), G_VARIANT_TYPE_BOOLEAN),
- false);
-
- GVariant* state = g_action_get_state(const_cast<GAction*>(gobj()));
- g_return_val_if_fail(state, false);
- const bool result = g_variant_get_boolean(state);
- g_variant_unref(state);
- return result;
-}
-
void Action::change_state(bool value)
{
g_return_if_fail(
diff --git a/gio/src/action.hg b/gio/src/action.hg
index b87332f..c0e97b3 100644
--- a/gio/src/action.hg
+++ b/gio/src/action.hg
@@ -19,6 +19,7 @@
#include <glibmm/interface.h>
#include <glibmm/varianttype.h>
+#include <gio/gio.h>
_DEFS(giomm,gio)
_PINCLUDE(glibmm/private/interface_p.h)
@@ -77,12 +78,14 @@ public:
_WRAP_METHOD(Glib::ustring get_name() const, g_action_get_name)
_WRAP_METHOD(Glib::VariantType get_parameter_type() const, g_action_get_parameter_type)
_WRAP_METHOD(Glib::VariantType get_state_type() const, g_action_get_state_type)
- _WRAP_METHOD(Glib::VariantBase get_state_hint() const, g_action_get_state_hint)
- _WRAP_METHOD(bool get_enabled() const, g_action_get_enabled)
- _WRAP_METHOD(Glib::VariantBase get_state() const, g_action_get_state)
//TODO: Docs
- bool get_state_bool() const;
+ template <typename T_Value>
+ void get_state_hint(T_Value& value) const;
+
+ _WRAP_METHOD(Glib::VariantBase get_state_hint_variant() const, g_action_get_state_hint)
+
+ _WRAP_METHOD(bool get_enabled() const, g_action_get_enabled)
_WRAP_METHOD(void change_state(const Glib::VariantBase& value), g_action_change_state)
@@ -100,6 +103,12 @@ public:
*/
void change_state(bool value);
+ //TODO: Docs
+ template <typename T_Value>
+ void get_state(T_Value& value) const;
+
+ _WRAP_METHOD(Glib::VariantBase get_state_variant() const, g_action_get_state)
+
_WRAP_METHOD(void activate(const Glib::VariantBase& parameter), g_action_activate)
_WRAP_METHOD(static bool name_is_valid(const Glib::ustring& action_name), g_action_name_is_valid )
@@ -135,4 +144,34 @@ public:
_WRAP_VFUNC(void activate(const Glib::VariantBase& parameter), "activate")
};
+template <typename T_Value>
+void Action::get_state(T_Value& value) const
+{
+ value = T_Value(); //Make sure that it is initialized.
+
+ typedef Glib::Variant<T_Value> type_glib_variant;
+
+ g_return_if_fail(
+ g_variant_type_equal(g_action_get_state_type(const_cast<GAction*>(gobj())),
type_glib_variant::variant_type().gobj()));
+
+ const Glib::VariantBase variantBase = get_state_variant();
+ const type_glib_variant variantDerived = variantBase.cast_dynamic<type_glib_variant>(variantBase);
+ value = variantDerived.get();
+}
+
+template <typename T_Value>
+void Action::get_state_hint(T_Value& value) const
+{
+ value = T_Value(); //Make sure that it is initialized.
+
+ typedef Glib::Variant<T_Value> type_glib_variant;
+
+ g_return_if_fail(
+ g_variant_type_equal(g_action_get_state_type(const_cast<GAction*>(gobj())),
type_glib_variant::variant_type().gobj()));
+
+ const Glib::VariantBase variantBase = get_state_hint_variant();
+ const type_glib_variant variantDerived = variantBase.cast_dynamic<type_glib_variant>(variantBase);
+ value = variantDerived.get();
+}
+
} // namespace Gio
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]