evolution/evolution-2.22.0-line-status.patch

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;