diff -urNX xclude orig/hildon-status-menu-0.3.38+0m5/src/hd-status-area.c hildon-status-menu-0.3.38+0m5/src/hd-status-area.c --- orig/hildon-status-menu-0.3.38+0m5/src/hd-status-area.c 2010-03-29 19:57:43.000000000 +0300 +++ hildon-status-menu-0.3.38+0m5/src/hd-status-area.c 2010-05-25 20:37:20.000000000 +0300 @@ -40,6 +40,10 @@ #include "hd-status-area.h" +#define TASKNAV_SIGNAL_INTERFACE "com.nokia.hildon_desktop" +#define OPEN_SIGNAL_NAME "open_status_menu" +#define CLOSE_SIGNAL_NAME "close_status_menu" + /* UI Style guide */ #define STATUS_AREA_HEIGHT 56 #define MINIMUM_STATUS_AREA_WIDTH 112 @@ -106,6 +110,23 @@ return TRUE; } +static DBusHandlerResult +hd_dbus_signal_handler (DBusConnection *conn, DBusMessage *msg, void *data) +{ + HDStatusAreaPrivate *priv = (HDStatusAreaPrivate *)data; + if (dbus_message_is_signal(msg, TASKNAV_SIGNAL_INTERFACE, OPEN_SIGNAL_NAME)) + { + gtk_widget_show (priv->status_menu); + return DBUS_HANDLER_RESULT_HANDLED; + } + else if (dbus_message_is_signal(msg, TASKNAV_SIGNAL_INTERFACE, CLOSE_SIGNAL_NAME)) + { + gtk_widget_hide (priv->status_menu); + return DBUS_HANDLER_RESULT_HANDLED; + } + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + static gboolean is_widget_on_screen (GtkWidget *widget) { @@ -164,6 +185,8 @@ HDStatusAreaPrivate *priv = HD_STATUS_AREA_GET_PRIVATE (status_area); GtkWidget *left_alignment, *main_hbox, *left_hbox, *special_hbox; guint i; + DBusConnection *connection; + DBusError derror; /* Set priv member */ status_area->priv = priv; @@ -236,6 +259,15 @@ * program is full-screen) */ g_signal_connect (G_OBJECT (status_area), "configure-event", G_CALLBACK (configure_event_cb), status_area); + dbus_error_init (&derror); + connection = dbus_bus_get (DBUS_BUS_SESSION, &derror); + if (!connection) { + dbus_error_free (&derror); + g_warning ("%s: failed to connect to the system bus", __func__); + } else { + dbus_bus_add_match (connection, "type='signal', interface='" TASKNAV_SIGNAL_INTERFACE "'", NULL); + dbus_connection_add_filter (connection, hd_dbus_signal_handler, priv, NULL); + } } static GObject *