From 1a569c2f0cda67071400682be92b01b4c2641ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Sun, 10 Jul 2011 05:18:08 +0200 Subject: Add support to the "SecondaryActivate" method Added support for the missing StatusNotifierItem SecondaryActivate signal. The indicator-application receives the "secondary-activate" signal from libindicator and redirects it via dbus to the proper watcher using the "SecondaryActivate" method, sending the X and Y pointer position as parameters (as defined by the StatusNotifierItem specs). --- src/indicator-application.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'src/indicator-application.c') diff --git a/src/indicator-application.c b/src/indicator-application.c index dc810f4..281e397 100644 --- a/src/indicator-application.c +++ b/src/indicator-application.c @@ -110,6 +110,7 @@ static void indicator_application_finalize (GObject *object); static GList * get_entries (IndicatorObject * io); static guint get_location (IndicatorObject * io, IndicatorObjectEntry * entry); static void entry_scrolled (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction); +static void entry_secondary_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint time, gint x, gint y, gpointer data); void connection_changed (IndicatorServiceManager * sm, gboolean connected, IndicatorApplication * application); static void connected (IndicatorApplication * application); static void disconnected (IndicatorApplication * application); @@ -144,6 +145,7 @@ indicator_application_class_init (IndicatorApplicationClass *klass) io_class->get_entries = get_entries; io_class->get_location = get_location; + io_class->secondary_activate = entry_secondary_activate; io_class->entry_scrolled = entry_scrolled; return; @@ -402,9 +404,34 @@ get_location (IndicatorObject * io, IndicatorObjectEntry * entry) return g_list_index(priv->applications, entry); } +/* Redirect the secondary activate to the Application Item */ +static void +entry_secondary_activate (IndicatorObject * io, IndicatorObjectEntry * entry, + guint time, gint x, gint y, gpointer data) +{ + 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, "ApplicationSecondaryActivateEvent", + g_variant_new("(ssuii)", app->dbusaddress, + app->dbusobject, + time, x, y), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); + } +} + /* Redirect the scroll event to the Application Item */ -static void entry_scrolled (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction) { - +static void entry_scrolled (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction) +{ g_return_if_fail(IS_INDICATOR_APPLICATION(io)); IndicatorApplicationPrivate * priv = INDICATOR_APPLICATION_GET_PRIVATE(io); @@ -418,9 +445,9 @@ static void entry_scrolled (IndicatorObject * io, IndicatorObjectEntry * entry, if (app && app->dbusaddress && app->dbusobject && priv->service_proxy) { g_dbus_proxy_call(priv->service_proxy, "ApplicationScrollEvent", - g_variant_new("(ssiu)", app->dbusaddress, - app->dbusobject, - delta, direction), + g_variant_new("(ssiu)", app->dbusaddress, + app->dbusobject, + delta, direction), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); } } -- cgit v1.2.3