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 From 7cd70567cf7c2f1423416513777b85c2efc93c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 21 Jul 2011 18:28:23 +0200 Subject: Don't use "SecondaryActivate" method Using XAyatanaSecondaryActivate as libindicator doesn't support the mouse x,y position in secondary_activate signal anymore. This will drop the middle-click support also for KDE status notifier items, but this is needed as we can't control what they would do with this signal (and according to our policies we can't do anything that isn't doable also using a menu item). --- src/indicator-application.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/indicator-application.c') diff --git a/src/indicator-application.c b/src/indicator-application.c index 281e397..f94b8b8 100644 --- a/src/indicator-application.c +++ b/src/indicator-application.c @@ -110,7 +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); +static void entry_secondary_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint time, gpointer data); void connection_changed (IndicatorServiceManager * sm, gboolean connected, IndicatorApplication * application); static void connected (IndicatorApplication * application); static void disconnected (IndicatorApplication * application); @@ -407,7 +407,7 @@ get_location (IndicatorObject * io, IndicatorObjectEntry * 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) + guint time, gpointer data) { g_return_if_fail(IS_INDICATOR_APPLICATION(io)); @@ -422,10 +422,10 @@ entry_secondary_activate (IndicatorObject * io, IndicatorObjectEntry * entry, 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); + g_variant_new("(ssu)", app->dbusaddress, + app->dbusobject, + time), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); } } -- cgit v1.2.3