aboutsummaryrefslogtreecommitdiff
path: root/libindicator
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2012-02-27 14:25:21 -0600
committerTed Gould <ted@gould.cx>2012-02-27 14:25:21 -0600
commit4baf9b7067554450de88e40d3336d9739ca79de5 (patch)
tree2fc9a7a8e7405fa187113e55004aea29804d22b2 /libindicator
parentf7e5502a2a136bedfb6a72fb081883568a1ead3c (diff)
downloadlibayatana-indicator-4baf9b7067554450de88e40d3336d9739ca79de5.tar.gz
libayatana-indicator-4baf9b7067554450de88e40d3336d9739ca79de5.tar.bz2
libayatana-indicator-4baf9b7067554450de88e40d3336d9739ca79de5.zip
Figure out what kind of actions we have
Diffstat (limited to 'libindicator')
-rw-r--r--libindicator/indicator-desktop-shortcuts.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/libindicator/indicator-desktop-shortcuts.c b/libindicator/indicator-desktop-shortcuts.c
index bb25979..d58c81d 100644
--- a/libindicator/indicator-desktop-shortcuts.c
+++ b/libindicator/indicator-desktop-shortcuts.c
@@ -174,6 +174,12 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
switch(prop_id) {
case PROP_DESKTOP_FILE: {
+ if (priv->keyfile != NULL) {
+ g_key_file_free(priv->keyfile);
+ priv->keyfile = NULL;
+ priv->actions = ACTIONS_NONE;
+ }
+
GError * error = NULL;
GKeyFile * keyfile = g_key_file_new();
g_key_file_load_from_file(keyfile, g_value_get_string(value), G_KEY_FILE_NONE, &error);
@@ -185,7 +191,17 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
break;
}
- if (!g_key_file_has_key(keyfile, G_KEY_FILE_DESKTOP_GROUP, OLD_SHORTCUTS_KEY, NULL)) {
+ /* Always prefer the desktop spec if we can get it */
+ if (priv->actions == ACTIONS_NONE && g_key_file_has_key(keyfile, G_KEY_FILE_DESKTOP_GROUP, ACTIONS_KEY, NULL)) {
+ priv->actions = ACTIONS_DESKTOP_SPEC;
+ }
+
+ /* But fallback if we can't */
+ if (priv->actions == ACTIONS_NONE && g_key_file_has_key(keyfile, G_KEY_FILE_DESKTOP_GROUP, OLD_SHORTCUTS_KEY, NULL)) {
+ priv->actions = ACTIONS_XAYATANA;
+ }
+
+ if (priv->actions == ACTIONS_NONE) {
g_key_file_free(keyfile);
break;
}