186 lines
5.8 KiB
Diff
186 lines
5.8 KiB
Diff
|
diff -up evolution-2.22.0/shell/e-shell-nm-glib.c.line-status evolution-2.22.0/shell/e-shell-nm-glib.c
|
||
|
--- evolution-2.22.0/shell/e-shell-nm-glib.c.line-status 2007-11-29 23:23:59.000000000 -0500
|
||
|
+++ evolution-2.22.0/shell/e-shell-nm-glib.c 2008-03-14 12:13:29.000000000 -0400
|
||
|
@@ -33,23 +33,40 @@
|
||
|
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)
|
||
|
+static void
|
||
|
+e_shell_glib_network_monitor (libnm_glib_ctx *ctx, gpointer user_data)
|
||
|
{
|
||
|
libnm_glib_state state;
|
||
|
- EShellLineStatus line_status;
|
||
|
EShellWindow *window = E_SHELL_WINDOW (user_data);
|
||
|
EShell *shell = e_shell_window_peek_shell (window);
|
||
|
GNOME_Evolution_ShellState shell_state;
|
||
|
+ gboolean shell_is_online;
|
||
|
+ gboolean shell_is_offline;
|
||
|
|
||
|
g_return_if_fail (ctx != NULL);
|
||
|
|
||
|
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) {
|
||
|
+ switch (e_shell_get_line_status (shell)) {
|
||
|
+ case E_SHELL_LINE_STATUS_ONLINE:
|
||
|
+ shell_is_online = TRUE;
|
||
|
+ shell_is_offline = FALSE;
|
||
|
+ break;
|
||
|
+ case E_SHELL_LINE_STATUS_OFFLINE:
|
||
|
+ case E_SHELL_LINE_STATUS_FORCED_OFFLINE:
|
||
|
+ shell_is_online = FALSE;
|
||
|
+ shell_is_offline = TRUE;
|
||
|
+ break;
|
||
|
+ default: /* in-between states */
|
||
|
+ shell_is_online = FALSE;
|
||
|
+ shell_is_offline = FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (shell_is_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) {
|
||
|
+
|
||
|
+ } else if (shell_is_offline && state == LIBNM_ACTIVE_NETWORK_CONNECTION) {
|
||
|
shell_state = GNOME_Evolution_USER_ONLINE;
|
||
|
e_shell_go_online (shell, window, shell_state);
|
||
|
}
|
||
|
@@ -58,15 +75,15 @@ static void e_shell_glib_network_monitor
|
||
|
int e_shell_nm_glib_initialise (EShellWindow *window);
|
||
|
void e_shell_nm_glib_dispose (EShellWindow *window);
|
||
|
|
||
|
-int e_shell_nm_glib_initialise (EShellWindow *window)
|
||
|
+int
|
||
|
+e_shell_nm_glib_initialise (EShellWindow *window)
|
||
|
{
|
||
|
- if (!nm_ctx)
|
||
|
- {
|
||
|
+ if (!nm_ctx) {
|
||
|
nm_ctx = libnm_glib_init ();
|
||
|
if (!nm_ctx) {
|
||
|
- fprintf (stderr, "Could not initialize libnm.\n");
|
||
|
- return FALSE;
|
||
|
- }
|
||
|
+ g_warning ("Could not initialize libnm.");
|
||
|
+ return FALSE;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
id = libnm_glib_register_callback (nm_ctx, e_shell_glib_network_monitor, window, NULL);
|
||
|
@@ -74,7 +91,8 @@ int e_shell_nm_glib_initialise (EShellWi
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
-void e_shell_nm_glib_dispose (EShellWindow *window)
|
||
|
+void
|
||
|
+e_shell_nm_glib_dispose (EShellWindow *window)
|
||
|
{
|
||
|
if (id != 0 && nm_ctx != NULL) {
|
||
|
libnm_glib_unregister_callback (nm_ctx, id);
|
||
|
@@ -83,4 +101,3 @@ void e_shell_nm_glib_dispose (EShellWind
|
||
|
id = 0;
|
||
|
}
|
||
|
}
|
||
|
-
|
||
|
diff -up evolution-2.22.0/shell/e-shell-nm.c.line-status evolution-2.22.0/shell/e-shell-nm.c
|
||
|
--- evolution-2.22.0/shell/e-shell-nm.c.line-status 2008-02-22 04:51:05.000000000 -0500
|
||
|
+++ evolution-2.22.0/shell/e-shell-nm.c 2008-03-14 12:13:29.000000000 -0400
|
||
|
@@ -35,17 +35,12 @@
|
||
|
#include <dbus/dbus-glib.h>
|
||
|
#include <NetworkManager/NetworkManager.h>
|
||
|
|
||
|
-typedef enum _ShellLineStatus {
|
||
|
- E_SHELL_LINE_DOWN,
|
||
|
- E_SHELL_LINE_UP
|
||
|
-} ShellLineStatus;
|
||
|
-
|
||
|
-
|
||
|
static gboolean init_dbus (EShellWindow *window);
|
||
|
+int e_shell_dbus_initialise (EShellWindow *window);
|
||
|
+void e_shell_dbus_dispose (EShellWindow *window);
|
||
|
|
||
|
static DBusConnection *dbus_connection = NULL;
|
||
|
|
||
|
-
|
||
|
static gboolean
|
||
|
reinit_dbus (gpointer user_data)
|
||
|
{
|
||
|
@@ -63,11 +58,12 @@ e_shell_network_monitor (DBusConnection
|
||
|
{
|
||
|
DBusError error;
|
||
|
const char *object;
|
||
|
- ShellLineStatus status;
|
||
|
EShellWindow *window = NULL;
|
||
|
EShell *shell = NULL;
|
||
|
GNOME_Evolution_ShellState shell_state;
|
||
|
- EShellLineStatus line_status;
|
||
|
+ gboolean shell_is_online;
|
||
|
+ gboolean shell_is_offline;
|
||
|
+ gboolean network_device_active;
|
||
|
|
||
|
if (!user_data || !E_IS_SHELL_WINDOW (user_data))
|
||
|
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||
|
@@ -89,9 +85,9 @@ e_shell_network_monitor (DBusConnection
|
||
|
}
|
||
|
|
||
|
if (dbus_message_is_signal (message, NM_DBUS_INTERFACE, "DeviceNoLongerActive"))
|
||
|
- status = E_SHELL_LINE_DOWN;
|
||
|
+ network_device_active = FALSE;
|
||
|
else if (dbus_message_is_signal (message, NM_DBUS_INTERFACE, "DeviceNowActive"))
|
||
|
- status = E_SHELL_LINE_UP;
|
||
|
+ network_device_active = TRUE;
|
||
|
else
|
||
|
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||
|
|
||
|
@@ -99,12 +95,26 @@ e_shell_network_monitor (DBusConnection
|
||
|
&object, DBUS_TYPE_INVALID))
|
||
|
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||
|
|
||
|
- line_status = e_shell_get_line_status (shell);
|
||
|
+ switch (e_shell_get_line_status (shell)) {
|
||
|
+ case E_SHELL_LINE_STATUS_ONLINE:
|
||
|
+ shell_is_online = TRUE;
|
||
|
+ shell_is_offline = FALSE;
|
||
|
+ break;
|
||
|
+ case E_SHELL_LINE_STATUS_OFFLINE:
|
||
|
+ case E_SHELL_LINE_STATUS_FORCED_OFFLINE:
|
||
|
+ shell_is_online = FALSE;
|
||
|
+ shell_is_offline = TRUE;
|
||
|
+ break;
|
||
|
+ default: /* in-between states */
|
||
|
+ shell_is_online = FALSE;
|
||
|
+ shell_is_offline = FALSE;
|
||
|
+ }
|
||
|
|
||
|
- if (line_status == E_SHELL_LINE_STATUS_ONLINE && status == E_SHELL_LINE_DOWN) {
|
||
|
+ if (shell_is_online && !network_device_active) {
|
||
|
shell_state = GNOME_Evolution_FORCED_OFFLINE;
|
||
|
e_shell_go_offline (shell, window, shell_state);
|
||
|
- } else if (line_status == E_SHELL_LINE_STATUS_OFFLINE && status == E_SHELL_LINE_UP) {
|
||
|
+
|
||
|
+ } else if (shell_is_offline && network_device_active) {
|
||
|
shell_state = GNOME_Evolution_USER_ONLINE;
|
||
|
e_shell_go_online (shell, window, shell_state);
|
||
|
}
|
||
|
@@ -153,14 +163,16 @@ init_dbus (EShellWindow *window)
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
-int e_shell_dbus_initialise (EShellWindow *window)
|
||
|
+int
|
||
|
+e_shell_dbus_initialise (EShellWindow *window)
|
||
|
{
|
||
|
g_type_init ();
|
||
|
|
||
|
return init_dbus (window);
|
||
|
}
|
||
|
|
||
|
-void e_shell_dbus_dispose (EShellWindow *window)
|
||
|
+void
|
||
|
+e_shell_dbus_dispose (EShellWindow *window)
|
||
|
{
|
||
|
//FIXME
|
||
|
return;
|