Make startup notification work for MicroB menu entry
authorSteven Luo <steven+maemo@steven676.net>
Mon, 22 Feb 2010 04:53:46 +0000 (20:53 -0800)
committerSteven Luo <steven+maemo@steven676.net>
Mon, 22 Feb 2010 08:58:25 +0000 (00:58 -0800)
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
dbus-server-bindings.c
dbus-server-bindings.h
dbus-server-glue.xml
main.c
microb
microb.desktop
org.maemo.garage.browser_switchboard.service [new file with mode: 0644]

index 65bb61e..3fd7c25 100644 (file)
--- 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
        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
        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
index f20a690..e3d2c4f 100644 (file)
@@ -131,9 +131,19 @@ gboolean osso_browser_top_application(OssoBrowser *obj,
        return TRUE;
 }
 
        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();
                const char *uri, GError **error) {
        if (!ctx.continuous_mode)
                ignore_reconfig_requests();
index 232ac5d..f3f878c 100644 (file)
@@ -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);
 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);
                 const char *uri, GError **error);
 
 void dbus_request_osso_browser_name(struct swb_context *ctx);
index 1fd3062..8bba5cc 100644 (file)
       <arg type="s" name="uri" direction="in" />
     </method>
     <method name="top_application" />
       <arg type="s" name="uri" direction="in" />
     </method>
     <method name="top_application" />
-    <method name="switchboard_launch_microb">
+  </interface>
+  <interface name="org.maemo.garage.browser_switchboard">
+    <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="switchboard" />
+    <method name="top_application" />
+    <method name="launch_microb">
       <arg type="s" name="uri" direction="in" />
     </method>
   </interface>
       <arg type="s" name="uri" direction="in" />
     </method>
   </interface>
diff --git a/main.c b/main.c
index 093b535..545f9f2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -110,7 +110,7 @@ out_noopen:
 }
 
 int main() {
 }
 
 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;
        GMainLoop *mainloop;
        GError *error = NULL;
        int reqname_result;
@@ -157,14 +157,14 @@ int main() {
                return 1;
        }
 
                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,
           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,
                               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);
        /* 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,
                        "/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");
 
        mainloop = g_main_loop_new(NULL, FALSE);
        log_msg("Starting main loop\n");
diff --git a/microb b/microb
index 334523f..2e00f5e 100755 (executable)
--- a/microb
+++ b/microb
@@ -10,10 +10,14 @@ case "$1" in
 esac
 
 if pidof browser > /dev/null 2>&1; then
 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
 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
 
 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
 exit 0
index ecaae47..3c637f3 100644 (file)
@@ -11,3 +11,4 @@ Type=Application
 Categories=Application;Internet;
 X-HildonDesk-ShowInToolbar=true
 X-Osso-Type=application/x-executable
 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 (file)
index 0000000..027f9a4
--- /dev/null
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.maemo.garage.browser_switchboard
+Exec=/usr/bin/browser-switchboard