diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.am | 12 | ||||
-rw-r--r-- | lib/ephy-dbus.c | 398 | ||||
-rw-r--r-- | lib/ephy-dbus.h | 80 | ||||
-rw-r--r-- | lib/ephy-file-helpers.c | 11 |
4 files changed, 4 insertions, 497 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index 44a9e3a7f..97b2832fc 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -28,13 +28,11 @@ NOINST_H_FILES = \ TYPES_H_FILES = \ ephy-adblock.h \ - ephy-dbus.h \ ephy-node.h \ ephy-state.h INST_H_FILES = \ ephy-adblock.h \ - ephy-dbus.h \ ephy-dialog.h \ ephy-loader.h \ ephy-node.h \ @@ -44,7 +42,6 @@ INST_H_FILES = \ libephymisc_la_SOURCES = \ eel-gconf-extensions.c \ ephy-adblock.c \ - ephy-dbus.c \ ephy-debug.c \ ephy-dialog.c \ ephy-dnd.c \ @@ -78,12 +75,10 @@ libephymisc_la_CPPFLAGS = \ $(AM_CPPFLAGS) libephymisc_la_CFLAGS = \ - $(DEPENDENCIES_CFLAGS) \ - $(DBUS_CFLAGS) \ + $(DEPENDENCIES_CFLAGS) \ $(AM_CFLAGS) -libephymisc_la_LIBADD = \ - $(DBUS_LIBS) +libephymisc_la_LIBADD = BUILT_SOURCES = \ ephy-lib-type-builtins.c \ @@ -152,4 +147,5 @@ stamp-ephy-lib-type-builtins.h: $(TYPES_H_FILES) && echo timestamp > $(@F) EXTRA_DIST = \ - ephy-marshal.list + ephy-marshal.list \ + epiphany-service.xml diff --git a/lib/ephy-dbus.c b/lib/ephy-dbus.c deleted file mode 100644 index 50bf5fb25..000000000 --- a/lib/ephy-dbus.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (C) 2004, 2005 Jean-François Rameau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id$ - */ - -#include "config.h" - -#include "ephy-dbus.h" -#include "ephy-lib-type-builtins.h" -#include "ephy-marshal.h" -#include "ephy-debug.h" - -#define EPHY_DBUS_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_DBUS, EphyDbusPrivate)) - -struct _EphyDbusPrivate -{ - DBusConnection *session_bus; - DBusConnection *system_bus; - guint reconnect_timeout_id; -}; - -enum -{ - CONNECTED, - DISCONNECTED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -static GObjectClass *parent_class = NULL; - -/* Epiphany's DBUS identification */ -static const char epiphany_dbus_service[] = "org.gnome.Epiphany"; -static const char epiphany_dbus_object_path[] = "/org/gnome/Epiphany"; - -/* This function is called by DBUS when a message directed at the - * Epiphany's object path arrives (provided we're the registered instance!) - * it routes the message to the correct handler - */ -static DBusHandlerResult path_message_func (DBusConnection *connection, - DBusMessage *message, - gpointer data); - -/* Filter signals form session bus */ -static DBusHandlerResult session_filter_func (DBusConnection *connection, - DBusMessage *message, - void *user_data); -/* Filter signals from system bus */ -static DBusHandlerResult system_filter_func (DBusConnection *connection, - DBusMessage *message, - void *user_data); - -/* Both connect to their respective bus */ -static void ephy_dbus_connect_to_session_bus (EphyDbus *dbus); -static void ephy_dbus_connect_to_system_bus (EphyDbus *dbus); - -static DBusObjectPathVTable call_vtable = { - NULL, - path_message_func, - NULL, -}; - -/* implementation of the DBUS helpers */ - -static gboolean -ephy_dbus_connect_to_session_bus_cb (gpointer user_data) -{ - EphyDbus *dbus = EPHY_DBUS (user_data); - gboolean success; - - ephy_dbus_connect_to_session_bus (dbus); - - success = (dbus->priv->session_bus != NULL); - if (success) - { - dbus->priv->reconnect_timeout_id = 0; - } - - return !success; -} - -static gboolean -ephy_dbus_connect_to_system_bus_cb (gpointer user_data) -{ - EphyDbus *dbus = EPHY_DBUS (user_data); - - ephy_dbus_connect_to_system_bus (dbus); - - return dbus->priv->system_bus == NULL; -} - -static DBusHandlerResult -session_filter_func (DBusConnection *connection, - DBusMessage *message, - void *user_data) -{ - EphyDbus *dbus = EPHY_DBUS (user_data); - - if (dbus_message_is_signal (message, - DBUS_INTERFACE_LOCAL, - "Disconnected")) - { - LOG ("EphyDbus disconnected from session bus"); - - dbus_connection_unref (dbus->priv->session_bus); - dbus->priv->session_bus = NULL; - - g_signal_emit (dbus, signals[DISCONNECTED], 0, EPHY_DBUS_SESSION); - - /* try to reconnect later ... */ - dbus->priv->reconnect_timeout_id = - g_timeout_add (3000, (GSourceFunc) ephy_dbus_connect_to_session_bus_cb, dbus); - - return DBUS_HANDLER_RESULT_HANDLED; - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static DBusHandlerResult -system_filter_func (DBusConnection *connection, - DBusMessage *message, - void *user_data) -{ - EphyDbus *dbus = EPHY_DBUS (user_data); - - LOG ("EphyDbus filtering message from system bus"); - - if (dbus_message_is_signal (message, - DBUS_INTERFACE_LOCAL, - "Disconnected")) - { - LOG ("EphyDbus disconnected from system bus"); - - dbus_connection_unref (dbus->priv->system_bus); - dbus->priv->system_bus = NULL; - - g_signal_emit (dbus, signals[DISCONNECTED], 0, EPHY_DBUS_SYSTEM); - - /* try to reconnect later ... */ - g_timeout_add (3000, ephy_dbus_connect_to_system_bus_cb, (gpointer)dbus); - - return DBUS_HANDLER_RESULT_HANDLED; - } - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static void -ephy_dbus_connect_to_system_bus (EphyDbus *dbus) -{ - DBusConnection *bus; - DBusError error; - - LOG ("EphyDbus connecting to system DBUS"); - - dbus_error_init (&error); - bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error); - if (bus == NULL) - { - g_warning ("Failed to connect to the system D-BUS: %s", error.message); - dbus_error_free (&error); - return; - } - dbus_connection_set_exit_on_disconnect (bus, FALSE); - dbus_connection_setup_with_g_main (bus, NULL); - - dbus_connection_add_filter (bus, system_filter_func, dbus, NULL); - - dbus_bus_add_match (bus, - "type='signal',interface='org.freedesktop.NetworkManager'", - &error); - if (dbus_error_is_set(&error)) { - g_warning ("Couldn't register signal handler (system bus): %s: %s", - error.name, error.message); - return; - } - - dbus->priv->system_bus = bus; - - g_signal_emit (dbus, signals[CONNECTED], 0, EPHY_DBUS_SYSTEM); -} - -static void -ephy_dbus_connect_to_session_bus (EphyDbus *dbus) -{ - DBusError error; - DBusConnection *bus; - - LOG ("EphyDbus connecting to session DBUS"); - - dbus_error_init (&error); - bus = dbus_bus_get (DBUS_BUS_SESSION, &error); - - if (!bus) { - g_warning ("EphyDbus failed to connect to the session D-BUS: %s", error.message); - dbus_error_free (&error); - return; - } - dbus_connection_set_exit_on_disconnect (bus, FALSE); - dbus_connection_setup_with_g_main (bus, NULL); - - dbus_connection_add_filter (bus, session_filter_func, dbus, NULL); - - dbus_bus_request_name (bus, epiphany_dbus_service, 0, NULL); - - if (dbus_error_is_set (&error)) { - g_warning ("EphyDbus failed to acquire epiphany service"); - dbus_error_free (&error); - return; - } - - dbus_connection_register_object_path (bus, - epiphany_dbus_object_path, - &call_vtable, dbus); - - dbus->priv->session_bus = bus; - - g_signal_emit (dbus, signals[CONNECTED], 0, EPHY_DBUS_SESSION); -} - -static void -ephy_dbus_disconnect_bus (DBusConnection *bus) -{ - if (bus != NULL) { - dbus_connection_close (bus); - dbus_connection_unref (bus); - } -} - -static DBusHandlerResult -path_message_func (DBusConnection *connection, - DBusMessage *message, - gpointer data) -{ - DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - - LOG ("EphyDbus filtering path messagefrom session bus"); - - if (dbus_message_is_method_call (message, epiphany_dbus_service, "load")) - { - result = DBUS_HANDLER_RESULT_HANDLED; - } - - return result; -} - - -/* Public methods */ - -void -ephy_dbus_startup (EphyDbus *dbus) -{ - g_return_if_fail (EPHY_IS_DBUS (dbus)); - - LOG ("EphyDbus startup"); - - ephy_dbus_connect_to_session_bus (dbus); - ephy_dbus_connect_to_system_bus (dbus); -} - -void -ephy_dbus_shutdown (EphyDbus *dbus) -{ - g_return_if_fail (EPHY_IS_DBUS (dbus)); - - LOG ("EphyDbus shutdown"); - - if (dbus->priv->reconnect_timeout_id != 0) - { - g_source_remove (dbus->priv->reconnect_timeout_id); - dbus->priv->reconnect_timeout_id = 0; - } - - ephy_dbus_disconnect_bus (dbus->priv->session_bus); - ephy_dbus_disconnect_bus (dbus->priv->system_bus); -} - -DBusConnection * -ephy_dbus_get_bus (EphyDbus *dbus, - EphyDbusBus kind) -{ - DBusConnection *bus = NULL; - - g_return_val_if_fail (EPHY_IS_DBUS (dbus), NULL); - - switch (kind) - { - case EPHY_DBUS_SYSTEM: - bus = dbus->priv->system_bus; - break; - case EPHY_DBUS_SESSION: - bus = dbus->priv->session_bus; - break; - default: - bus = dbus->priv->session_bus; - } - return bus; -} - -/* Class implementation */ - -static void -ephy_dbus_init (EphyDbus *dbus) -{ - dbus->priv = EPHY_DBUS_GET_PRIVATE (dbus); - - LOG ("EphyDbus initialising"); -} - -static void -ephy_dbus_finalize (GObject *object) -{ - EphyDbus *dbus = EPHY_DBUS (object); - - ephy_dbus_shutdown (dbus); - - LOG ("EphyDbus finalised"); - - parent_class->finalize (object); -} - -static void -ephy_dbus_class_init (EphyDbusClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - object_class->finalize = ephy_dbus_finalize; - - signals[CONNECTED] = - g_signal_new ("connected", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EphyDbusClass, connected), - NULL, NULL, - ephy_marshal_VOID__ENUM, - G_TYPE_NONE, - 1, - EPHY_TYPE_DBUS_BUS); - - signals[DISCONNECTED] = - g_signal_new ("disconnected", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EphyDbusClass, disconnected), - NULL, NULL, - ephy_marshal_VOID__ENUM, - G_TYPE_NONE, - 1, - EPHY_TYPE_DBUS_BUS); - - g_type_class_add_private (object_class, sizeof(EphyDbusPrivate)); -} - -GType -ephy_dbus_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) - { - static const GTypeInfo our_info = - { - sizeof (EphyDbusClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) ephy_dbus_class_init, - NULL, - NULL, /* class_data */ - sizeof (EphyDbus), - 0, /* n_preallocs */ - (GInstanceInitFunc) ephy_dbus_init - }; - - type = g_type_register_static (G_TYPE_OBJECT, - "EphyDbus", - &our_info, 0); - } - - return type; -} diff --git a/lib/ephy-dbus.h b/lib/ephy-dbus.h deleted file mode 100644 index e0c718694..000000000 --- a/lib/ephy-dbus.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2004 Jean-François rameau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id$ - */ - -#ifndef EPHY_DBUS_H -#define EPHY_DBUS_H - -#include <glib-object.h> - -/* Yes, we know that DBUS API isn't stable yet */ -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> - -G_BEGIN_DECLS - -#define EPHY_TYPE_DBUS (ephy_dbus_get_type ()) -#define EPHY_DBUS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_DBUS, EphyDbus)) -#define EPHY_DBUS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_DBUS, EphyDbusClass)) -#define EPHY_IS_DBUS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_DBUS)) -#define EPHY_IS_DBUS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_DBUS)) -#define EPHY_DBUS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_DBUS, EphyDbusClass)) - -typedef struct _EphyDbus EphyDbus; -typedef struct _EphyDbusPrivate EphyDbusPrivate; -typedef struct _EphyDbusClass EphyDbusClass; - -typedef enum -{ - EPHY_DBUS_SESSION, - EPHY_DBUS_SYSTEM -} EphyDbusBus; - -struct _EphyDbus -{ - GObject parent; - - /*< private >*/ - EphyDbusPrivate *priv; -}; - -struct _EphyDbusClass -{ - GObjectClass parent_class; - - /* Signals */ - void (* connected) (EphyDbus *dbus, - EphyDbusBus kind); - void (* disconnected) (EphyDbus *dbus, - EphyDbusBus kind); -}; - -GType ephy_dbus_get_type (void); - -void ephy_dbus_startup (EphyDbus *dbus); - -void ephy_dbus_shutdown (EphyDbus *dbus); - -DBusConnection *ephy_dbus_get_bus (EphyDbus *dbus, - EphyDbusBus kind); - -G_END_DECLS - -#endif /* !EPHY_DBUS_H */ diff --git a/lib/ephy-file-helpers.c b/lib/ephy-file-helpers.c index 6f1472654..f9a665db9 100644 --- a/lib/ephy-file-helpers.c +++ b/lib/ephy-file-helpers.c @@ -43,12 +43,10 @@ #undef GNOME_DISABLE_DEPRECATED #include <libgnome/gnome-desktop-item.h> -#ifdef HAVE_STARTUP_NOTIFICATION #define SN_API_NOT_YET_FROZEN #include <libsn/sn.h> #include <gdk/gdk.h> #include <gdk/gdkx.h> -#endif #define EPHY_UUID "0d82d98f-7079-401c-abff-203fcde1ece3" #define EPHY_UUID_ENVVAR "EPHY_UNIQUE" @@ -560,7 +558,6 @@ my_gdk_spawn_make_environment_for_screen (GdkScreen *screen, return retval; } -#ifdef HAVE_STARTUP_NOTIFICATION static void sn_error_trap_push (SnDisplay *display, Display *xdisplay) @@ -728,8 +725,6 @@ add_startup_timeout (GdkScreen *screen, } } -#endif /* HAVE_STARTUP_NOTIFICATION */ - gboolean ephy_file_launch_application (GnomeVFSMimeApplication *application, const char *parameter, @@ -740,10 +735,8 @@ ephy_file_launch_application (GnomeVFSMimeApplication *application, char *uri; char **envp; GnomeVFSResult result; -#ifdef HAVE_STARTUP_NOTIFICATION SnLauncherContext *sn_context; SnDisplay *sn_display; -#endif g_return_val_if_fail (application != NULL, FALSE); g_return_val_if_fail (parameter != NULL, FALSE); @@ -756,7 +749,6 @@ ephy_file_launch_application (GnomeVFSMimeApplication *application, screen = gdk_screen_get_default (); envp = my_gdk_spawn_make_environment_for_screen (screen, NULL); -#ifdef HAVE_STARTUP_NOTIFICATION sn_display = sn_display_new (gdk_display, sn_error_trap_push, sn_error_trap_pop); @@ -807,11 +799,9 @@ ephy_file_launch_application (GnomeVFSMimeApplication *application, } else { sn_context = NULL; } -#endif /* HAVE_STARTUP_NOTIFICATION */ result = gnome_vfs_mime_application_launch_with_env (application, uris, envp); -#ifdef HAVE_STARTUP_NOTIFICATION if (sn_context != NULL) { if (result != GNOME_VFS_OK) { sn_launcher_context_complete (sn_context); /* end sequence */ @@ -824,7 +814,6 @@ ephy_file_launch_application (GnomeVFSMimeApplication *application, } sn_display_unref (sn_display); -#endif /* HAVE_STARTUP_NOTIFICATION */ g_strfreev (envp); g_list_foreach (uris, (GFunc) g_free,NULL); |