diff --git a/evolution-2.22.0-line-status.patch b/evolution-2.22.0-line-status.patch new file mode 100644 index 0000000..8b13eb2 --- /dev/null +++ b/evolution-2.22.0-line-status.patch @@ -0,0 +1,185 @@ +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; diff --git a/evolution.spec b/evolution.spec index 6f8f290..3dca495 100644 --- a/evolution.spec +++ b/evolution.spec @@ -46,7 +46,7 @@ Name: evolution Version: 2.22.0 -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv2 and GFDL+ Group: Applications/Productivity Summary: GNOME's next-generation groupware suite @@ -81,6 +81,9 @@ Patch14: evolution-2.7.1-no-gnome-common.patch # RH bug #176400 Patch15: evolution-2.9.1-im-context-reset.patch +# RH bug #437208 / GNOME bug #518103 +Patch16: evolution-2.22.0-line-status.patch + ## Dependencies ### Requires(post): GConf2 @@ -223,6 +226,7 @@ This package contains the plugin to filter junk mail using SpamAssassin. %patch13 -p1 -b .fix-conduit-dir %patch14 -p1 -b .no-gnome-common %patch15 -p1 -b .im-context-reset +%patch16 -p1 -b .line-status mkdir -p krb5-fakeprefix/include mkdir -p krb5-fakeprefix/lib @@ -650,6 +654,9 @@ rm -rf $RPM_BUILD_ROOT %{evo_plugin_dir}/liborg-gnome-sa-junk-plugin.so %changelog +* Fri Mar 14 2008 Matthew Barnes - 2.22.0-2.fc9 +- Add patch for RH bug #437208 (tracking network status). + * Mon Mar 10 2008 Matthew Barnes - 2.22.0-1.fc9 - Update to 2.22.0 - Remove patch for CVE-2008-0072 (fixed upstream).