aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog8
-rw-r--r--shell/e-shell-nm-glib.c21
-rw-r--r--shell/e-shell-nm.c8
-rw-r--r--shell/e-shell-window.c6
4 files changed, 35 insertions, 8 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 76f19f5c33..790f20324a 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,11 @@
+2006-07-27 Bastien Nocera <hadess@hadess.net>
+
+ * e-shell-nm-glib.c: (e_shell_glib_network_monitor),
+ (e_shell_nm_glib_initialise), (e_shell_nm_glib_dispose):
+ * e-shell-nm.c: (e_shell_dbus_dispose):
+ * e-shell-window.c: (impl_dispose): Fix warnings at build-time, and
+ clean up the connections to the D-Bus on exit (Closes: #332387)
+
2006-07-13 Srinivasa Ragavan <sragavan@novell.com>
** Fix for bug #345331
diff --git a/shell/e-shell-nm-glib.c b/shell/e-shell-nm-glib.c
index 9c6a8fd67d..994f3af755 100644
--- a/shell/e-shell-nm-glib.c
+++ b/shell/e-shell-nm-glib.c
@@ -31,6 +31,7 @@
#include <e-shell-window.h>
static libnm_glib_ctx *nm_ctx = NULL;
+static guint id = 0;
static void e_shell_glib_network_monitor (libnm_glib_ctx *ctx, gpointer user_data)
{
@@ -44,24 +45,19 @@ static void e_shell_glib_network_monitor (libnm_glib_ctx *ctx, gpointer user_dat
state = libnm_glib_get_network_state (ctx);
line_status = e_shell_get_line_status (shell);
-
+
if (line_status == E_SHELL_LINE_STATUS_ONLINE && state == LIBNM_NO_NETWORK_CONNECTION) {
shell_state = GNOME_Evolution_FORCED_OFFLINE;
e_shell_go_offline (shell, window, shell_state);
} else if (line_status == E_SHELL_LINE_STATUS_OFFLINE && state == LIBNM_ACTIVE_NETWORK_CONNECTION) {
shell_state = GNOME_Evolution_USER_ONLINE;
e_shell_go_online (shell, window, shell_state);
- } else
- return LIBNM_INVALID_CONTEXT;
-
- return FALSE;
+ }
}
int e_shell_nm_glib_initialise (EShellWindow *window )
{
- guint id;
-
if (!nm_ctx)
{
nm_ctx = libnm_glib_init ();
@@ -75,3 +71,14 @@ int e_shell_nm_glib_initialise (EShellWindow *window )
return TRUE;
}
+
+void e_shell_nm_glib_dispose (EShellWindow *window )
+{
+ if (id != 0 && nm_ctx != NULL) {
+ libnm_glib_unregister_callback (nm_ctx, id);
+ libnm_glib_shutdown (nm_ctx);
+ nm_ctx = NULL;
+ id = 0;
+ }
+}
+
diff --git a/shell/e-shell-nm.c b/shell/e-shell-nm.c
index f745dc9406..d8b62d861a 100644
--- a/shell/e-shell-nm.c
+++ b/shell/e-shell-nm.c
@@ -147,10 +147,16 @@ init_dbus (EShellWindow *window)
return FALSE;
}
-
int e_shell_dbus_initialise (EShellWindow *window)
{
g_type_init ();
return init_dbus (window);
}
+
+void e_shell_dbus_dispose (EShellWindow *window)
+{
+ //FIXME
+ return;
+}
+
diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c
index bdf599906f..e5fc700ab0 100644
--- a/shell/e-shell-window.c
+++ b/shell/e-shell-window.c
@@ -844,6 +844,12 @@ impl_dispose (GObject *object)
priv->tooltips = NULL;
}
+ #ifdef NM_SUPPORT_GLIB
+ e_shell_nm_glib_dispose (E_SHELL_WINDOW (object));
+ #elif NM_SUPPORT
+ e_shell_dbus_dispose (E_SHELL_WINDOW (object));
+ #endif
+
(* G_OBJECT_CLASS (e_shell_window_parent_class)->dispose) (object);
}