From 846e68b8ffa979d30ed331c43020212ffdee2bf2 Mon Sep 17 00:00:00 2001 From: Steven Luo Date: Sun, 21 Feb 2010 20:53:46 -0800 Subject: [PATCH] Make startup notification work for MicroB menu entry To have working startup notification, we have to provide a D-Bus service with a top_application method; hildon-desktop will then use that to launch the application instead of invoking the binary directly. Co-opt the org.maemo.garage.browser_switchboard name previously used for locking for this (replacing a - with a _ to get around D-Bus naming restrictions). While we're at it, remove the non-standard switchboard_launch_microb method from the com.nokia.osso_browser interface we implement, instead providing a launch_microb method in our own interface. --- Makefile | 1 + dbus-server-bindings.c | 16 +++++++++++++--- dbus-server-bindings.h | 6 ++++-- dbus-server-glue.xml | 6 +++++- main.c | 10 +++++++--- microb | 10 +++++++--- microb.desktop | 1 + org.maemo.garage.browser_switchboard.service | 3 +++ 8 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 org.maemo.garage.browser_switchboard.service diff --git a/Makefile b/Makefile index 65bb61e..3fd7c25 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ install: $(APP) mkdir -p $(DESTDIR)$(PREFIX)/share/applications/hildon install -c -m 0755 $(APP) $(DESTDIR)$(PREFIX)/bin install -c -m 0644 com.nokia.osso_browser.service $(DESTDIR)$(PREFIX)/share/dbus-1/services + install -c -m 0644 org.maemo.garage.browser_switchboard.service $(DESTDIR)$(PREFIX)/share/dbus-1/services install -c -m 0755 browser $(DESTDIR)$(PREFIX)/bin install -c -m 0755 microb $(DESTDIR)$(PREFIX)/bin install -c -m 0644 microb.desktop $(DESTDIR)$(PREFIX)/share/applications/hildon diff --git a/dbus-server-bindings.c b/dbus-server-bindings.c index f20a690..e3d2c4f 100644 --- a/dbus-server-bindings.c +++ b/dbus-server-bindings.c @@ -131,9 +131,19 @@ gboolean osso_browser_top_application(OssoBrowser *obj, return TRUE; } -/* This is a "undocumented", non-standard extension to the API, ONLY - for use by /usr/bin/microb wrapper */ -gboolean osso_browser_switchboard_launch_microb(OssoBrowser *obj, + +/* + * The org.maemo.garage.browser_switchboard D-Bus interface + */ +gboolean switchboard_top_application(OssoBrowser *obj, + GError **error) { + if (!ctx.continuous_mode) + ignore_reconfig_requests(); + launch_microb(&ctx, "new_window"); + return TRUE; +} + +gboolean switchboard_launch_microb(OssoBrowser *obj, const char *uri, GError **error) { if (!ctx.continuous_mode) ignore_reconfig_requests(); diff --git a/dbus-server-bindings.h b/dbus-server-bindings.h index 232ac5d..f3f878c 100644 --- a/dbus-server-bindings.h +++ b/dbus-server-bindings.h @@ -42,8 +42,10 @@ gboolean osso_browser_mime_open(OssoBrowser *obj, gboolean osso_browser_open_new_window(OssoBrowser *obj, const char *uri, GError **error); gboolean osso_browser_top_application(OssoBrowser *obj, GError **error); -/* This is an "undocumented", non-standard extension; DO NOT USE */ -gboolean osso_browser_switchboard_launch_microb(OssoBrowser *obj, + +/* The org.maemo.garage.browser_switchboard D-Bus interface */ +gboolean switchboard_top_application(OssoBrowser *obj, GError **error); +gboolean switchboard_launch_microb(OssoBrowser *obj, const char *uri, GError **error); void dbus_request_osso_browser_name(struct swb_context *ctx); diff --git a/dbus-server-glue.xml b/dbus-server-glue.xml index 1fd3062..8bba5cc 100644 --- a/dbus-server-glue.xml +++ b/dbus-server-glue.xml @@ -13,7 +13,11 @@ - + + + + + diff --git a/main.c b/main.c index 093b535..545f9f2 100644 --- a/main.c +++ b/main.c @@ -110,7 +110,7 @@ out_noopen: } int main() { - OssoBrowser *obj_osso_browser, *obj_osso_browser_req; + OssoBrowser *obj_osso_browser, *obj_osso_browser_req, *obj_switchboard; GMainLoop *mainloop; GError *error = NULL; int reqname_result; @@ -157,14 +157,14 @@ int main() { return 1; } - /* Get the org.maemo.garage.browser-switchboard name from D-Bus, as + /* Get the org.maemo.garage.browser_switchboard name from D-Bus, as a form of locking to ensure that not more than one browser-switchboard process is active at any time. With DBUS_NAME_FLAG_DO_NOT_QUEUE set and DBUS_NAME_FLAG_REPLACE_EXISTING not set, getting the name succeeds if and only if no other process owns the name. */ if (!dbus_g_proxy_call(ctx.dbus_proxy, "RequestName", &error, - G_TYPE_STRING, "org.maemo.garage.browser-switchboard", + G_TYPE_STRING, "org.maemo.garage.browser_switchboard", G_TYPE_UINT, DBUS_NAME_FLAG_DO_NOT_QUEUE, G_TYPE_INVALID, G_TYPE_UINT, &reqname_result, @@ -183,11 +183,15 @@ int main() { /* Register ourselves to handle the osso_browser D-Bus methods */ obj_osso_browser = g_object_new(OSSO_BROWSER_TYPE, NULL); obj_osso_browser_req = g_object_new(OSSO_BROWSER_TYPE, NULL); + obj_switchboard = g_object_new(OSSO_BROWSER_TYPE, NULL); dbus_g_connection_register_g_object(ctx.session_bus, "/com/nokia/osso_browser", G_OBJECT(obj_osso_browser)); dbus_g_connection_register_g_object(ctx.session_bus, "/com/nokia/osso_browser/request", G_OBJECT(obj_osso_browser_req)); + dbus_g_connection_register_g_object(ctx.session_bus, + "/org/maemo/garage/browser_switchboard", + G_OBJECT(obj_switchboard)); mainloop = g_main_loop_new(NULL, FALSE); log_msg("Starting main loop\n"); diff --git a/microb b/microb index 334523f..2e00f5e 100755 --- a/microb +++ b/microb @@ -10,10 +10,14 @@ case "$1" in esac if pidof browser > /dev/null 2>&1; then - method=open_new_window + dest="com.nokia.osso_browser" + path="/com/nokia/osso_browser/request" + method="com.nokia.osso_browser.open_new_window" else - method=switchboard_launch_microb + dest="org.maemo.garage.browser_switchboard" + path="/org/maemo/garage/browser_switchboard" + method="org.maemo.garage.browser_switchboard.launch_microb" fi -dbus-send --session --type=method_call --print-reply --dest="com.nokia.osso_browser" /com/nokia/osso_browser/request com.nokia.osso_browser.$method string:${url:-"new_window"} > /dev/null 2>&1 +dbus-send --session --type=method_call --print-reply --dest="$dest" "$path" "$method" string:${url:-"new_window"} > /dev/null 2>&1 exit 0 diff --git a/microb.desktop b/microb.desktop index ecaae47..3c637f3 100644 --- a/microb.desktop +++ b/microb.desktop @@ -11,3 +11,4 @@ Type=Application Categories=Application;Internet; X-HildonDesk-ShowInToolbar=true X-Osso-Type=application/x-executable +X-Osso-Service=org.maemo.garage.browser_switchboard diff --git a/org.maemo.garage.browser_switchboard.service b/org.maemo.garage.browser_switchboard.service new file mode 100644 index 0000000..027f9a4 --- /dev/null +++ b/org.maemo.garage.browser_switchboard.service @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=org.maemo.garage.browser_switchboard +Exec=/usr/bin/browser-switchboard -- 1.7.9.5