aboutsummaryrefslogtreecommitdiffstats
path: root/my-evolution/e-summary-preferences.c
diff options
context:
space:
mode:
Diffstat (limited to 'my-evolution/e-summary-preferences.c')
-rw-r--r--my-evolution/e-summary-preferences.c601
1 files changed, 429 insertions, 172 deletions
diff --git a/my-evolution/e-summary-preferences.c b/my-evolution/e-summary-preferences.c
index bc37c3326f..692ba16a5e 100644
--- a/my-evolution/e-summary-preferences.c
+++ b/my-evolution/e-summary-preferences.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* e-summary-preferences.c
*
- * Copyright (C) 2001, 2002 Ximian, Inc.
+ * Copyright (C) 2001 Ximian, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
@@ -26,11 +26,13 @@
#include <gtk/gtk.h>
+#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-util.h>
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-config.h>
#include <libgnomeui/gnome-propertybox.h>
+#include <libgnomeui/gnome-stock.h>
#include <glade/glade.h>
#include <stdio.h>
@@ -42,12 +44,10 @@
#include <bonobo/bonobo-control.h>
#include <bonobo/bonobo-widget.h>
-#include <gconf/gconf-client.h>
+#include <bonobo-conf/bonobo-config-database.h>
#include <shell/evolution-storage-set-view-listener.h>
-#include <string.h>
-
#include "e-summary.h"
#include "e-summary-preferences.h"
#include "e-summary-table.h"
@@ -55,125 +55,335 @@
#include "evolution-config-control.h"
+#define FACTORY_ID "OAFIID:GNOME_Evolution_Summary_ConfigControlFactory"
+
static ESummaryPrefs *global_preferences = NULL;
static GNOME_Evolution_Shell global_shell = NULL;
-gboolean
-e_summary_preferences_restore (ESummaryPrefs *prefs)
+static char *default_folders[2] = {
+ "/local/Inbox", "/local/Outbox"
+};
+
+static void
+make_initial_mail_list (ESummaryPrefs *prefs)
{
- GConfClient *gconf_client;
- GSList *path_list;
- GSList *uri_list;
- GSList *p, *q;
+ char *evolution_dir;
+ GList *folders = NULL;
+ int i;
+
+ evolution_dir = gnome_util_prepend_user_home ("evolution");
+ for (i = 0; i < 2; i++) {
+ ESummaryPrefsFolder *folder;
- g_return_val_if_fail (prefs != NULL, FALSE);
+ folder = g_new (ESummaryPrefsFolder, 1);
+ folder->evolution_uri = g_strconcat ("evolution:", default_folders[i], NULL);
+ folder->physical_uri = g_strconcat ("file://", evolution_dir, default_folders[i], NULL);
+
+ folders = g_list_append (folders, folder);
+ }
+
+ g_free (evolution_dir);
+ prefs->display_folders = folders;
+}
+
+static void
+make_initial_rdf_list (ESummaryPrefs *prefs)
+{
+ GList *rdfs;
- gconf_client = gconf_client_get_default ();
+ rdfs = g_list_prepend (NULL, g_strdup ("http://linuxtoday.com/backend/my-netscape.rdf"));
+ rdfs = g_list_append (rdfs, g_strdup ("http://www.salon.com/feed/RDF/salon_use.rdf"));
+
+ prefs->rdf_urls = rdfs;
+}
- path_list = gconf_client_get_list (gconf_client, "/apps/evolution/summary/mail/folder_evolution_uris",
- GCONF_VALUE_STRING, NULL);
- uri_list = gconf_client_get_list (gconf_client, "/apps/evolution/summary/mail/folder_physical_uris",
- GCONF_VALUE_STRING, NULL);
+static void
+make_initial_weather_list (ESummaryPrefs *prefs)
+{
+ /* translators: Put a list of codes for locations you want to see in
+ My Evolution by default here. You can find the list of all
+ stations and their codes in Evolution sources.
+ (evolution/my-evolution/Locations)
+ Codes are seperated with : eg. "KBOS:EGAA"*/
+ char *default_stations = _("KBOS"), **stations_v, **p;
+ GList *stations = NULL;
+
+ stations_v = g_strsplit (default_stations, ":", 0);
+ g_assert (stations_v != NULL);
+ for (p = stations_v; *p != NULL; p++) {
+ stations = g_list_prepend (stations, *p);
+ }
+ g_free (stations_v);
+
+ prefs->stations = g_list_reverse (stations);
+}
- prefs->display_folders = NULL;
- for (p = path_list, q = uri_list; p != NULL && q != NULL; p = p->next, q = q->next) {
+/* Load the prefs off disk */
+
+static char *
+vector_from_str_list (GList *strlist)
+{
+ char *vector;
+ GString *str;
+
+ if (strlist == NULL) {
+ return g_strdup ("");
+ }
+
+ str = g_string_new ("");
+ for (; strlist; strlist = strlist->next) {
+ g_string_append (str, strlist->data);
+
+ /* No space at end */
+ if (strlist->next) {
+ g_string_append (str, " !<-->! ");
+ }
+ }
+
+ vector = str->str;
+ g_string_free (str, FALSE);
+
+ return vector;
+}
+
+static GList *
+str_list_from_vector (const char *vector)
+{
+ GList *strlist = NULL;
+ char **tokens, **t;
+
+ t = tokens = g_strsplit (vector, " !<-->! ", 8196);
+
+ if (tokens == NULL) {
+ return NULL;
+ }
+
+ for (; *tokens; tokens++) {
+ strlist = g_list_prepend (strlist, g_strdup (*tokens));
+ }
+
+ g_strfreev (t);
+
+ strlist = g_list_reverse (strlist);
+ return strlist;
+}
+
+static GList *
+folder_list_from_vector (const char *vector)
+{
+ GList *flist = NULL;
+ char **tokens, **t;
+
+ t = tokens = g_strsplit (vector, " !<-->! ", 8196);
+ if (tokens == NULL) {
+ return NULL;
+ }
+
+ for (tokens = t; *tokens; tokens += 2) {
ESummaryPrefsFolder *folder;
+ const char *evolution_uri;
+ const char *physical_uri;
+
+ evolution_uri = *tokens;
+ if (evolution_uri == NULL || strncmp (evolution_uri, "evolution:", 10) != 0)
+ break;
+
+ physical_uri = *(tokens + 1);
+ if (physical_uri == NULL)
+ break;
folder = g_new (ESummaryPrefsFolder, 1);
- folder->evolution_uri = p->data;
- folder->physical_uri = q->data;
- prefs->display_folders = g_slist_append(prefs->display_folders, folder);
+ folder->evolution_uri = g_strdup (evolution_uri);
+ folder->physical_uri = g_strdup (physical_uri);
+
+ flist = g_list_prepend (flist, folder);
}
- g_slist_free (path_list);
- g_slist_free (uri_list);
+ g_strfreev (t);
+
+ flist = g_list_reverse (flist);
+ return flist;
+}
+
+static char *
+vector_from_folder_list (GList *flist)
+{
+ char *vector;
+ GString *string;
- prefs->show_full_path = gconf_client_get_bool (gconf_client, "/apps/evolution/summary/mail/show_full_paths", NULL);
+ if (flist == NULL) {
+ return g_strdup ("");
+ }
- prefs->rdf_urls = gconf_client_get_list (gconf_client, "/apps/evolution/summary/rdf/uris",
- GCONF_VALUE_STRING, NULL);
+ string = g_string_new ("");
+ for (; flist; flist = flist->next) {
+ ESummaryPrefsFolder *folder;
- prefs->rdf_refresh_time = gconf_client_get_int (gconf_client, "/apps/evolution/summary/rdf/refresh_time", NULL);
+ folder = flist->data;
+ string = g_string_append (string, folder->evolution_uri);
+ string = g_string_append (string, " !<-->! ");
+ string = g_string_append (string, folder->physical_uri);
- prefs->limit = gconf_client_get_int (gconf_client, "/apps/evolution/summary/rdf/max_items", NULL);
+ if (flist->next != NULL) {
+ string = g_string_append (string, " !<-->! ");
+ }
+ }
- prefs->stations = gconf_client_get_list (gconf_client, "/apps/evolution/summary/weather/stations",
- GCONF_VALUE_STRING, NULL);
+ vector = string->str;
+ g_string_free (string, FALSE);
- if (gconf_client_get_bool (gconf_client, "/apps/evolution/summary/weather/use_metric", NULL))
- prefs->units = UNITS_METRIC;
- else
- prefs->units = UNITS_IMPERIAL;
+ return vector;
+}
+
+gboolean
+e_summary_preferences_restore (ESummaryPrefs *prefs)
+{
+ Bonobo_ConfigDatabase db;
+ CORBA_Environment ev;
+ char *vector;
+
+ g_return_val_if_fail (prefs != NULL, FALSE);
+
+ CORBA_exception_init (&ev);
+ db = bonobo_get_object ("wombat:", "Bonobo/ConfigDatabase", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Error getting Wombat. Using defaults");
+ CORBA_exception_free (&ev);
+ return FALSE;
+ }
+
+ CORBA_exception_free (&ev);
+ vector = bonobo_config_get_string (db, "My-Evolution/Mail/display_folders-1.2", &ev);
+ if (BONOBO_EX (&ev)) {
+ g_warning ("Error getting Mail/display_folders. Using defaults");
+ CORBA_exception_free (&ev);
+ make_initial_mail_list (prefs);
+ } else {
+ prefs->display_folders = folder_list_from_vector (vector);
+ g_free (vector);
+ }
+
+ prefs->show_full_path = bonobo_config_get_boolean (db, "My-Evolution/Mail/show_full_path", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Error getting Mail/show_full_path. Using defaults");
+ bonobo_object_release_unref (db, NULL);
+ CORBA_exception_free (&ev);
+ return FALSE;
+ }
+
+
+ vector = bonobo_config_get_string (db, "My-Evolution/RDF/rdf_urls", &ev);
+ if (BONOBO_EX (&ev)) {
+ g_warning ("Error getting RDF/rdf_urls");
+ CORBA_exception_free (&ev);
+ bonobo_object_release_unref (db, NULL);
+ return FALSE;
+ }
+ prefs->rdf_urls = str_list_from_vector (vector);
+ g_free (vector);
+
+ prefs->rdf_refresh_time = bonobo_config_get_long_with_default (db, "My-Evolution/RDF/rdf_refresh_time", 600, NULL);
+
+ prefs->limit = bonobo_config_get_long_with_default (db, "My-Evolution/RDF/limit", 10, NULL);
+
+ vector = bonobo_config_get_string (db, "My-Evolution/Weather/stations", &ev);
+ if (BONOBO_EX (&ev)) {
+ g_warning ("Error getting Weather/stations");
+ CORBA_exception_free (&ev);
+ bonobo_object_release_unref (db, NULL);
+ return FALSE;
+ }
+ prefs->stations = str_list_from_vector (vector);
+ g_free (vector);
+
+ prefs->units = bonobo_config_get_long (db, "My-Evolution/Weather/units", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Error getting Weather/units. Using defaults");
+ bonobo_object_release_unref (db, NULL);
+ CORBA_exception_free (&ev);
+ return FALSE;
+ }
+
+ prefs->weather_refresh_time = bonobo_config_get_long (db, "My-Evolution/Weather/weather_refresh_time", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Error getting Weather/weather_refresh_time. Using defaults");
+ bonobo_object_release_unref (db, NULL);
+ CORBA_exception_free (&ev);
+ return FALSE;
+ }
- prefs->weather_refresh_time = gconf_client_get_int (gconf_client, "/apps/evolution/summary/weather/refresh_time",
- NULL);
- prefs->days = gconf_client_get_int (gconf_client, "/apps/evolution/summary/calendar/days_shown", NULL);
- if (gconf_client_get_bool (gconf_client, "/apps/evolution/summary/tasks/show_all", NULL))
- prefs->show_tasks = E_SUMMARY_CALENDAR_ALL_TASKS;
- else
- prefs->show_tasks = E_SUMMARY_CALENDAR_ONE_DAY;
+ prefs->days = bonobo_config_get_long (db, "My-Evolution/Schedule/days", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Error getting Schedule/days. Using defaults");
+ bonobo_object_release_unref (db, NULL);
+ CORBA_exception_free (&ev);
+ return FALSE;
+ }
- g_object_unref (gconf_client);
+ prefs->show_tasks = bonobo_config_get_long (db, "My-Evolution/Schedule/show_tasks", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Error getting Schedule/show_tasks. Using defaults");
+ bonobo_object_release_unref (db, NULL);
+ CORBA_exception_free (&ev);
+ return FALSE;
+ }
+
+ bonobo_object_release_unref (db, NULL);
return TRUE;
}
+/* Write prefs to disk */
void
e_summary_preferences_save (ESummaryPrefs *prefs)
{
- GConfClient *gconf_client;
- GSList *evolution_uri_list, *physical_uri_list;
- GSList *p;
-
- gconf_client = gconf_client_get_default ();
+ Bonobo_ConfigDatabase db;
+ CORBA_Environment ev;
+ char *vector;
- evolution_uri_list = NULL;
- physical_uri_list = NULL;
- for (p = prefs->display_folders; p != NULL; p = p->next) {
- const ESummaryPrefsFolder *folder;
+ g_return_if_fail (prefs != NULL);
- folder = (const ESummaryPrefsFolder *) p->data;
- evolution_uri_list = g_slist_prepend (evolution_uri_list, folder->evolution_uri);
- physical_uri_list = g_slist_prepend (physical_uri_list, folder->physical_uri);
+ CORBA_exception_init (&ev);
+ db = bonobo_get_object ("wombat:", "Bonobo/ConfigDatabase", &ev);
+ if (BONOBO_EX (&ev) || db == CORBA_OBJECT_NIL) {
+ g_warning ("Cannot save preferences");
+ CORBA_exception_free (&ev);
+ return;
}
- evolution_uri_list = g_slist_reverse (evolution_uri_list);
- physical_uri_list = g_slist_reverse (physical_uri_list);
-
- gconf_client_set_list (gconf_client, "/apps/evolution/summary/mail/folder_evolution_uris",
- GCONF_VALUE_STRING, evolution_uri_list, NULL);
- gconf_client_set_list (gconf_client, "/apps/evolution/summary/mail/folder_physical_uris",
- GCONF_VALUE_STRING, physical_uri_list, NULL);
+ CORBA_exception_free (&ev);
- g_slist_free (evolution_uri_list);
- g_slist_free (physical_uri_list);
+ vector = vector_from_folder_list (prefs->display_folders);
+ bonobo_config_set_string (db, "My-Evolution/Mail/display_folders-1.2", vector, NULL);
+ g_free (vector);
- gconf_client_set_bool (gconf_client, "/apps/evolution/summary/mail/show_full_paths", prefs->show_full_path, NULL);
+ bonobo_config_set_boolean (db, "My-Evolution/Mail/show_full_path", prefs->show_full_path, NULL);
- gconf_client_set_list (gconf_client, "/apps/evolution/summary/rdf/uris",
- GCONF_VALUE_STRING, prefs->rdf_urls, NULL);
+ vector = vector_from_str_list (prefs->rdf_urls);
+ bonobo_config_set_string (db, "My-Evolution/RDF/rdf_urls", vector, NULL);
+ g_free (vector);
- gconf_client_set_int (gconf_client, "/apps/evolution/summary/rdf/refresh_time", prefs->rdf_refresh_time, NULL);
- gconf_client_set_int (gconf_client, "/apps/evolution/summary/rdf/max_items", prefs->limit, NULL);
+ bonobo_config_set_long (db, "My-Evolution/RDF/rdf_refresh_time", prefs->rdf_refresh_time, NULL);
+ bonobo_config_set_long (db, "My-Evolution/RDF/limit", prefs->limit, NULL);
- gconf_client_set_list (gconf_client, "/apps/evolution/summary/weather/stations",
- GCONF_VALUE_STRING, prefs->stations, NULL);
+ vector = vector_from_str_list (prefs->stations);
+ bonobo_config_set_string (db, "My-Evolution/Weather/stations", vector, NULL);
+ g_free (vector);
- gconf_client_set_bool (gconf_client, "/apps/evolution/summary/weather/use_metric",
- prefs->units == UNITS_METRIC, NULL);
- gconf_client_set_int (gconf_client, "/apps/evolution/summary/weather/refresh_time",
- prefs->weather_refresh_time, NULL);
+ bonobo_config_set_long (db, "My-Evolution/Weather/units", prefs->units, NULL);
+ bonobo_config_set_long (db, "My-Evolution/Weather/weather_refresh_time", prefs->weather_refresh_time, NULL);
- gconf_client_set_int (gconf_client, "/apps/evolution/summary/calendar/days_shown",
- prefs->days, NULL);
+ bonobo_config_set_long (db, "My-Evolution/Schedule/days", prefs->days, NULL);
+ bonobo_config_set_long (db, "My-Evolution/Schedule/show_tasks", prefs->show_tasks, NULL);
- gconf_client_set_bool (gconf_client, "/apps/evolution/summary/tasks/show_all",
- prefs->show_tasks == E_SUMMARY_CALENDAR_ALL_TASKS, NULL);
+ CORBA_exception_init (&ev);
+ Bonobo_ConfigDatabase_sync (db, &ev);
+ CORBA_exception_free (&ev);
- g_object_unref (gconf_client);
+ bonobo_object_release_unref (db, NULL);
}
static void
-free_str_list (GSList *list)
+free_str_list (GList *list)
{
for (; list; list = list->next) {
g_free (list->data);
@@ -181,7 +391,7 @@ free_str_list (GSList *list)
}
static void
-free_folder_list (GSList *list)
+free_folder_list (GList *list)
{
for (; list; list = list->next) {
ESummaryPrefsFolder *f = list->data;
@@ -197,39 +407,39 @@ e_summary_preferences_free (ESummaryPrefs *prefs)
{
if (prefs->display_folders) {
free_folder_list (prefs->display_folders);
- g_slist_free (prefs->display_folders);
+ g_list_free (prefs->display_folders);
}
if (prefs->rdf_urls) {
free_str_list (prefs->rdf_urls);
- g_slist_free (prefs->rdf_urls);
+ g_list_free (prefs->rdf_urls);
}
if (prefs->stations) {
free_str_list (prefs->stations);
- g_slist_free (prefs->stations);
+ g_list_free (prefs->stations);
}
g_free (prefs);
}
-static GSList *
-copy_str_list (GSList *list)
+static GList *
+copy_str_list (GList *list)
{
- GSList *list_copy = NULL;
+ GList *list_copy = NULL;
for (; list; list = list->next) {
- list_copy = g_slist_prepend (list_copy, g_strdup (list->data));
+ list_copy = g_list_prepend (list_copy, g_strdup (list->data));
}
- list_copy = g_slist_reverse (list_copy);
+ list_copy = g_list_reverse (list_copy);
return list_copy;
}
-static GSList *
-copy_folder_list (GSList *list)
+static GList *
+copy_folder_list (GList *list)
{
- GSList *list_copy = NULL;
+ GList *list_copy = NULL;
for (; list; list = list->next) {
ESummaryPrefsFolder *f1, *f2;
@@ -239,10 +449,10 @@ copy_folder_list (GSList *list)
f2->evolution_uri = g_strdup (f1->evolution_uri);
f2->physical_uri = g_strdup (f1->physical_uri);
- list_copy = g_slist_prepend (list_copy, f2);
+ list_copy = g_list_prepend (list_copy, f2);
}
- list_copy = g_slist_reverse (list_copy);
+ list_copy = g_list_reverse (list_copy);
return list_copy;
}
@@ -282,7 +492,27 @@ e_summary_preferences_init (void)
prefs = g_new0 (ESummaryPrefs, 1);
global_preferences = prefs;
- e_summary_preferences_restore (prefs);
+ if (e_summary_preferences_restore (prefs) == TRUE) {
+ return prefs;
+ }
+
+ /* Defaults */
+
+ /* Mail */
+ make_initial_mail_list (prefs);
+
+ /* RDF */
+ make_initial_rdf_list (prefs);
+ prefs->rdf_refresh_time = 600;
+ prefs->limit = 10;
+
+ /* Weather */
+ make_initial_weather_list (prefs);
+ prefs->units = UNITS_METRIC;
+ prefs->weather_refresh_time = 600;
+
+ prefs->days = E_SUMMARY_CALENDAR_ONE_DAY;
+ prefs->show_tasks = E_SUMMARY_CALENDAR_ALL_TASKS;
return prefs;
}
@@ -290,8 +520,6 @@ e_summary_preferences_init (void)
ESummaryPrefs *
e_summary_preferences_get_global (void)
{
- g_assert(global_preferences);
-
return global_preferences;
}
@@ -302,7 +530,7 @@ struct _MailPage {
GtkWidget *add, *remove;
GHashTable *model;
- GSList *tmp_list;
+ GList *tmp_list;
};
struct _RDFPage {
@@ -311,7 +539,7 @@ struct _RDFPage {
GtkWidget *new_button, *delete_url;
GHashTable *default_hash, *model;
- GSList *known, *tmp_list;
+ GList *known, *tmp_list;
};
struct _WeatherPage {
@@ -320,7 +548,7 @@ struct _WeatherPage {
GtkWidget *add, *remove;
GHashTable *model;
- GSList *tmp_list;
+ GList *tmp_list;
};
struct _CalendarPage {
@@ -381,7 +609,7 @@ static struct _RDFInfo rdfs[] = {
};
static void
-save_known_rdfs (GSList *rdfs)
+save_known_rdfs (GList *rdfs)
{
FILE *handle;
char *rdf_file;
@@ -417,7 +645,7 @@ static gboolean
rdf_is_shown (PropertyData *pd,
const char *url)
{
- GSList *p;
+ GList *p;
for (p = global_preferences->rdf_urls; p; p = p->next) {
if (strcmp (p->data, url) == 0) {
@@ -443,7 +671,6 @@ fill_rdf_etable (GtkWidget *widget,
}
ess = E_SUMMARY_SHOWN (widget);
- e_summary_shown_freeze (ess);
/* Fill the defaults first */
for (i = 0; rdfs[i].url; i++) {
@@ -453,7 +680,7 @@ fill_rdf_etable (GtkWidget *widget,
entry->showable = TRUE;
entry->data = &rdfs[i];
- e_summary_shown_add_node (ess, TRUE, entry, NULL, FALSE, NULL);
+ e_summary_shown_add_node (ess, TRUE, entry, NULL, TRUE, NULL);
if (rdf_is_shown (pd, rdfs[i].url) == TRUE) {
entry = g_new (ESummaryShownModelEntry, 1);
@@ -462,10 +689,10 @@ fill_rdf_etable (GtkWidget *widget,
entry->showable = TRUE;
entry->data = &rdfs[i];
- e_summary_shown_add_node (ess, FALSE, entry, NULL, FALSE, NULL);
+ e_summary_shown_add_node (ess, FALSE, entry, NULL, TRUE, NULL);
}
- pd->rdf->known = g_slist_append (pd->rdf->known, &rdfs[i]);
+ pd->rdf->known = g_list_append (pd->rdf->known, &rdfs[i]);
g_hash_table_insert (pd->rdf->default_hash, rdfs[i].url, &rdfs[i]);
}
@@ -483,7 +710,6 @@ fill_rdf_etable (GtkWidget *widget,
}
if (handle == NULL) {
- e_summary_shown_thaw (ess);
return;
}
@@ -512,7 +738,7 @@ fill_rdf_etable (GtkWidget *widget,
info->name = g_strdup (tokens[1]);
info->custom = TRUE;
- pd->rdf->known = g_slist_append (pd->rdf->known, info);
+ pd->rdf->known = g_list_append (pd->rdf->known, info);
entry = g_new (ESummaryShownModelEntry, 1);
entry->location = g_strdup (info->url);
@@ -520,7 +746,7 @@ fill_rdf_etable (GtkWidget *widget,
entry->showable = TRUE;
entry->data = info;
- e_summary_shown_add_node (ess, TRUE, entry, NULL, FALSE, NULL);
+ e_summary_shown_add_node (ess, TRUE, entry, NULL, TRUE, NULL);
if (rdf_is_shown (pd, tokens[0]) == TRUE) {
entry = g_new (ESummaryShownModelEntry, 1);
@@ -529,14 +755,13 @@ fill_rdf_etable (GtkWidget *widget,
entry->showable = TRUE;
entry->data = info;
- e_summary_shown_add_node (ess, FALSE, entry, NULL, FALSE, NULL);
+ e_summary_shown_add_node (ess, FALSE, entry, NULL, TRUE, NULL);
}
g_strfreev (tokens);
}
fclose (handle);
- e_summary_shown_thaw (ess);
}
static void
@@ -561,8 +786,8 @@ add_dialog_clicked_cb (GtkWidget *widget,
PropertyData *pd)
{
if (button == 0) {
- const char *url;
- const char *name;
+ char *url;
+ char *name;
name = gtk_entry_get_text (GTK_ENTRY (pd->new_name_entry));
url = gtk_entry_get_text (GTK_ENTRY (pd->new_url_entry));
@@ -577,7 +802,7 @@ add_dialog_clicked_cb (GtkWidget *widget,
info->name = g_strdup (name);
info->custom = TRUE;
- pd->rdf->known = g_slist_append (pd->rdf->known, info);
+ pd->rdf->known = g_list_append (pd->rdf->known, info);
entry = g_new (ESummaryShownModelEntry, 1);
entry->location = g_strdup (info->url);
@@ -586,7 +811,7 @@ add_dialog_clicked_cb (GtkWidget *widget,
entry->data = info;
e_summary_shown_add_node (E_SUMMARY_SHOWN (pd->rdf->etable), TRUE,
- entry, NULL, FALSE, NULL);
+ entry, NULL, TRUE, NULL);
/* Should we add to shown? */
@@ -615,8 +840,10 @@ rdf_new_url_clicked_cb (GtkButton *button,
add_dialog = gnome_dialog_new (_("Add a news feed"),
GNOME_STOCK_BUTTON_OK,
GNOME_STOCK_BUTTON_CANCEL, NULL);
- g_signal_connect (add_dialog, "clicked", G_CALLBACK (add_dialog_clicked_cb), pd);
- g_signal_connect (add_dialog, "destroy", G_CALLBACK (gtk_widget_destroyed), &add_dialog);
+ gtk_signal_connect (GTK_OBJECT (add_dialog), "clicked",
+ GTK_SIGNAL_FUNC (add_dialog_clicked_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (add_dialog), "destroy",
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed), &add_dialog);
label = gtk_label_new (_("Enter the URL of the news feed you wish to add"));
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (add_dialog)->vbox), label,
@@ -658,7 +885,7 @@ rdf_delete_url_cb (GtkButton *button,
}
e_summary_shown_remove_node (E_SUMMARY_SHOWN (pd->rdf->etable), TRUE, entry);
- pd->rdf->known = g_slist_remove (pd->rdf->known, entry->data);
+ pd->rdf->known = g_list_remove (pd->rdf->known, entry->data);
/* FIXME: Remove from shown side as well */
}
@@ -861,45 +1088,52 @@ make_property_dialog (PropertyData *pd)
mail->storage_set_view = glade_xml_get_widget (pd->xml, "mail-custom");
g_return_val_if_fail (mail->storage_set_view != NULL, FALSE);
- listener = g_object_get_data (G_OBJECT (mail->storage_set_view), "listener");
- g_signal_connect (listener, "folder-toggled", G_CALLBACK (storage_set_changed), pd);
+ listener = gtk_object_get_data (GTK_OBJECT (mail->storage_set_view),
+ "listener");
+ gtk_signal_connect (GTK_OBJECT (listener), "folder-toggled",
+ GTK_SIGNAL_FUNC (storage_set_changed), pd);
mail->fullpath = glade_xml_get_widget (pd->xml, "checkbutton1");
g_return_val_if_fail (mail->fullpath != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mail->fullpath),
global_preferences->show_full_path);
- g_signal_connect (mail->fullpath, "toggled", G_CALLBACK (mail_show_full_path_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (mail->fullpath), "toggled",
+ GTK_SIGNAL_FUNC (mail_show_full_path_toggled_cb), pd);
/* RDF */
rdf = pd->rdf = g_new0 (struct _RDFPage, 1);
rdf->etable = glade_xml_get_widget (pd->xml, "rdf-custom");
g_return_val_if_fail (rdf->etable != NULL, FALSE);
- g_signal_connect (rdf->etable, "item-changed", G_CALLBACK (rdf_etable_item_changed_cb), pd);
- g_signal_connect (rdf->etable, "selection-changed", G_CALLBACK (rdf_etable_selection_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (rdf->etable), "item-changed",
+ GTK_SIGNAL_FUNC (rdf_etable_item_changed_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (rdf->etable), "selection-changed",
+ GTK_SIGNAL_FUNC (rdf_etable_selection_cb), pd);
fill_rdf_etable (rdf->etable, pd);
rdf->refresh = glade_xml_get_widget (pd->xml, "spinbutton1");
g_return_val_if_fail (rdf->refresh != NULL, FALSE);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (rdf->refresh),
(float) global_preferences->rdf_refresh_time);
- g_signal_connect (GTK_SPIN_BUTTON (rdf->refresh)->adjustment, "value_changed",
- G_CALLBACK (rdf_refresh_value_changed_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (rdf->refresh)->adjustment), "value_changed",
+ GTK_SIGNAL_FUNC (rdf_refresh_value_changed_cb), pd);
rdf->limit = glade_xml_get_widget (pd->xml, "spinbutton4");
g_return_val_if_fail (rdf->limit != NULL, FALSE);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (rdf->limit),
(float) global_preferences->limit);
- g_signal_connect (GTK_SPIN_BUTTON (rdf->limit)->adjustment, "value_changed",
- G_CALLBACK (rdf_limit_value_changed_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (rdf->limit)->adjustment), "value_changed",
+ GTK_SIGNAL_FUNC (rdf_limit_value_changed_cb), pd);
rdf->new_button = glade_xml_get_widget (pd->xml, "button11");
g_return_val_if_fail (rdf->limit != NULL, FALSE);
- g_signal_connect (rdf->new_button, "clicked", G_CALLBACK (rdf_new_url_clicked_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (rdf->new_button), "clicked",
+ GTK_SIGNAL_FUNC (rdf_new_url_clicked_cb), pd);
rdf->delete_url = glade_xml_get_widget (pd->xml, "delete-button");
g_return_val_if_fail (rdf->delete_url != NULL, FALSE);
- g_signal_connect (rdf->delete_url, "clicked", G_CALLBACK (rdf_delete_url_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (rdf->delete_url), "clicked",
+ GTK_SIGNAL_FUNC (rdf_delete_url_cb), pd);
/* Weather */
weather = pd->weather = g_new (struct _WeatherPage, 1);
@@ -908,7 +1142,9 @@ make_property_dialog (PropertyData *pd)
weather->etable = glade_xml_get_widget (pd->xml, "weather-custom");
g_return_val_if_fail (weather->etable != NULL, FALSE);
- g_signal_connect (weather->etable, "item-changed", G_CALLBACK (weather_etable_item_changed_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (weather->etable), "item-changed",
+ GTK_SIGNAL_FUNC (weather_etable_item_changed_cb),
+ pd);
fill_weather_etable (E_SUMMARY_SHOWN (weather->etable), pd);
@@ -916,20 +1152,24 @@ make_property_dialog (PropertyData *pd)
g_return_val_if_fail (weather->refresh != NULL, FALSE);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (weather->refresh),
(float) global_preferences->weather_refresh_time);
- g_signal_connect (GTK_SPIN_BUTTON (weather->refresh)->adjustment, "value-changed",
- G_CALLBACK (weather_refresh_value_changed_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (weather->refresh)->adjustment),
+ "value-changed",
+ GTK_SIGNAL_FUNC (weather_refresh_value_changed_cb),
+ pd);
weather->metric = glade_xml_get_widget (pd->xml, "radiobutton7");
g_return_val_if_fail (weather->metric != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (weather->metric),
(global_preferences->units == UNITS_METRIC));
- g_signal_connect (weather->metric, "toggled", G_CALLBACK (weather_metric_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (weather->metric), "toggled",
+ GTK_SIGNAL_FUNC (weather_metric_toggled_cb), pd);
weather->imperial = glade_xml_get_widget (pd->xml, "radiobutton8");
g_return_val_if_fail (weather->imperial != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (weather->imperial),
(global_preferences->units == UNITS_IMPERIAL));
- g_signal_connect (weather->imperial, "toggled", G_CALLBACK (weather_imperial_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (weather->imperial), "toggled",
+ GTK_SIGNAL_FUNC (weather_imperial_toggled_cb), pd);
/* Calendar */
calendar = pd->calendar = g_new (struct _CalendarPage, 1);
@@ -937,37 +1177,43 @@ make_property_dialog (PropertyData *pd)
g_return_val_if_fail (calendar->one != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (calendar->one),
(global_preferences->days == E_SUMMARY_CALENDAR_ONE_DAY));
- g_signal_connect (calendar->one, "toggled", G_CALLBACK (calendar_one_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (calendar->one), "toggled",
+ GTK_SIGNAL_FUNC (calendar_one_toggled_cb), pd);
calendar->five = glade_xml_get_widget (pd->xml, "radiobutton4");
g_return_val_if_fail (calendar->five != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (calendar->five),
(global_preferences->days == E_SUMMARY_CALENDAR_FIVE_DAYS));
- g_signal_connect (calendar->five, "toggled", G_CALLBACK (calendar_five_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (calendar->five), "toggled",
+ GTK_SIGNAL_FUNC (calendar_five_toggled_cb), pd);
calendar->week = glade_xml_get_widget (pd->xml, "radiobutton5");
g_return_val_if_fail (calendar->week != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (calendar->week),
(global_preferences->days == E_SUMMARY_CALENDAR_ONE_WEEK));
- g_signal_connect (calendar->week, "toggled", G_CALLBACK (calendar_week_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (calendar->week), "toggled",
+ GTK_SIGNAL_FUNC (calendar_week_toggled_cb), pd);
calendar->month = glade_xml_get_widget (pd->xml, "radiobutton6");
g_return_val_if_fail (calendar->month != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (calendar->month),
(global_preferences->days == E_SUMMARY_CALENDAR_ONE_MONTH));
- g_signal_connect (calendar->month, "toggled", G_CALLBACK (calendar_month_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (calendar->month), "toggled",
+ GTK_SIGNAL_FUNC (calendar_month_toggled_cb), pd);
calendar->all = glade_xml_get_widget (pd->xml, "radiobutton1");
g_return_val_if_fail (calendar->all != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (calendar->all),
(global_preferences->show_tasks == E_SUMMARY_CALENDAR_ALL_TASKS));
- g_signal_connect (calendar->all, "toggled", G_CALLBACK (calendar_all_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (calendar->all), "toggled",
+ GTK_SIGNAL_FUNC (calendar_all_toggled_cb), pd);
calendar->today = glade_xml_get_widget (pd->xml, "radiobutton2");
g_return_val_if_fail (calendar->today != NULL, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (calendar->today),
(global_preferences->show_tasks == E_SUMMARY_CALENDAR_TODAYS_TASKS));
- g_signal_connect (calendar->today, "toggled", G_CALLBACK (calendar_today_toggled_cb), pd);
+ gtk_signal_connect (GTK_OBJECT(calendar->today), "toggled",
+ GTK_SIGNAL_FUNC (calendar_today_toggled_cb), pd);
return TRUE;
}
@@ -976,28 +1222,29 @@ static void
free_property_dialog (PropertyData *pd)
{
if (pd->rdf) {
- g_slist_free (pd->rdf->known);
+ g_list_free (pd->rdf->known);
free_str_list (pd->rdf->tmp_list);
- g_slist_free (pd->rdf->tmp_list);
+ g_list_free (pd->rdf->tmp_list);
g_free (pd->rdf);
}
if (pd->mail) {
free_str_list (pd->mail->tmp_list);
- g_slist_free (pd->mail->tmp_list);
+ g_list_free (pd->mail->tmp_list);
g_free (pd->mail);
}
if (pd->weather) {
free_str_list (pd->weather->tmp_list);
- g_slist_free (pd->weather->tmp_list);
+ g_list_free (pd->weather->tmp_list);
g_free (pd->weather);
}
if (pd->calendar) {
g_free (pd->calendar);
}
- if (pd->xml)
- g_object_unref (pd->xml);
+ if (pd->xml) {
+ gtk_object_unref (GTK_OBJECT (pd->xml));
+ }
g_free (pd);
}
@@ -1013,7 +1260,7 @@ set_selected_folders (GNOME_Evolution_StorageSetView view)
{
GNOME_Evolution_FolderList *list;
CORBA_Environment ev;
- GSList *l;
+ GList *l;
int i, count;
for (count = 0, l = global_preferences->display_folders; l;
@@ -1090,8 +1337,8 @@ e_summary_preferences_make_mail_table (PropertyData *pd)
CORBA_exception_free (&ev);
widget = bonobo_widget_new_control_from_objref (control, CORBA_OBJECT_NIL);
- g_object_set_data (G_OBJECT (widget), "listener", listener);
- g_object_set_data (G_OBJECT (widget), "corba_view", view);
+ gtk_object_set_data (GTK_OBJECT (widget), "listener", listener);
+ gtk_object_set_data (GTK_OBJECT (widget), "corba_view", view);
set_selected_folders (view);
return widget;
@@ -1118,24 +1365,24 @@ add_shown_to_list (gpointer key,
gpointer data)
{
ESummaryShownModelEntry *item;
- GSList **list;
+ GList **list;
item = (ESummaryShownModelEntry *) value;
- list = (GSList **) data;
+ list = (GList **) data;
- *list = g_slist_prepend (*list, g_strdup (item->location));
+ *list = g_list_prepend (*list, g_strdup (item->location));
}
-static GSList *
+static GList *
get_folders_from_view (GtkWidget *view)
{
GNOME_Evolution_StorageSetView set_view;
GNOME_Evolution_FolderList *list;
CORBA_Environment ev;
- GSList *out_list = NULL;
+ GList *out_list = NULL;
int i;
- set_view = g_object_get_data (G_OBJECT (view), "corba_view");
+ set_view = gtk_object_get_data (GTK_OBJECT (view), "corba_view");
CORBA_exception_init (&ev);
list = GNOME_Evolution_StorageSetView__get_checkedFolders (set_view, &ev);
@@ -1155,7 +1402,7 @@ get_folders_from_view (GtkWidget *view)
f = g_new (ESummaryPrefsFolder, 1);
f->evolution_uri = g_strdup (folder.evolutionUri);
f->physical_uri = g_strdup (folder.physicalUri);
- out_list = g_slist_append (out_list, f);
+ out_list = g_list_append (out_list, f);
}
return out_list;
@@ -1171,7 +1418,7 @@ config_control_apply_cb (EvolutionConfigControl *control,
if (pd->rdf->tmp_list) {
free_str_list (pd->rdf->tmp_list);
- g_slist_free (pd->rdf->tmp_list);
+ g_list_free (pd->rdf->tmp_list);
pd->rdf->tmp_list = NULL;
}
/* Take each news feed which is on and add it
@@ -1181,7 +1428,7 @@ config_control_apply_cb (EvolutionConfigControl *control,
if (global_preferences->rdf_urls) {
free_str_list (global_preferences->rdf_urls);
- g_slist_free (global_preferences->rdf_urls);
+ g_list_free (global_preferences->rdf_urls);
}
global_preferences->rdf_urls = copy_str_list (pd->rdf->tmp_list);
@@ -1189,7 +1436,7 @@ config_control_apply_cb (EvolutionConfigControl *control,
/* Weather */
if (pd->weather->tmp_list) {
free_str_list (pd->weather->tmp_list);
- g_slist_free (pd->weather->tmp_list);
+ g_list_free (pd->weather->tmp_list);
pd->weather->tmp_list = NULL;
}
@@ -1197,22 +1444,25 @@ config_control_apply_cb (EvolutionConfigControl *control,
add_shown_to_list, &pd->weather->tmp_list);
if (global_preferences->stations) {
free_str_list (global_preferences->stations);
- g_slist_free (global_preferences->stations);
+ g_list_free (global_preferences->stations);
}
global_preferences->stations = copy_str_list (pd->weather->tmp_list);
/* Folders */
if (pd->mail->tmp_list) {
free_str_list (pd->mail->tmp_list);
- g_slist_free (pd->mail->tmp_list);
+ g_list_free (pd->mail->tmp_list);
pd->mail->tmp_list = NULL;
}
+#if 0
+ g_hash_table_foreach (pd->mail->model, maybe_add_to_shown, &pd->mail->tmp_list);
+#endif
if (global_preferences->display_folders) {
free_folder_list (global_preferences->display_folders);
- g_slist_free (global_preferences->display_folders);
+ g_list_free (global_preferences->display_folders);
}
- global_preferences->display_folders = get_folders_from_view(pd->mail->storage_set_view);
+ global_preferences->display_folders = get_folders_from_view (pd->mail->storage_set_view);
e_summary_reconfigure_all ();
}
@@ -1229,15 +1479,16 @@ config_control_destroy_cb (EvolutionConfigControl *config_control,
free_property_dialog (pd);
}
-BonoboObject *
-e_summary_preferences_create_control (void)
+static BonoboObject *
+factory_fn (BonoboGenericFactory *generic_factory,
+ void *data)
{
PropertyData *pd;
GtkWidget *widget;
pd = g_new0 (PropertyData, 1);
- pd->xml = glade_xml_new (EVOLUTION_GLADEDIR "/my-evolution.glade", NULL, NULL);
+ pd->xml = glade_xml_new (EVOLUTION_GLADEDIR "/my-evolution.glade", NULL);
g_return_val_if_fail (pd->xml != NULL, NULL);
widget = glade_xml_get_widget (pd->xml, "notebook");
@@ -1250,20 +1501,26 @@ e_summary_preferences_create_control (void)
gtk_widget_ref (widget);
gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_widget_show_all (widget);
+ gtk_widget_show (widget);
pd->config_control = evolution_config_control_new (widget);
gtk_widget_unref (widget);
- g_signal_connect (pd->config_control, "apply", G_CALLBACK (config_control_apply_cb), pd);
- g_signal_connect (pd->config_control, "destroy", G_CALLBACK (config_control_destroy_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (pd->config_control), "apply",
+ GTK_SIGNAL_FUNC (config_control_apply_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (pd->config_control), "destroy",
+ GTK_SIGNAL_FUNC (config_control_destroy_cb), pd);
return BONOBO_OBJECT (pd->config_control);
}
-/* FIXME this kinda sucks. */
-void
-e_summary_preferences_init_control (GNOME_Evolution_Shell corba_shell)
+gboolean
+e_summary_preferences_register_config_control_factory (GNOME_Evolution_Shell corba_shell)
{
+ if (bonobo_generic_factory_new (FACTORY_ID, factory_fn, NULL) == NULL)
+ return FALSE;
+
global_shell = corba_shell;
+
+ return TRUE;
}