=== modified file 'src/application-service-appstore.c' --- src/application-service-appstore.c 2011-01-14 02:25:13 +0000 +++ src/application-service-appstore.c 2011-01-25 17:05:41 +0000 @@ -255,11 +255,38 @@ const gchar * method, GVariant * params, GDBusMethodInvocation * invocation, gpointer user_data) { + ApplicationServiceAppstore * service = APPLICATION_SERVICE_APPSTORE(user_data); GVariant * retval = NULL; if (g_strcmp0(method, "GetApplications") == 0) { retval = get_applications(service); + } else if (g_strcmp0(method, "ApplicationScrollSignal") == 0) { + Application *app = NULL; + const gchar *dbusaddress; + const gchar *dbusobject; + gint delta; + guint direction; + + g_variant_get (params, "(&s&siu)", &dbusaddress, &dbusobject, + &delta, &direction); + + GList *l; + for (l = service->priv->applications; l != NULL; l = l->next) { + Application *a = l->data; + + if (g_strcmp0(a->dbus_name, dbusaddress) == 0 && + g_strcmp0(a->menu, dbusobject) == 0) { + app = a; + break; + } + } + + if (app != NULL && app->dbus_proxy != NULL) { + g_dbus_proxy_call(app->dbus_proxy, "XAyatanaScrollAction", + g_variant_new("(iu)", delta, direction), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); + } } else { g_warning("Calling method '%s' on the indicator service and it's unknown", method); } === modified file 'src/application-service.xml' --- src/application-service.xml 2011-01-14 02:10:12 +0000 +++ src/application-service.xml 2011-01-25 04:26:41 +0000 @@ -28,6 +28,12 @@ + + + + + + === modified file 'src/indicator-application.c' --- src/indicator-application.c 2011-01-13 17:03:04 +0000 +++ src/indicator-application.c 2011-01-26 16:53:23 +0000 @@ -108,6 +108,7 @@ static void indicator_application_finalize (GObject *object); static GList * get_entries (IndicatorObject * io); static guint get_location (IndicatorObject * io, IndicatorObjectEntry * entry); +static void scroll_entry (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction); void connection_changed (IndicatorServiceManager * sm, gboolean connected, IndicatorApplication * application); static void connected (IndicatorApplication * application); static void disconnected (IndicatorApplication * application); @@ -142,6 +143,7 @@ io_class->get_entries = get_entries; io_class->get_location = get_location; + io_class->scroll_entry = scroll_entry; return; } @@ -381,6 +383,29 @@ return g_list_index(priv->applications, entry); } +/* Redirect the scroll event to the Application Item */ +static void scroll_entry (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction) { + + g_return_if_fail(IS_INDICATOR_APPLICATION(io)); + + IndicatorApplicationPrivate * priv = INDICATOR_APPLICATION_GET_PRIVATE(io); + g_return_if_fail(priv->service_proxy); + + GList *l = g_list_find(priv->applications, entry); + if (l == NULL) + return; + + ApplicationEntry *app = l->data; + + if (app && app->dbusaddress && app->dbusobject && priv->service_proxy) { + g_dbus_proxy_call(priv->service_proxy, "ApplicationScrollSignal", + g_variant_new("(ssiu)", app->dbusaddress, + app->dbusobject, + delta, direction), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); + } +} + /* Does a quick meausre of how big the string is in pixels with a Pango layout */ static gint