aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore1
-rw-r--r--debian/changelog6
-rw-r--r--example/simple-client.c9
-rw-r--r--src/custom-service-appstore.c48
-rw-r--r--src/indicator-custom.c15
5 files changed, 76 insertions, 3 deletions
diff --git a/.bzrignore b/.bzrignore
index 0a09d4f..ca8d63a 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -35,3 +35,4 @@ tests/test-simple-app
example/.deps
example/.libs
example/simple-client
+src/libcustom_la-custom-service-marshal.lo
diff --git a/debian/changelog b/debian/changelog
index 0c959dd..be44c2d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+indicator-custom (0.0.1-0ubuntu3~ppa1~service7) karmic; urgency=low
+
+ * More updates and getting kinda stable-ish
+
+ -- Ted Gould <ted@ubuntu.com> Tue, 24 Nov 2009 16:31:53 -0600
+
indicator-custom (0.0.1-0ubuntu3~ppa1~service6) karmic; urgency=low
* Debug messages
diff --git a/example/simple-client.c b/example/simple-client.c
index 1c29647..f1f53e1 100644
--- a/example/simple-client.c
+++ b/example/simple-client.c
@@ -20,7 +20,14 @@ main (int argc, char ** argv)
custom_indicator_set_attention_icon(ci, "indicator-messages-new");
DbusmenuMenuitem * root = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set(root, "label", "Root");
+
+ DbusmenuMenuitem * item = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Item 1");
+ dbusmenu_menuitem_child_append(root, item);
+
+ item = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Item 2");
+ dbusmenu_menuitem_child_append(root, item);
DbusmenuServer * menuservice = dbusmenu_server_new ("/need/a/menu/path");
dbusmenu_server_set_root(menuservice, root);
diff --git a/src/custom-service-appstore.c b/src/custom-service-appstore.c
index fdb227a..bdf8ffb 100644
--- a/src/custom-service-appstore.c
+++ b/src/custom-service-appstore.c
@@ -168,6 +168,51 @@ get_all_properties_cb (DBusGProxy * proxy, GHashTable * properties, GError * err
return;
}
+/* A simple global function for dealing with freeing the information
+ in an Application structure */
+static void
+application_free (Application * app)
+{
+ if (app == NULL) return;
+
+ if (app->dbus_name != NULL) {
+ g_free(app->dbus_name);
+ }
+ if (app->dbus_object != NULL) {
+ g_free(app->dbus_object);
+ }
+
+ g_free(app);
+ return;
+}
+
+/* Gets called when the proxy is destroyed, which is usually when it
+ drops off of the bus. */
+static void
+application_removed_cb (DBusGProxy * proxy, gpointer userdata)
+{
+ Application * app = (Application *)userdata;
+ CustomServiceAppstore * appstore = app->appstore;
+ CustomServiceAppstorePrivate * priv = CUSTOM_SERVICE_APPSTORE_GET_PRIVATE(appstore);
+
+ GList * applistitem = g_list_find(priv->applications, app);
+ if (applistitem == NULL) {
+ g_warning("Removing an application that isn't in the application list?");
+ return;
+ }
+
+ gint position = g_list_position(priv->applications, applistitem);
+
+ g_signal_emit(G_OBJECT(appstore),
+ signals[APPLICATION_REMOVED], 0,
+ position, TRUE);
+
+ priv->applications = g_list_remove(priv->applications, app);
+
+ application_free(app);
+ return;
+}
+
/* Adding a new NotificationItem object from DBus in to the
appstore. First, we need to get the information on it
though. */
@@ -204,6 +249,9 @@ custom_service_appstore_application_add (CustomServiceAppstore * appstore, const
g_free(app);
return;
}
+
+ /* We've got it, let's watch it for destruction */
+ g_signal_connect(G_OBJECT(app->dbus_proxy), "destroy", G_CALLBACK(application_removed_cb), app);
/* Grab the property proxy interface */
app->prop_proxy = dbus_g_proxy_new_for_name_owner(priv->bus,
diff --git a/src/indicator-custom.c b/src/indicator-custom.c
index 964d8aa..da89c30 100644
--- a/src/indicator-custom.c
+++ b/src/indicator-custom.c
@@ -88,6 +88,14 @@ indicator_custom_class_init (IndicatorCustomClass *klass)
io_class->get_entries = get_entries;
+ dbus_g_object_register_marshaller(_custom_service_marshal_VOID__STRING_INT_STRING_STRING,
+ G_TYPE_NONE,
+ G_TYPE_STRING,
+ G_TYPE_INT,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INVALID);
+
return;
}
@@ -180,11 +188,11 @@ connected (IndicatorServiceManager * sm, gboolean connected, IndicatorCustom * c
G_TYPE_INT,
G_TYPE_STRING,
G_TYPE_STRING,
- G_TYPE_NONE);
+ G_TYPE_INVALID);
dbus_g_proxy_add_signal(priv->service_proxy,
"ApplicationRemoved",
G_TYPE_INT,
- G_TYPE_NONE);
+ G_TYPE_INVALID);
/* Connect to them */
g_debug("Connect to them.");
@@ -238,6 +246,7 @@ get_entries (IndicatorObject * io)
static void
application_added (DBusGProxy * proxy, const gchar * iconname, gint position, const gchar * dbusaddress, const gchar * dbusobject, IndicatorCustom * custom)
{
+ g_debug("Building new application entry: %s with icon: %s", dbusaddress, iconname);
IndicatorCustomPrivate * priv = INDICATOR_CUSTOM_GET_PRIVATE(custom);
ApplicationEntry * app = g_new(ApplicationEntry, 1);
@@ -245,6 +254,8 @@ application_added (DBusGProxy * proxy, const gchar * iconname, gint position, co
app->entry.label = NULL;
app->entry.menu = GTK_MENU(dbusmenu_gtkmenu_new((gchar *)dbusaddress, (gchar *)dbusobject));
+ gtk_widget_show(GTK_WIDGET(app->entry.image));
+
priv->applications = g_list_insert(priv->applications, app, position);
/* TODO: Need to deal with position here somehow */