X-Git-Url: http://git.maemo.org/git/?p=browser-switch;a=blobdiff_plain;f=dbus-server-bindings.c;h=3875929c72a2adfc75ce5e9c05c04215f480cd20;hp=3c7718eff780d8b726ff0d3689ed94bae454133d;hb=70ccf6a131241d1a078265739ca07455e2282ff9;hpb=4c3459d73a3e6a145230490af14dbba647fe4896;ds=sidebyside diff --git a/dbus-server-bindings.c b/dbus-server-bindings.c index 3c7718e..3875929 100644 --- a/dbus-server-bindings.c +++ b/dbus-server-bindings.c @@ -1,7 +1,7 @@ /* * dbus-server-bindings.c -- osso_browser D-Bus interface implementation * - * Copyright (C) 2009 Steven Luo + * Copyright (C) 2009-2010 Steven Luo * Derived from a Python implementation by Jason Simpson and Steven Luo * * This program is free software; you can redistribute it and/or @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "browser-switchboard.h" @@ -43,11 +44,33 @@ static void osso_browser_class_init(OssoBrowserClass *klass) #include "dbus-server-glue.h" +/* Ignore reconfiguration signal (SIGHUP) + When not running in continuous mode, no SIGHUP handler is installed, which + causes browser-switchboard to quit on a reconfig request. This is normally + what we want -- but if we're already in the process of dispatching a + request, we'll quit anyway after finishing what we're doing, so ignoring the + signal is the right thing to do. */ +static void ignore_reconfig_requests(void) { + struct sigaction act; + + act.sa_flags = SA_RESTART; + sigemptyset(&(act.sa_mask)); + act.sa_handler = SIG_IGN; + sigaction(SIGHUP, &act, NULL); +} + static void open_address(const char *uri) { char *new_uri; size_t new_uri_len; - if (!uri && uri[0] == '/') { + if (!uri) + /* Not much to do in this case ... */ + return; + + printf("open_address '%s'\n", uri); + if (uri[0] == '/') { + /* URI begins with a '/' -- assume it points to a local file + and prefix with "file://" */ new_uri_len = strlen("file://") + strlen(uri) + 1; if (!(new_uri = calloc(new_uri_len, sizeof(char)))) exit(1); @@ -58,7 +81,6 @@ static void open_address(const char *uri) { we need to clean up after ourselves */ free(new_uri); } else { - printf("open_address '%s'\n", uri); launch_browser(&ctx, (char *)uri); } } @@ -69,24 +91,32 @@ static void open_address(const char *uri) { */ gboolean osso_browser_load_url(OssoBrowser *obj, const char *uri, GError **error) { + if (!ctx.continuous_mode) + ignore_reconfig_requests(); open_address(uri); return TRUE; } gboolean osso_browser_mime_open(OssoBrowser *obj, const char *uri, GError **error) { + if (!ctx.continuous_mode) + ignore_reconfig_requests(); open_address(uri); return TRUE; } gboolean osso_browser_open_new_window(OssoBrowser *obj, const char *uri, GError **error) { + if (!ctx.continuous_mode) + ignore_reconfig_requests(); open_address(uri); return TRUE; } gboolean osso_browser_top_application(OssoBrowser *obj, GError **error) { + if (!ctx.continuous_mode) + ignore_reconfig_requests(); launch_microb(&ctx, "new_window"); return TRUE; } @@ -95,6 +125,8 @@ gboolean osso_browser_top_application(OssoBrowser *obj, for use by /usr/bin/browser wrapper to implement --url */ gboolean osso_browser_switchboard_launch_microb(OssoBrowser *obj, const char *uri, GError **error) { + if (!ctx.continuous_mode) + ignore_reconfig_requests(); launch_microb(&ctx, (char *)uri); return TRUE; }