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 #include -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;