[glibmm] Gio::Action: Add parse_detailed_name() and parse_detailed_name_variant()
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glibmm] Gio::Action: Add parse_detailed_name() and parse_detailed_name_variant()
- Date: Thu, 30 Jan 2014 09:10:09 +0000 (UTC)
commit 592d82c99b01c385864e1b5cef50707648d3a744
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date: Thu Jan 30 10:04:52 2014 +0100
Gio::Action: Add parse_detailed_name() and parse_detailed_name_variant()
* gio/src/action.hg: Add parse_detailed_name() and
parse_detailed_name_variant().
* tools/m4/initialize_glib.m4: Add _INITIALIZATION of Glib::ustring&
from gchar*.
gio/src/action.hg | 45 ++++++++++++++++++++++++++++++++++++++++++-
tools/m4/initialize_glib.m4 | 3 ++
2 files changed, 47 insertions(+), 1 deletions(-)
---
diff --git a/gio/src/action.hg b/gio/src/action.hg
index 25b1f5b..b6d3964 100644
--- a/gio/src/action.hg
+++ b/gio/src/action.hg
@@ -175,8 +175,21 @@ public:
_WRAP_METHOD(static bool name_is_valid(const Glib::ustring& action_name), g_action_name_is_valid )
- //TODO: _WRAP_METHOD(static bool parse_detailed_name(const Glib::ustring& detailed_name, gchar**
action_name, GVariant** target_value), g_action_parse_detailed_name, errthrow)
+ /** Parses a detailed action name into its separate name and target components.
+ *
+ * Detailed action names can have three formats. See parse_detailed_name_variant().
+ *
+ * @newin{2,40}
+ * @param detailed_name A detailed action name.
+ * @param[out] action_name The action name.
+ * @param[out] target_value The target value.
+ * @throw Glib::VariantParseError if @a detailed_name has an invalid format or a target of an unexpected
type.
+ */
+ template <typename T_Value>
+ static void parse_detailed_name(const Glib::ustring& detailed_name, Glib::ustring& action_name, T_Value&
target_value);
+ _WRAP_METHOD(static void parse_detailed_name_variant(const Glib::ustring& detailed_name,
+ Glib::ustring& action_name{>>}, Glib::VariantBase& target_value{>>}), g_action_parse_detailed_name,
errthrow)
/** Formats a detailed action name from the action's action_name and @a target_value.
*
@@ -254,6 +267,36 @@ void Action::get_state_hint(T_Value& value) const
value = variantDerived.get();
}
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+// Doxygen 1.8.4 does not understand that this is the static function previously declared.
+template <typename T_Value>
+//static
+void Action::parse_detailed_name(const Glib::ustring& detailed_name, Glib::ustring& action_name, T_Value&
target_value)
+{
+ action_name.clear(); //Make sure the output arguments are initialized.
+ target_value = T_Value();
+
+ typedef Glib::Variant<T_Value> type_glib_variant;
+
+ Glib::VariantBase target_value_variantBase;
+ parse_detailed_name_variant(detailed_name, action_name, target_value_variantBase);
+
+ if (!target_value_variantBase)
+ throw Glib::VariantParseError(Glib::VariantParseError::TYPE_ERROR,
+ "Detailed action name '" + detailed_name + "' has no target. Expected a target of type " +
+ type_glib_variant::variant_type().get_string());
+
+ if (!target_value_variantBase.is_of_type(type_glib_variant::variant_type()))
+ throw Glib::VariantParseError(Glib::VariantParseError::TYPE_ERROR,
+ "Detailed action name '" + detailed_name + "' has a target of type " +
+ target_value_variantBase.get_type_string() + ". Expected " +
type_glib_variant::variant_type().get_string());
+
+ const type_glib_variant target_value_variantDerived =
+ target_value_variantBase.cast_dynamic<type_glib_variant>(target_value_variantBase);
+ target_value = target_value_variantDerived.get();
+}
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
template <typename T_Value>
Glib::ustring Action::print_detailed_name(const T_Value& parameter)
{
diff --git a/tools/m4/initialize_glib.m4 b/tools/m4/initialize_glib.m4
index 47302cd..5264d98 100644
--- a/tools/m4/initialize_glib.m4
+++ b/tools/m4/initialize_glib.m4
@@ -11,3 +11,6 @@ _INITIALIZATION(`Glib::VariantBase&',`GVariant*',`$3 = Glib::wrap($4)')
dnl VariantType
_INITIALIZATION(`Glib::VariantType&',`const GVariantType*',`$3 = Glib::wrap(const_cast<GVariantType*>($4))')
+
+dnl ustring
+_INITIALIZATION(`Glib::ustring&',`gchar*',`$3 = Glib::convert_return_gchar_ptr_to_ustring($4)')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]