summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
074b029)
Discussion on https://bugs.maemo.org/show_bug.cgi?id=8369 (Hermes
doesn't work when Browser Switchboard is installed) revealed that
MicroB listens on the D-Bus system bus as well as the session bus.
While it's not appropriate for applications to request opening a
browser via the system bus (which is supposed to be for requesting
system services, not applications), the fact that MicroB listens
there means that we need to too.
This fixes Browser Switchboard bug 5910. Thanks to Andrew Flegg and
Marcin Juszkiewicz for providing the information needed to track down
this bug.
char *other_browser_cmd;
DBusGConnection *session_bus;
DBusGProxy *dbus_proxy;
char *other_browser_cmd;
DBusGConnection *session_bus;
DBusGProxy *dbus_proxy;
+ DBusGConnection *system_bus;
+ DBusGProxy *dbus_system_proxy;
};
#endif /* _BROWSER_SWITCHBOARD_H */
};
#endif /* _BROWSER_SWITCHBOARD_H */
GError *error = NULL;
guint result;
GError *error = NULL;
guint result;
- if (!ctx || !ctx->dbus_proxy)
+ if (!ctx || !ctx->dbus_proxy || !ctx->dbus_system_proxy)
return;
if (!dbus_g_proxy_call(ctx->dbus_proxy, "RequestName", &error,
return;
if (!dbus_g_proxy_call(ctx->dbus_proxy, "RequestName", &error,
log_msg("Couldn't acquire name com.nokia.osso_browser\n");
exit(1);
}
log_msg("Couldn't acquire name com.nokia.osso_browser\n");
exit(1);
}
+
+ if (!dbus_g_proxy_call(ctx->dbus_system_proxy, "RequestName", &error,
+ G_TYPE_STRING, "com.nokia.osso_browser",
+ G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING|DBUS_NAME_FLAG_DO_NOT_QUEUE,
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &result,
+ G_TYPE_INVALID)) {
+ log_msg("Couldn't acquire name com.nokia.osso_browser on system bus\n");
+ exit(1);
+ }
+ if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+ log_msg("Couldn't acquire name com.nokia.osso_browser on system bus\n");
+ exit(1);
+ }
}
/* Release the name com.nokia.osso_browser on the D-Bus session bus */
}
/* Release the name com.nokia.osso_browser on the D-Bus session bus */
GError *error = NULL;
guint result;
GError *error = NULL;
guint result;
- if (!ctx || !ctx->dbus_proxy)
+ if (!ctx || !ctx->dbus_proxy || !ctx->dbus_system_proxy)
return;
dbus_g_proxy_call(ctx->dbus_proxy, "ReleaseName", &error,
return;
dbus_g_proxy_call(ctx->dbus_proxy, "ReleaseName", &error,
G_TYPE_INVALID,
G_TYPE_UINT, &result,
G_TYPE_INVALID);
G_TYPE_INVALID,
G_TYPE_UINT, &result,
G_TYPE_INVALID);
+ dbus_g_proxy_call(ctx->dbus_system_proxy, "ReleaseName", &error,
+ G_TYPE_STRING, "com.nokia.osso_browser",
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &result,
+ G_TYPE_INVALID);
int main() {
OssoBrowser *obj_osso_browser, *obj_osso_browser_req;
int main() {
OssoBrowser *obj_osso_browser, *obj_osso_browser_req;
+ OssoBrowser *obj_osso_browser_sys, *obj_osso_browser_sys_req;
GMainLoop *mainloop;
GError *error = NULL;
int reqname_result;
GMainLoop *mainloop;
GError *error = NULL;
int reqname_result;
+ /* Get a connection to the D-Bus system bus */
+ ctx.system_bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
+ if (!ctx.system_bus) {
+ log_msg("Couldn't get a D-Bus system bus connection\n");
+ return 1;
+ }
+ ctx.dbus_system_proxy = dbus_g_proxy_new_for_name(ctx.system_bus,
+ "org.freedesktop.DBus", "/org/freedesktop/DBus",
+ "org.freedesktop.DBus");
+ if (!ctx.dbus_system_proxy) {
+ log_msg("Couldn't get an org.freedesktop.DBus proxy\n");
+ return 1;
+ }
+
dbus_request_osso_browser_name(&ctx);
/* 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);
dbus_request_osso_browser_name(&ctx);
/* 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_osso_browser_sys = g_object_new(OSSO_BROWSER_TYPE, NULL);
+ obj_osso_browser_sys_req = 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.system_bus,
+ "/com/nokia/osso_browser",
+ G_OBJECT(obj_osso_browser_sys));
+ dbus_g_connection_register_g_object(ctx.system_bus,
+ "/com/nokia/osso_browser/request",
+ G_OBJECT(obj_osso_browser_sys_req));
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");