aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-02-10 09:15:04 -0600
committerTed Gould <ted@gould.cx>2010-02-10 09:15:04 -0600
commitaafaa311dfe8548c8e2680ab98ee865ea75abc63 (patch)
tree937bd75485abc296fb98cacfc929ad7b324dcd15 /src
parent907253f5ea802c1161bd718f8c9649c416e77bf2 (diff)
downloadayatana-indicator-application-aafaa311dfe8548c8e2680ab98ee865ea75abc63.tar.gz
ayatana-indicator-application-aafaa311dfe8548c8e2680ab98ee865ea75abc63.tar.bz2
ayatana-indicator-application-aafaa311dfe8548c8e2680ab98ee865ea75abc63.zip
Creating a clean ID that doesn't take any illegal dbus characters and using that in the path.
Diffstat (limited to 'src')
-rw-r--r--src/libappindicator/app-indicator.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c
index b5512c5..cfc6377 100644
--- a/src/libappindicator/app-indicator.c
+++ b/src/libappindicator/app-indicator.c
@@ -59,6 +59,7 @@ License version 3 and version 2.1 along with this program. If not, see
struct _AppIndicatorPrivate {
/* Properties */
gchar *id;
+ gchar *clean_id;
AppIndicatorCategory category;
AppIndicatorStatus status;
gchar *icon_name;
@@ -306,6 +307,7 @@ app_indicator_init (AppIndicator *self)
AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self);
priv->id = NULL;
+ priv->clean_id = NULL;
priv->category = APP_INDICATOR_CATEGORY_OTHER;
priv->status = APP_INDICATOR_STATUS_PASSIVE;
priv->icon_name = NULL;
@@ -408,6 +410,11 @@ app_indicator_finalize (GObject *object)
priv->id = NULL;
}
+ if (priv->clean_id != NULL) {
+ g_free(priv->clean_id);
+ priv->clean_id = NULL;
+ }
+
if (priv->icon_name != NULL) {
g_free(priv->icon_name);
priv->icon_name = NULL;
@@ -578,11 +585,18 @@ check_connect (AppIndicator *self)
if (priv->icon_name == NULL) return;
if (priv->id == NULL) return;
- gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s", priv->id);
+ priv->clean_id = g_strdup(priv->id);
+ gchar * cleaner;
+ for (cleaner = priv->clean_id; *cleaner != '\0'; cleaner++) {
+ if (!g_ascii_isalnum(*cleaner)) {
+ *cleaner = '_';
+ }
+ }
+
+ gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s", priv->clean_id);
dbus_g_connection_register_g_object(priv->connection,
path,
G_OBJECT(self));
- g_free(path);
GError * error = NULL;
priv->watcher_proxy = dbus_g_proxy_new_for_name_owner(priv->connection,
@@ -595,11 +609,13 @@ check_connect (AppIndicator *self)
it's not a warning anymore. */
g_error_free(error);
start_fallback_timer(self, FALSE);
+ g_free(path);
return;
}
g_signal_connect(G_OBJECT(priv->watcher_proxy), "destroy", G_CALLBACK(watcher_proxy_destroyed), self);
- org_freedesktop_StatusNotifierWatcher_register_status_notifier_item_async(priv->watcher_proxy, DEFAULT_ITEM_PATH, register_service_cb, self);
+ org_freedesktop_StatusNotifierWatcher_register_status_notifier_item_async(priv->watcher_proxy, path, register_service_cb, self);
+ g_free(path);
return;
}
@@ -1220,7 +1236,7 @@ setup_dbusmenu (AppIndicator *self)
root);
if (priv->menuservice == NULL) {
- gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s/Menu", priv->id);
+ gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s/Menu", priv->clean_id);
priv->menuservice = dbusmenu_server_new (path);
g_free(path);
}