aboutsummaryrefslogtreecommitdiff
path: root/libqmenumodel/src/unitymenumodel.cpp
diff options
context:
space:
mode:
authorNick Dedekind <nicholas.dedekind@gmail.com>2013-08-26 14:08:39 +0000
committerTarmac <>2013-08-26 14:08:39 +0000
commit50563a1ab243436c8c8fa86f88ef4a4b25b9a107 (patch)
tree5220ed33b70c5b6d5fdf555b4a7f75d4e66d7c1d /libqmenumodel/src/unitymenumodel.cpp
parent346f5fce5ddaf12dff92f467d69a1dd5841012c8 (diff)
parent67394e49c25cb273b53cd2034bb2d31b14a7402a (diff)
downloadqmenumodel-50563a1ab243436c8c8fa86f88ef4a4b25b9a107.tar.gz
qmenumodel-50563a1ab243436c8c8fa86f88ef4a4b25b9a107.tar.bz2
qmenumodel-50563a1ab243436c8c8fa86f88ef4a4b25b9a107.zip
UnityMenuModel::changeState now uses current state parameter type as a base for parameter GVariant conversion.
Approved by Lars Uebernickel, PS Jenkins bot.
Diffstat (limited to 'libqmenumodel/src/unitymenumodel.cpp')
-rw-r--r--libqmenumodel/src/unitymenumodel.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/libqmenumodel/src/unitymenumodel.cpp b/libqmenumodel/src/unitymenumodel.cpp
index 031de9a..3ea61ec 100644
--- a/libqmenumodel/src/unitymenumodel.cpp
+++ b/libqmenumodel/src/unitymenumodel.cpp
@@ -621,13 +621,25 @@ void UnityMenuModel::activate(int index, const QVariant& parameter)
void UnityMenuModel::changeState(int index, const QVariant& parameter)
{
GtkMenuTrackerItem* item;
+ GVariant* data;
+ GVariant* current_state;
item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
if (!item) return;
- GVariant* data = Converter::toGVariant(parameter);
+ current_state = gtk_menu_tracker_item_get_action_state (item);
+ if (current_state) {
+ // Attempt to convert the parameter to the expected type
+ data = Converter::toGVariantWithSchema(parameter, g_variant_get_type_string(current_state));
+ g_variant_unref (current_state);
+ } else {
+ data = Converter::toGVariant(parameter);
+ }
+
gtk_menu_tracker_item_change_state (item, data);
- g_variant_unref(data);
+ if (data) {
+ g_variant_unref(data);
+ }
}