aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/dialogs
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-12-14 05:05:32 +0800
committerMatthew Barnes <mbarnes@redhat.com>2012-06-03 11:00:40 +0800
commit68c35c4bedc4cd36cf2396121921f2e781b631fb (patch)
tree3a705b4c5776881d1d3899de674fdacea2440133 /calendar/gui/dialogs
parentebed1366e5d62a4fd0912abe2c725f31e8901444 (diff)
downloadgsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar
gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.gz
gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.bz2
gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.lz
gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.xz
gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.zst
gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.zip
Adapt calendar/gui to the new ESource API.
Diffstat (limited to 'calendar/gui/dialogs')
-rw-r--r--calendar/gui/dialogs/Makefile.am3
-rw-r--r--calendar/gui/dialogs/alarm-dialog.c7
-rw-r--r--calendar/gui/dialogs/alarm-dialog.h2
-rw-r--r--calendar/gui/dialogs/alarm-list-dialog.c13
-rw-r--r--calendar/gui/dialogs/alarm-list-dialog.h5
-rw-r--r--calendar/gui/dialogs/calendar-setup.c717
-rw-r--r--calendar/gui/dialogs/calendar-setup.h44
-rw-r--r--calendar/gui/dialogs/comp-editor.c36
-rw-r--r--calendar/gui/dialogs/copy-source-dialog.c7
-rw-r--r--calendar/gui/dialogs/copy-source-dialog.h3
-rw-r--r--calendar/gui/dialogs/e-delegate-dialog.c11
-rw-r--r--calendar/gui/dialogs/e-delegate-dialog.h5
-rw-r--r--calendar/gui/dialogs/e-send-options-utils.c60
-rw-r--r--calendar/gui/dialogs/e-send-options-utils.h2
-rw-r--r--calendar/gui/dialogs/event-editor.c19
-rw-r--r--calendar/gui/dialogs/event-page.c147
-rw-r--r--calendar/gui/dialogs/event-page.ui2
-rw-r--r--calendar/gui/dialogs/memo-page.c148
-rw-r--r--calendar/gui/dialogs/memo-page.ui2
-rw-r--r--calendar/gui/dialogs/select-source-dialog.c52
-rw-r--r--calendar/gui/dialogs/select-source-dialog.h3
-rw-r--r--calendar/gui/dialogs/task-editor.c135
-rw-r--r--calendar/gui/dialogs/task-page.c146
-rw-r--r--calendar/gui/dialogs/task-page.ui4
24 files changed, 428 insertions, 1145 deletions
diff --git a/calendar/gui/dialogs/Makefile.am b/calendar/gui/dialogs/Makefile.am
index b7235ede2a..02af20b87b 100644
--- a/calendar/gui/dialogs/Makefile.am
+++ b/calendar/gui/dialogs/Makefile.am
@@ -24,7 +24,6 @@ ecalendarinclude_HEADERS = \
comp-editor.h \
alarm-dialog.h \
alarm-list-dialog.h \
- calendar-setup.h \
cancel-comp.h \
changed-comp.h \
comp-editor-util.h \
@@ -59,8 +58,6 @@ libcal_dialogs_la_SOURCES = \
alarm-dialog.h \
alarm-list-dialog.c \
alarm-list-dialog.h \
- calendar-setup.c \
- calendar-setup.h \
cancel-comp.c \
cancel-comp.h \
changed-comp.c \
diff --git a/calendar/gui/dialogs/alarm-dialog.c b/calendar/gui/dialogs/alarm-dialog.c
index 065d11b9b5..c8670d2500 100644
--- a/calendar/gui/dialogs/alarm-dialog.c
+++ b/calendar/gui/dialogs/alarm-dialog.c
@@ -53,6 +53,8 @@ typedef struct {
/* The client */
ECalClient *cal_client;
+ ESourceRegistry *registry;
+
/* Toplevel */
GtkWidget *toplevel;
@@ -911,7 +913,7 @@ setup_select_names (Dialog *dialog)
ENameSelectorModel *name_selector_model;
ENameSelectorDialog *name_selector_dialog;
- dialog->name_selector = e_name_selector_new ();
+ dialog->name_selector = e_name_selector_new (dialog->registry);
e_name_selector_load_books (dialog->name_selector);
name_selector_model = e_name_selector_peek_model (dialog->name_selector);
@@ -1216,6 +1218,7 @@ init_widgets (Dialog *dialog)
gboolean
alarm_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
ECalComponentAlarm *alarm)
{
@@ -1223,10 +1226,12 @@ alarm_dialog_run (GtkWidget *parent,
GtkWidget *container;
gint response_id;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
g_return_val_if_fail (alarm != NULL, FALSE);
dialog.alarm = alarm;
dialog.cal_client = cal_client;
+ dialog.registry = registry;
dialog.builder = gtk_builder_new ();
e_load_ui_builder_definition (dialog.builder, "alarm-dialog.ui");
diff --git a/calendar/gui/dialogs/alarm-dialog.h b/calendar/gui/dialogs/alarm-dialog.h
index 42c72d685a..6e6d65827c 100644
--- a/calendar/gui/dialogs/alarm-dialog.h
+++ b/calendar/gui/dialogs/alarm-dialog.h
@@ -32,10 +32,12 @@
#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
+#include <libedataserver/e-source-registry.h>
G_BEGIN_DECLS
gboolean alarm_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
ECalComponentAlarm *alarm);
diff --git a/calendar/gui/dialogs/alarm-list-dialog.c b/calendar/gui/dialogs/alarm-list-dialog.c
index 997f85a664..5c318c0a90 100644
--- a/calendar/gui/dialogs/alarm-list-dialog.c
+++ b/calendar/gui/dialogs/alarm-list-dialog.c
@@ -43,6 +43,7 @@
typedef struct {
GtkBuilder *builder;
+ ESourceRegistry *registry;
/* The client */
ECalClient *cal_client;
@@ -126,7 +127,7 @@ add_clicked_cb (GtkButton *button,
icalproperty_set_x_name (icalprop, "X-EVOLUTION-NEEDS-DESCRIPTION");
icalcomponent_add_property (icalcomp, icalprop);
- if (alarm_dialog_run (dialog->toplevel, dialog->cal_client, alarm)) {
+ if (alarm_dialog_run (dialog->toplevel, dialog->registry, dialog->cal_client, alarm)) {
e_alarm_list_append (dialog->list_store, &iter, alarm);
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter);
} else {
@@ -159,7 +160,7 @@ edit_clicked_cb (GtkButton *button,
alarm = (ECalComponentAlarm *) e_alarm_list_get_alarm (dialog->list_store, &iter);
path = gtk_tree_model_get_path (GTK_TREE_MODEL (dialog->list_store), &iter);
- if (alarm_dialog_run (dialog->toplevel, dialog->cal_client, alarm)) {
+ if (alarm_dialog_run (dialog->toplevel, dialog->registry, dialog->cal_client, alarm)) {
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter);
gtk_tree_model_row_changed (GTK_TREE_MODEL (dialog->list_store), path, &iter);
}
@@ -265,6 +266,7 @@ init_widgets (Dialog *dialog)
gboolean
alarm_list_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
EAlarmList *list_store)
{
@@ -272,6 +274,9 @@ alarm_list_dialog_run (GtkWidget *parent,
GtkWidget *container;
gint response_id;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+
+ dialog.registry = registry;
dialog.cal_client = cal_client;
dialog.list_store = list_store;
@@ -312,12 +317,14 @@ alarm_list_dialog_run (GtkWidget *parent,
}
GtkWidget *
-alarm_list_dialog_peek (ECalClient *cal_client,
+alarm_list_dialog_peek (ESourceRegistry *registry,
+ ECalClient *cal_client,
EAlarmList *list_store)
{
Dialog *dialog;
dialog = (Dialog *) g_new (Dialog, 1);
+ dialog->registry = registry;
dialog->cal_client = cal_client;
dialog->list_store = list_store;
diff --git a/calendar/gui/dialogs/alarm-list-dialog.h b/calendar/gui/dialogs/alarm-list-dialog.h
index 5746664c1f..1717d12f22 100644
--- a/calendar/gui/dialogs/alarm-list-dialog.h
+++ b/calendar/gui/dialogs/alarm-list-dialog.h
@@ -32,14 +32,17 @@
#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
+#include <libedataserver/e-source-registry.h>
#include "../e-alarm-list.h"
G_BEGIN_DECLS
gboolean alarm_list_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
EAlarmList *list_store);
-GtkWidget * alarm_list_dialog_peek (ECalClient *cal_client,
+GtkWidget * alarm_list_dialog_peek (ESourceRegistry *registry,
+ ECalClient *cal_client,
EAlarmList *list_store);
void alarm_list_dialog_set_client (GtkWidget *dlg_box,
ECalClient *cal_client);
diff --git a/calendar/gui/dialogs/calendar-setup.c b/calendar/gui/dialogs/calendar-setup.c
deleted file mode 100644
index 0d0da2244a..0000000000
--- a/calendar/gui/dialogs/calendar-setup.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * David Trowbridge <trowbrds@cs.colorado.edu>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <gtk/gtk.h>
-
-#include <libedataserver/e-source.h>
-#include <libedataserver/e-source-list.h>
-#include <shell/e-shell.h>
-#include <glib/gi18n.h>
-#include <libecal/e-cal-client.h>
-#include "calendar-setup.h"
-#include "../e-cal-config.h"
-
-typedef struct _CalendarSourceDialog CalendarSourceDialog;
-
-struct _CalendarSourceDialog {
- ECalConfig *config; /* the config manager */
-
- GtkWidget *window;
-
- /* Source selection (creation only) */
- ESourceList *source_list;
- GSList *menu_source_groups;
- GtkWidget *group_optionmenu;
-
- /* ESource we're currently editing */
- ESource *source;
- /* The original source in edit mode. Also used to flag when we are in edit mode. */
- ESource *original_source;
-
- /* Source group we're creating/editing a source in */
- ESourceGroup *source_group;
- ECalClientSourceType source_type;
-};
-
-static gboolean
-eccp_check_complete (EConfig *ec,
- const gchar *pageid,
- gpointer data)
-{
- CalendarSourceDialog *sdialog = data;
- gboolean valid = TRUE;
- const gchar *tmp;
- ESource *source;
-
- tmp = e_source_get_display_name (sdialog->source);
- valid = tmp && tmp[0] && ((source = e_source_group_peek_source_by_name (sdialog->source_group, tmp)) == NULL || source == sdialog->original_source);
-
- return valid;
-}
-
-static void
-eccp_commit (EConfig *ec,
- CalendarSourceDialog *sdialog)
-{
- xmlNodePtr xml;
- GtkWindow *window;
-
- if (sdialog->original_source) {
- const gchar *color_spec;
-
- xml = xmlNewNode (NULL, (const guchar *)"dummy");
- e_source_dump_to_xml_node (sdialog->source, xml);
- e_source_update_from_xml_node (sdialog->original_source, xml->children, NULL);
- xmlFreeNode (xml);
-
- color_spec = e_source_peek_color_spec (sdialog->source);
- if (color_spec != NULL)
- e_source_set_color_spec (sdialog->original_source, color_spec);
- } else {
- e_source_group_add_source (sdialog->source_group, sdialog->source, -1);
- e_source_list_sync (sdialog->source_list, NULL);
- }
-
- window = e_shell_get_active_window (e_shell_get_default ());
- if (window)
- gtk_widget_queue_draw (GTK_WIDGET (window));
-}
-
-static void
-eccp_free (EConfig *ec,
- GSList *items,
- gpointer data)
-{
- CalendarSourceDialog *sdialog = data;
-
- g_slist_free (items);
-
- g_object_unref (sdialog->source);
- if (sdialog->original_source)
- g_object_unref (sdialog->original_source);
- if (sdialog->source_list)
- g_object_unref (sdialog->source_list);
- g_slist_free (sdialog->menu_source_groups);
- g_free (sdialog);
-}
-
-static void
-eccp_type_changed (GtkComboBox *dropdown,
- CalendarSourceDialog *sdialog)
-{
- gint id = gtk_combo_box_get_active (dropdown);
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- model = gtk_combo_box_get_model (dropdown);
- if (id == -1 || !gtk_tree_model_iter_nth_child (model, &iter, NULL, id))
- return;
-
- /* TODO: when we change the group type, we lose all of the pre-filled dialog info */
-
- gtk_tree_model_get (model, &iter, 1, &sdialog->source_group, -1);
- /* HACK: doesn't work if you don't do this */
- e_source_set_absolute_uri (sdialog->source, NULL);
- e_source_set_group (sdialog->source, sdialog->source_group);
-
- e_source_set_relative_uri (sdialog->source, "");
-
- e_config_target_changed ((EConfig *) sdialog->config, E_CONFIG_TARGET_CHANGED_REBUILD);
-}
-
-static GtkWidget *
-eccp_get_source_type (EConfig *ec,
- EConfigItem *item,
- GtkWidget *parent,
- GtkWidget *old,
- gint position,
- gpointer data)
-{
- static GtkWidget *label, *type;
- guint row;
- CalendarSourceDialog *sdialog = data;
- ECalConfigTargetSource *t = (ECalConfigTargetSource *) ec->target;
- ESource *source = t->source;
- ESourceGroup *group = e_source_peek_group (source);
- gchar *markup;
-
- if (old)
- gtk_widget_destroy (label);
-
- g_object_get (parent, "n-rows", &row, NULL);
-
- if (sdialog->original_source) {
- label = gtk_label_new (_("Type:"));
-
- type = gtk_label_new ("");
- gtk_widget_show (type);
- markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", e_source_group_peek_name (group));
- gtk_label_set_markup (GTK_LABEL (type), markup);
- gtk_misc_set_alignment (GTK_MISC (type), 0.0, 0.5);
- g_free (markup);
- gtk_table_attach (GTK_TABLE (parent), type, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- } else {
- GtkCellRenderer *cell;
- GtkListStore *store;
- GtkTreeIter iter;
- GSList *l;
- gint active = 0, i = 0;
-
- label = gtk_label_new_with_mnemonic(_("_Type:"));
-
- type = gtk_combo_box_new ();
- cell = gtk_cell_renderer_text_new ();
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
- for (l = sdialog->menu_source_groups; l; l = g_slist_next (l)) {
- /* Reuse previously defined *group here? */
- ESourceGroup *group = l->data;
- gchar *create_source = e_source_group_get_property (group, "create_source");
-
- if ( !(create_source && !strcmp (create_source, "no"))) {
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, e_source_group_peek_name (group), 1, group, -1);
- if (!strcmp (e_source_group_peek_uid (sdialog->source_group), e_source_group_peek_uid (group)))
- active = i;
- i++;
- }
- g_free (create_source);
- }
-
- gtk_cell_layout_pack_start ((GtkCellLayout *) type, cell, TRUE);
- gtk_cell_layout_set_attributes ((GtkCellLayout *) type, cell, "text", 0, NULL);
- gtk_combo_box_set_model ((GtkComboBox *) type, (GtkTreeModel *) store);
- gtk_combo_box_set_active ((GtkComboBox *) type, active);
- g_signal_connect (
- type, "changed",
- G_CALLBACK (eccp_type_changed), sdialog);
- gtk_widget_show (type);
- gtk_table_attach (GTK_TABLE (parent), type, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), type);
- }
-
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
-
- return type;
-}
-
-static void
-name_changed (GtkEntry *entry,
- ECalConfigTargetSource *t)
-{
- ESource *source = t->source;
- ESourceGroup *group;
- gboolean is_birthdays = FALSE;
- gboolean changed;
- const gchar *name;
-
- name = gtk_entry_get_text (GTK_ENTRY (entry));
-
- changed = g_strcmp0 (name, e_source_get_display_name (source)) != 0;
- e_source_set_name (source, name);
-
- group = e_source_peek_group (source);
- is_birthdays = group && g_strcmp0 (e_source_group_peek_base_uri (group), "contacts://") == 0;
-
- if (changed && (g_strcmp0 ("system", e_source_peek_relative_uri (source)) == 0 || is_birthdays))
- e_source_set_property (source, "name-changed", "true");
-}
-
-static GtkWidget *
-eccp_get_source_name (EConfig *ec,
- EConfigItem *item,
- GtkWidget *parent,
- GtkWidget *old,
- gint position,
- gpointer data)
-{
- static GtkWidget *label, *entry;
- guint row;
- ECalConfigTargetSource *t = (ECalConfigTargetSource *) ec->target;
- ESource *source = t->source;
-
- if (old)
- gtk_widget_destroy (label);
-
- g_object_get (parent, "n-rows", &row, NULL);
-
- label = gtk_label_new_with_mnemonic (_("_Name:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
-
- entry = gtk_entry_new ();
- gtk_widget_show (entry);
- gtk_table_attach (GTK_TABLE (parent), entry, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
- g_signal_connect (
- entry, "changed",
- G_CALLBACK (name_changed), (gpointer) t);
-
- if (source)
- gtk_entry_set_text (GTK_ENTRY (entry), e_source_get_display_name (source));
-
- return entry;
-}
-
-static void
-offline_status_changed_cb (GtkWidget *widget,
- CalendarSourceDialog *sdialog)
-{
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
- e_source_set_property (sdialog->source, "offline_sync", "1");
- else
- e_source_set_property (sdialog->source, "offline_sync", "0");
-
-}
-
-static GtkWidget *
-eccp_general_offline (EConfig *ec,
- EConfigItem *item,
- GtkWidget *parent,
- GtkWidget *old,
- gint position,
- gpointer data)
-{
- CalendarSourceDialog *sdialog = data;
- GtkWidget *offline_setting = NULL;
- const gchar *offline_sync;
- guint row;
- const gchar *base_uri = e_source_group_peek_base_uri (sdialog->source_group);
- gboolean is_local = base_uri && (g_str_has_prefix (base_uri, "local:") || g_str_has_prefix (base_uri, "contacts://"));
- offline_sync = e_source_get_property (sdialog->source, "offline_sync");
- if (old)
- return old;
- else {
- g_object_get (parent, "n-rows", &row, NULL);
-
- if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
- offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y calendar contents locally for offline operation"));
- else if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
- offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y task list contents locally for offline operation"));
- else if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
- offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y memo list contents locally for offline operation"));
-
- gtk_widget_show (offline_setting);
- g_signal_connect (
- offline_setting, "toggled",
- G_CALLBACK (offline_status_changed_cb), sdialog);
- gtk_table_attach (GTK_TABLE (parent), offline_setting, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- }
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (offline_setting), (offline_sync && g_str_equal (offline_sync, "1")) ? TRUE : FALSE);
- if (is_local)
- gtk_widget_hide (offline_setting);
- return offline_setting;
-}
-
-static void
-alarm_status_changed_cb (GtkWidget *widget,
- CalendarSourceDialog *sdialog)
-{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
- e_source_set_property (sdialog->source, "alarm", "true");
- else
- e_source_set_property (sdialog->source, "alarm", "false");
-}
-
-static GtkWidget *
-eccp_notify_reminders (EConfig *ec,
- EConfigItem *item,
- GtkWidget *parent,
- GtkWidget *old,
- gint position,
- gpointer data)
-{
- CalendarSourceDialog *sdialog = data;
- GtkWidget *reminder_setting = NULL;
- guint row;
- const gchar *alarm;
-
- if (old)
- return old;
-
- alarm = e_source_get_property (sdialog->source, "alarm");
- if (alarm && !g_ascii_strcasecmp (alarm, "never"))
- return NULL;
-
- g_object_get (parent, "n-rows", &row, NULL);
-
- reminder_setting = gtk_check_button_new_with_mnemonic (_("Sh_ow reminder notifications"));
-
- gtk_widget_show (reminder_setting);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (reminder_setting), alarm && g_str_equal (alarm, "true"));
- g_signal_connect (
- reminder_setting, "toggled",
- G_CALLBACK (alarm_status_changed_cb), sdialog);
- gtk_table_attach (GTK_TABLE (parent), reminder_setting, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- return reminder_setting;
-}
-
-static void
-color_changed (GtkColorButton *color_button,
- ECalConfigTargetSource *target)
-{
- ESource *source = target->source;
- gchar color_spec[16];
- GdkColor color;
-
- gtk_color_button_get_color (color_button, &color);
- g_snprintf (
- color_spec, sizeof (color_spec), "#%04x%04x%04x",
- color.red, color.green, color.blue);
- e_source_set_color_spec (source, color_spec);
-}
-
-static const gchar *
-choose_initial_color (void)
-{
- static const gchar *colors[] = {
- "#BECEDD", /* 190 206 221 Blue */
- "#E2F0EF", /* 226 240 239 Light Blue */
- "#C6E2B7", /* 198 226 183 Green */
- "#E2F0D3", /* 226 240 211 Light Green */
- "#E2D4B7", /* 226 212 183 Khaki */
- "#EAEAC1", /* 234 234 193 Light Khaki */
- "#F0B8B7", /* 240 184 183 Pink */
- "#FED4D3", /* 254 212 211 Light Pink */
- "#E2C6E1", /* 226 198 225 Purple */
- "#F0E2EF" /* 240 226 239 Light Purple */
- };
-
- return colors[g_random_int_range (0, G_N_ELEMENTS (colors))];
-}
-
-static GtkWidget *
-eccp_get_source_color (EConfig *ec,
- EConfigItem *item,
- GtkWidget *parent,
- GtkWidget *old,
- gint position,
- gpointer data)
-{
- CalendarSourceDialog *sdialog = data;
- static GtkWidget *label, *color_button;
- guint row;
- const gchar *color_spec = NULL;
- GdkColor color;
-
- g_object_get (parent, "n-rows", &row, NULL);
-
- if (old)
- gtk_widget_destroy (label);
-
- if (sdialog->original_source)
- color_spec = e_source_peek_color_spec (sdialog->original_source);
-
- if (color_spec == NULL) {
- color_spec = choose_initial_color ();
- e_source_set_color_spec (sdialog->source, color_spec);
- }
-
- if (!gdk_color_parse (color_spec, &color))
- g_warning ("Unknown color \"%s\" in calendar \"%s\"",
- color_spec, e_source_get_display_name (sdialog->source));
-
- label = gtk_label_new_with_mnemonic (_("Colo_r:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_table_attach (
- GTK_TABLE (parent), label,
- 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
- gtk_widget_show (label);
-
- color_button = gtk_color_button_new_with_color (&color);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), color_button);
- gtk_table_attach (
- GTK_TABLE (parent), color_button,
- 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_widget_show (color_button);
-
- g_signal_connect (
- G_OBJECT (color_button), "color-set",
- G_CALLBACK (color_changed), ec->target);
-
- return color_button;
-}
-
-static ECalConfigItem eccp_items[] = {
- { E_CONFIG_BOOK, (gchar *) "", NULL },
- { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) N_("General") },
- { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.source", (gchar *) N_("Calendar") },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/00.type", NULL, eccp_get_source_type },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/10.name", NULL, eccp_get_source_name },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/20.color", NULL, eccp_get_source_color },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/30.offline", NULL, eccp_general_offline },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/31.alarm", NULL, eccp_notify_reminders },
- { 0 },
-};
-
-static ECalConfigItem ectp_items[] = {
- { E_CONFIG_BOOK, (gchar *) "", NULL },
- { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) N_("General") },
- { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.source", (gchar *) N_("Task List") },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/00.type", NULL, eccp_get_source_type },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/10.name", NULL, eccp_get_source_name },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/20.color", NULL, eccp_get_source_color },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/30.offline", NULL, eccp_general_offline },
- { 0 },
-};
-
-static ECalConfigItem ecmp_items[] = {
- { E_CONFIG_BOOK, (gchar *) "", NULL },
- { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) N_("General") },
- { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.source", (gchar *) N_("Memo List") },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/00.type", NULL, eccp_get_source_type },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/10.name", NULL, eccp_get_source_name },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/20.color", NULL, eccp_get_source_color },
- { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/30.offline", NULL, eccp_general_offline },
- { 0 },
-};
-
-/**
- * cs_load_sources:
- * @sdialog: dialog where to load sources list
- * @conf_key: configuration key where to get sources' list
- * @group: can be NULL
- *
- * Loads list of sources from @conf_key.
- */
-
-static void
-cs_load_sources (CalendarSourceDialog *sdialog,
- const gchar *conf_key,
- ESourceGroup *group)
-{
- GConfClient *gconf;
-
- g_return_if_fail (sdialog != NULL && conf_key != NULL);
-
- sdialog->source = e_source_new ("", "");
- gconf = gconf_client_get_default ();
- sdialog->source_list = e_source_list_new_for_gconf (gconf, conf_key);
- sdialog->menu_source_groups = g_slist_copy (e_source_list_peek_groups (sdialog->source_list));
- sdialog->source_group = (ESourceGroup *) sdialog->menu_source_groups->data;
-
- g_object_unref (gconf);
-
- if (group)
- sdialog->source_group = (ESourceGroup *) group;
-}
-
-/**
- * calendar_setup_edit_calendar:
- * @parent: parent window for dialog (current unused)
- * @source: the ESource corresponding to the calendar
- *
- * Show calendar properties for @source.
- **/
-void
-calendar_setup_edit_calendar (GtkWindow *parent,
- ESource *source,
- ESourceGroup *group)
-{
- CalendarSourceDialog *sdialog = g_new0 (CalendarSourceDialog, 1);
- gchar *xml;
- ECalConfig *ec;
- gint i;
- GSList *items = NULL;
- ECalConfigTargetSource *target;
-
- if (source) {
- const gchar *color_spec;
-
- sdialog->original_source = source;
- g_object_ref (source);
- sdialog->source_group = e_source_peek_group (source);
- xml = e_source_to_standalone_xml (source);
- sdialog->source = e_source_new_from_standalone_xml (xml);
- g_free (xml);
-
- color_spec = e_source_peek_color_spec (source);
- if (color_spec != NULL)
- e_source_set_color_spec (sdialog->source, color_spec);
- } else {
- cs_load_sources (sdialog, "/apps/evolution/calendar/sources", group);
- }
-
- /* HACK: doesn't work if you don't do this */
- e_source_set_absolute_uri (sdialog->source, NULL);
- e_source_set_group (sdialog->source, sdialog->source_group);
-
- sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_EVENTS;
- sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties");
- for (i = 0; eccp_items[i].path; i++)
- items = g_slist_prepend (items, &eccp_items[i]);
- e_config_add_items ((EConfig *) ec, items, eccp_free, sdialog);
- e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog);
- g_signal_connect_after (
- ec, "commit",
- G_CALLBACK (eccp_commit), sdialog);
-
- target = e_cal_config_target_new_source (ec, sdialog->source);
- target->source_type = E_CAL_CLIENT_SOURCE_TYPE_EVENTS;
- e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
-
- sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Calendar Properties") : _("New Calendar"));
-
- /* forces initial validation */
- if (!sdialog->original_source)
- e_config_target_changed ((EConfig *) ec, E_CONFIG_TARGET_CHANGED_STATE);
-
- return;
-}
-
-void
-calendar_setup_new_calendar (GtkWindow *parent)
-{
- calendar_setup_edit_calendar (parent, NULL, NULL);
-}
-
-void
-calendar_setup_edit_task_list (GtkWindow *parent,
- ESource *source)
-{
- CalendarSourceDialog *sdialog = g_new0 (CalendarSourceDialog, 1);
- gchar *xml;
- ECalConfig *ec;
- gint i;
- GSList *items = NULL;
- ECalConfigTargetSource *target;
-
- if (source) {
- const gchar *color_spec;
-
- sdialog->original_source = source;
- g_object_ref (source);
- sdialog->source_group = e_source_peek_group (source);
- xml = e_source_to_standalone_xml (source);
- sdialog->source = e_source_new_from_standalone_xml (xml);
- g_free (xml);
-
- color_spec = e_source_peek_color_spec (source);
- e_source_set_color_spec (sdialog->source, color_spec);
- } else {
- cs_load_sources (sdialog, "/apps/evolution/tasks/sources", NULL);
- }
-
- /* HACK: doesn't work if you don't do this */
- e_source_set_absolute_uri (sdialog->source, NULL);
- e_source_set_group (sdialog->source, sdialog->source_group);
-
- sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_TASKS;
- sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties");
- for (i = 0; ectp_items[i].path; i++)
- items = g_slist_prepend (items, &ectp_items[i]);
- e_config_add_items ((EConfig *) ec, items, eccp_free, sdialog);
- e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog);
- g_signal_connect_after (
- ec, "commit",
- G_CALLBACK (eccp_commit), sdialog);
-
- target = e_cal_config_target_new_source (ec, sdialog->source);
- target->source_type = E_CAL_CLIENT_SOURCE_TYPE_TASKS;
- e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
-
- sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Task List Properties") : _("New Task List"));
-
- /* forces initial validation */
- if (!sdialog->original_source)
- e_config_target_changed ((EConfig *) ec, E_CONFIG_TARGET_CHANGED_STATE);
-
- return;
-}
-
-void
-calendar_setup_new_task_list (GtkWindow *parent)
-{
- calendar_setup_edit_task_list (parent, NULL);
-}
-
-void
-calendar_setup_edit_memo_list (GtkWindow *parent,
- ESource *source)
-{
- CalendarSourceDialog *sdialog = g_new0 (CalendarSourceDialog, 1);
- gchar *xml;
- ECalConfig *ec;
- gint i;
- GSList *items = NULL;
- ECalConfigTargetSource *target;
-
- if (source) {
- const gchar *color_spec;
-
- sdialog->original_source = source;
- g_object_ref (source);
- sdialog->source_group = e_source_peek_group (source);
- xml = e_source_to_standalone_xml (source);
- sdialog->source = e_source_new_from_standalone_xml (xml);
- g_free (xml);
-
- color_spec = e_source_peek_color_spec (source);
- e_source_set_color_spec (sdialog->source, color_spec);
- } else {
- cs_load_sources (sdialog, "/apps/evolution/memos/sources", NULL);
- }
-
- /* HACK: doesn't work if you don't do this */
- e_source_set_absolute_uri (sdialog->source, NULL);
- e_source_set_group (sdialog->source, sdialog->source_group);
-
- sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS;
- sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties");
- for (i = 0; ecmp_items[i].path; i++)
- items = g_slist_prepend (items, &ecmp_items[i]);
- e_config_add_items ((EConfig *) ec, items, eccp_free, sdialog);
- e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog);
- g_signal_connect_after (
- ec, "commit",
- G_CALLBACK (eccp_commit), sdialog);
-
- target = e_cal_config_target_new_source (ec, sdialog->source);
- target->source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS;
- e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
-
- sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Memo List Properties") : _("New Memo List"));
-
- /* forces initial validation */
- if (!sdialog->original_source)
- e_config_target_changed ((EConfig *) ec, E_CONFIG_TARGET_CHANGED_STATE);
-
- return;
-}
-
-void
-calendar_setup_new_memo_list (GtkWindow *parent)
-{
- calendar_setup_edit_memo_list (parent, NULL);
-}
diff --git a/calendar/gui/dialogs/calendar-setup.h b/calendar/gui/dialogs/calendar-setup.h
deleted file mode 100644
index 18dc042848..0000000000
--- a/calendar/gui/dialogs/calendar-setup.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * David Trowbridge <trowbrds@cs.colorado.edu>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifndef __CALENDAR_SETUP_H__
-#define __CALENDAR_SETUP_H__
-
-#include <gtk/gtk.h>
-#include <libedataserver/e-source.h>
-#include <libedataserver/e-source-group.h>
-
-G_BEGIN_DECLS
-
-void calendar_setup_edit_calendar (GtkWindow *parent, ESource *source, ESourceGroup *group);
-void calendar_setup_new_calendar (GtkWindow *parent);
-
-void calendar_setup_edit_task_list (GtkWindow *parent, ESource *source);
-void calendar_setup_new_task_list (GtkWindow *parent);
-
-void calendar_setup_edit_memo_list (GtkWindow *parent, ESource *source);
-void calendar_setup_new_memo_list (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* __CALENDAR_SETUP_H__ */
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
index 55a602c8dc..5e447e76c4 100644
--- a/calendar/gui/dialogs/comp-editor.c
+++ b/calendar/gui/dialogs/comp-editor.c
@@ -481,6 +481,8 @@ save_comp (CompEditor *editor)
CompEditorPrivate *priv;
CompEditorFlags flags;
ECalComponent *clone;
+ ESourceRegistry *registry;
+ EShell *shell;
GList *l;
gboolean result;
GError *error = NULL;
@@ -495,6 +497,9 @@ save_comp (CompEditor *editor)
return TRUE;
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Stop listening because we are about to change things */
if (priv->view) {
@@ -528,8 +533,8 @@ save_comp (CompEditor *editor)
/* If we are not the organizer, we don't update the sequence number */
if (!e_cal_component_has_organizer (clone) ||
- itip_organizer_is_user (clone, priv->cal_client) ||
- itip_sentby_is_user (clone, priv->cal_client))
+ itip_organizer_is_user (registry, clone, priv->cal_client) ||
+ itip_sentby_is_user (registry, clone, priv->cal_client))
e_cal_component_commit_sequence (clone);
else
e_cal_component_abort_sequence (clone);
@@ -583,8 +588,8 @@ save_comp (CompEditor *editor)
if (priv->mod == CALOBJ_MOD_THIS) {
if (result && ((flags & COMP_EDITOR_DELEGATE) ||
!e_cal_component_has_organizer (clone) ||
- itip_organizer_is_user (clone, priv->cal_client) ||
- itip_sentby_is_user (clone, priv->cal_client)))
+ itip_organizer_is_user (registry, clone, priv->cal_client) ||
+ itip_sentby_is_user (registry, clone, priv->cal_client)))
e_cal_component_commit_sequence (clone);
else
e_cal_component_abort_sequence (clone);
@@ -681,6 +686,8 @@ save_comp_with_send (CompEditor *editor)
{
CompEditorPrivate *priv;
CompEditorFlags flags;
+ ESourceRegistry *registry;
+ EShell *shell;
gboolean send, delegated, only_new_attendees = FALSE;
gboolean delegate;
gboolean strip_alarms = TRUE;
@@ -688,6 +695,10 @@ save_comp_with_send (CompEditor *editor)
priv = editor->priv;
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
+
send = priv->changed && priv->needs_send;
delegate = flags & COMP_EDITOR_DELEGATE;
@@ -717,8 +728,8 @@ save_comp_with_send (CompEditor *editor)
(only_new_attendees ?
COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY : 0));
- if ((itip_organizer_is_user (priv->comp, priv->cal_client) ||
- itip_sentby_is_user (priv->comp, priv->cal_client))) {
+ if ((itip_organizer_is_user (registry, priv->comp, priv->cal_client) ||
+ itip_sentby_is_user (registry, priv->comp, priv->cal_client))) {
if (e_cal_component_get_vtype (priv->comp) == E_CAL_COMPONENT_JOURNAL)
return comp_editor_send_comp (
editor, E_CAL_COMPONENT_METHOD_PUBLISH,
@@ -1359,6 +1370,7 @@ static void
comp_editor_set_shell (CompEditor *editor,
EShell *shell)
{
+ g_return_if_fail (E_IS_SHELL (shell));
g_return_if_fail (editor->priv->shell == NULL);
editor->priv->shell = shell;
@@ -3257,6 +3269,8 @@ real_send_comp (CompEditor *editor,
{
CompEditorPrivate *priv;
CompEditorFlags flags;
+ EShell *shell;
+ ESourceRegistry *registry;
ECalComponent *send_comp = NULL;
gchar *address = NULL;
GSList *users = NULL;
@@ -3266,6 +3280,9 @@ real_send_comp (CompEditor *editor,
priv = editor->priv;
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
if (priv->mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (priv->comp)) {
/* Ensure we send the master object, not the instance only */
@@ -3294,7 +3311,8 @@ real_send_comp (CompEditor *editor,
/* The user updates the delegated status to the Organizer,
* so remove all other attendees. */
if (flags & COMP_EDITOR_DELEGATE) {
- address = itip_get_comp_attendee (send_comp, priv->cal_client);
+ address = itip_get_comp_attendee (
+ registry, send_comp, priv->cal_client);
if (address)
set_attendees_for_delegation (send_comp, address, method);
@@ -3304,7 +3322,7 @@ real_send_comp (CompEditor *editor,
e_client_check_capability (E_CLIENT (priv->cal_client),
CAL_STATIC_CAPABILITY_CREATE_MESSAGES)) {
if (itip_send_comp (
- method, send_comp, priv->cal_client,
+ registry, method, send_comp, priv->cal_client,
NULL, NULL, users, strip_alarms,
priv->flags & COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY)) {
g_object_unref (send_comp);
@@ -3334,7 +3352,7 @@ real_send_comp (CompEditor *editor,
}
if (itip_send_comp (
- method, send_comp, priv->cal_client,
+ registry, method, send_comp, priv->cal_client,
NULL, mime_attach_list, users, strip_alarms,
priv->flags & COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY)) {
gboolean saved = save_comp (editor);
diff --git a/calendar/gui/dialogs/copy-source-dialog.c b/calendar/gui/dialogs/copy-source-dialog.c
index cfc8521927..21b86087fb 100644
--- a/calendar/gui/dialogs/copy-source-dialog.c
+++ b/calendar/gui/dialogs/copy-source-dialog.c
@@ -198,7 +198,6 @@ orig_source_opened_cb (GObject *source_object,
e_client_utils_open_new (
csdd->selected_source, csdd->obj_type, FALSE, NULL,
- e_client_utils_authenticate_handler, csdd->parent,
dest_source_opened_cb, csdd);
}
@@ -220,7 +219,6 @@ copy_source (const CopySourceDialogData *const_csdd)
e_client_utils_open_new (
csdd->orig_source, csdd->obj_type, FALSE, NULL,
- e_client_utils_authenticate_handler, csdd->parent,
orig_source_opened_cb, csdd);
}
@@ -232,11 +230,13 @@ copy_source (const CopySourceDialogData *const_csdd)
*/
void
copy_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ESource *source,
ECalClientSourceType obj_type)
{
CopySourceDialogData csdd;
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
g_return_if_fail (E_IS_SOURCE (source));
g_return_if_fail (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS ||
obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS ||
@@ -250,7 +250,8 @@ copy_source_dialog (GtkWindow *parent,
obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS ? E_CLIENT_SOURCE_TYPE_MEMOS :
E_CLIENT_SOURCE_TYPE_LAST;
- csdd.selected_source = select_source_dialog (parent, obj_type, source);
+ csdd.selected_source = select_source_dialog (
+ parent, registry, obj_type, source);
if (csdd.selected_source) {
copy_source (&csdd);
diff --git a/calendar/gui/dialogs/copy-source-dialog.h b/calendar/gui/dialogs/copy-source-dialog.h
index 5ac51406de..01124d4a76 100644
--- a/calendar/gui/dialogs/copy-source-dialog.h
+++ b/calendar/gui/dialogs/copy-source-dialog.h
@@ -29,9 +29,10 @@
#include <gtk/gtk.h>
#include <libecal/e-cal-util.h>
#include <libecal/e-cal-client.h>
-#include <libedataserver/e-source.h>
+#include <libedataserver/e-source-registry.h>
void copy_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ESource *source,
ECalClientSourceType type);
diff --git a/calendar/gui/dialogs/e-delegate-dialog.c b/calendar/gui/dialogs/e-delegate-dialog.c
index 9b9d7b4bbd..ca253ca430 100644
--- a/calendar/gui/dialogs/e-delegate-dialog.c
+++ b/calendar/gui/dialogs/e-delegate-dialog.c
@@ -101,6 +101,7 @@ e_delegate_dialog_init (EDelegateDialog *edd)
EDelegateDialog *
e_delegate_dialog_construct (EDelegateDialog *edd,
+ ESourceRegistry *registry,
const gchar *name,
const gchar *address)
{
@@ -111,6 +112,7 @@ e_delegate_dialog_construct (EDelegateDialog *edd,
ENameSelectorDialog *name_selector_dialog;
g_return_val_if_fail (E_IS_DELEGATE_DIALOG (edd), NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
priv = edd->priv;
@@ -124,7 +126,7 @@ e_delegate_dialog_construct (EDelegateDialog *edd,
goto error;
}
- priv->name_selector = e_name_selector_new ();
+ priv->name_selector = e_name_selector_new (registry);
e_name_selector_load_books (priv->name_selector);
name_selector_model = e_name_selector_peek_model (priv->name_selector);
e_name_selector_model_add_section (name_selector_model, section_name, section_name, NULL);
@@ -211,15 +213,18 @@ addressbook_response_cb (GtkWidget *widget,
* editor could not be created.
**/
EDelegateDialog *
-e_delegate_dialog_new (const gchar *name,
+e_delegate_dialog_new (ESourceRegistry *registry,
+ const gchar *name,
const gchar *address)
{
EDelegateDialog *edd;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
edd = g_object_new (E_TYPE_DELEGATE_DIALOG, NULL);
return e_delegate_dialog_construct (
- E_DELEGATE_DIALOG (edd), name, address);
+ E_DELEGATE_DIALOG (edd), registry, name, address);
}
gchar *
diff --git a/calendar/gui/dialogs/e-delegate-dialog.h b/calendar/gui/dialogs/e-delegate-dialog.h
index 5fb672bd5e..85a0613532 100644
--- a/calendar/gui/dialogs/e-delegate-dialog.h
+++ b/calendar/gui/dialogs/e-delegate-dialog.h
@@ -25,6 +25,7 @@
#define E_DELEGATE_DIALOG_H
#include <gtk/gtk.h>
+#include <libedataserver/e-source-registry.h>
/* Standard GObject macros */
#define E_TYPE_DELEGATE_DIALOG \
@@ -63,10 +64,12 @@ struct _EDelegateDialogClass {
GType e_delegate_dialog_get_type (void);
EDelegateDialog *
e_delegate_dialog_construct (EDelegateDialog *etd,
+ ESourceRegistry *registry,
const gchar *name,
const gchar *address);
EDelegateDialog *
- e_delegate_dialog_new (const gchar *name,
+ e_delegate_dialog_new (ESourceRegistry *registry,
+ const gchar *name,
const gchar *address);
gchar * e_delegate_dialog_get_delegate (EDelegateDialog *etd);
gchar * e_delegate_dialog_get_delegate_name
diff --git a/calendar/gui/dialogs/e-send-options-utils.c b/calendar/gui/dialogs/e-send-options-utils.c
index e42bbc73d4..d438f16473 100644
--- a/calendar/gui/dialogs/e-send-options-utils.c
+++ b/calendar/gui/dialogs/e-send-options-utils.c
@@ -31,6 +31,8 @@
#include <stdlib.h>
#include <string.h>
+#include <libedataserver/e-source-extension.h>
+
void
e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
ESource *source,
@@ -38,24 +40,25 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
{
ESendOptionsGeneral *gopts = NULL;
ESendOptionsStatusTracking *sopts;
- GConfClient *gconf = gconf_client_get_default ();
- ESourceList *source_list;
- const gchar *uid;
- const gchar *value;
+ ESourceExtension *extension;
+ const gchar *extension_name;
+ gchar *value;
- gopts = sod->data->gopts;
- sopts = sod->data->sopts;
+ /* FIXME These is all GroupWise-specific settings.
+ * They absolutely do not belong here. */
- if (!strcmp (type, "calendar"))
- source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/calendar/sources");
- else
- source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/tasks/sources");
+ extension_name = "GroupWise Backend";
- uid = e_source_get_uid (source);
- source = e_source_list_peek_source_by_uid (source_list, uid);
+ if (!e_source_has_extension (source, extension_name))
+ return;
+
+ extension = e_source_get_extension (source, extension_name);
+
+ gopts = sod->data->gopts;
+ sopts = sod->data->sopts;
/* priority */
- value = e_source_get_property (source, "priority");
+ g_object_get (extension, "priority", &value, NULL);
if (value) {
if (!strcmp (value, "high"))
gopts->priority = E_PRIORITY_HIGH;
@@ -66,8 +69,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
else
gopts->priority = E_PRIORITY_UNDEFINED;
}
+ g_free (value);
+
/* Reply requested */
- value = e_source_get_property (source, "reply-requested");
+ g_object_get (extension, "reply-requested", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
gopts->reply_enabled = FALSE;
@@ -79,8 +84,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
gopts->reply_within = i;
}
}
+ g_free (value);
+
/* Delay delivery */
- value = e_source_get_property (source, "delay-delivery");
+ g_object_get (extension, "delivery-delay", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
gopts->delay_enabled = FALSE;
@@ -89,8 +96,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
gopts->delay_until = icaltime_as_timet (icaltime_from_string (value));
}
}
+ g_free (value);
+
/* Expiration Date */
- value = e_source_get_property (source, "expiration");
+ g_object_get (extension, "expiration", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
gopts->expiration_enabled = FALSE;
@@ -103,8 +112,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
gopts->expire_after = i;
}
}
+ g_free (value);
+
/* status tracking */
- value = e_source_get_property (source, "status-tracking");
+ g_object_get (extension, "status-tracking", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
sopts->tracking_enabled = FALSE;
@@ -118,42 +129,45 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
sopts->track_when = E_ALL;
}
}
+ g_free (value);
/* Return Notifications */
- value = e_source_get_property (source, "return-open");
+ g_object_get (extension, "return-open", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
sopts->opened = E_RETURN_NOTIFY_NONE;
else
sopts->opened = E_RETURN_NOTIFY_MAIL;
}
+ g_free (value);
- value = e_source_get_property (source, "return-accept");
+ g_object_get (extension, "return-accept", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
sopts->accepted = E_RETURN_NOTIFY_NONE;
else
sopts->accepted = E_RETURN_NOTIFY_MAIL;
}
+ g_free (value);
- value = e_source_get_property (source, "return-decline");
+ g_object_get (extension, "return-decline", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
sopts->declined = E_RETURN_NOTIFY_NONE;
else
sopts->declined = E_RETURN_NOTIFY_MAIL;
}
+ g_free (value);
- value = e_source_get_property (source, "return-complete");
+ g_object_get (extension, "return-complete", &value, NULL);
if (value) {
if (!strcmp (value, "none"))
sopts->completed = E_RETURN_NOTIFY_NONE;
else
sopts->completed = E_RETURN_NOTIFY_MAIL;
}
-
- g_object_unref (gconf);
+ g_free (value);
}
void
diff --git a/calendar/gui/dialogs/e-send-options-utils.h b/calendar/gui/dialogs/e-send-options-utils.h
index c1a63a291a..3ec75426e4 100644
--- a/calendar/gui/dialogs/e-send-options-utils.h
+++ b/calendar/gui/dialogs/e-send-options-utils.h
@@ -27,7 +27,7 @@
#include "misc/e-send-options.h"
#include <libecal/e-cal-component.h>
-#include <libedataserver/e-source-list.h>
+#include <libedataserver/e-source.h>
void e_send_options_utils_set_default_data
(ESendOptionsDialog *sod,
diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c
index 7d679e6bbf..1460ff47db 100644
--- a/calendar/gui/dialogs/event-editor.c
+++ b/calendar/gui/dialogs/event-editor.c
@@ -609,6 +609,8 @@ event_editor_edit_comp (CompEditor *editor,
ECalComponentDateTime dtstart, dtend;
ECalClient *client;
GSList *attendees = NULL;
+ ESourceRegistry *registry;
+ EShell *shell;
priv = EVENT_EDITOR_GET_PRIVATE (editor);
@@ -628,8 +630,11 @@ event_editor_edit_comp (CompEditor *editor,
if (COMP_EDITOR_CLASS (event_editor_parent_class)->edit_comp)
COMP_EDITOR_CLASS (event_editor_parent_class)->edit_comp (editor, comp);
+ shell = comp_editor_get_shell (editor);
client = comp_editor_get_client (editor);
+ registry = e_shell_get_registry (shell);
+
/* Get meeting related stuff */
e_cal_component_get_organizer (comp, &organizer);
e_cal_component_get_attendee_list (comp, &attendees);
@@ -639,7 +644,9 @@ event_editor_edit_comp (CompEditor *editor,
GSList *l;
gint row;
gchar *user_email;
- user_email = itip_get_comp_attendee (comp, client);
+
+ user_email = itip_get_comp_attendee (
+ registry, comp, client);
if (!priv->meeting_shown) {
GtkAction *action;
@@ -707,7 +714,8 @@ event_editor_edit_comp (CompEditor *editor,
comp_editor_set_needs_send (
editor, priv->meeting_shown && (itip_organizer_is_user (
- comp, client) || itip_sentby_is_user (comp, client)));
+ registry, comp, client) || itip_sentby_is_user (registry,
+ comp, client)));
priv->updating = FALSE;
}
@@ -718,6 +726,8 @@ event_editor_send_comp (CompEditor *editor,
gboolean strip_alarms)
{
EventEditorPrivate *priv;
+ EShell *shell;
+ ESourceRegistry *registry;
ECalComponent *comp = NULL;
priv = EVENT_EDITOR_GET_PRIVATE (editor);
@@ -727,6 +737,9 @@ event_editor_send_comp (CompEditor *editor,
method == E_CAL_COMPONENT_METHOD_CANCEL)
goto parent;
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
comp = event_page_get_cancel_comp (priv->event_page);
if (comp != NULL) {
ECalClient *client;
@@ -734,7 +747,7 @@ event_editor_send_comp (CompEditor *editor,
client = e_meeting_store_get_client (priv->model);
result = itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL, comp,
+ registry, E_CAL_COMPONENT_METHOD_CANCEL, comp,
client, NULL, NULL, NULL, strip_alarms, FALSE);
g_object_unref (comp);
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index 2797bcd9ec..44e36c6e58 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -36,6 +36,8 @@
#include <gdk/gdkkeysyms.h>
#include <libecal/e-cal-time-util.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
@@ -46,8 +48,6 @@
#include <e-util/e-dialog-widgets.h>
#include <e-util/e-util-private.h>
-#include <libemail-utils/e-account-utils.h>
-
#include <misc/e-dateedit.h>
#include <misc/e-send-options.h>
#include <misc/e-spell-entry.h>
@@ -112,7 +112,6 @@ struct _EventPagePrivate {
GtkWidget *info_hbox;
GtkWidget *info_icon;
GtkWidget *info_string;
- gchar *subscriber_info_text;
GtkWidget *summary;
GtkWidget *summary_label;
@@ -160,7 +159,7 @@ struct _EventPagePrivate {
GtkWidget *categories_btn;
GtkWidget *categories;
- GtkWidget *source_selector;
+ GtkWidget *source_combo_box;
/* Meeting related items */
GtkWidget *list_box;
@@ -224,9 +223,12 @@ get_current_identity (EventPage *page,
gchar **name,
gchar **mailto)
{
- EAccountList *account_list;
- EIterator *iterator;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
+ GList *list, *iter;
GtkWidget *entry;
+ const gchar *extension_name;
const gchar *text;
gboolean match = FALSE;
@@ -236,28 +238,29 @@ get_current_identity (EventPage *page,
if (text == NULL || *text == '\0')
return FALSE;
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- while (!match && e_iterator_is_valid (iterator)) {
- EAccount *account;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; !match && iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
const gchar *id_name;
const gchar *id_address;
gchar *identity;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
-<<<<<<< HEAD
-
- id_name = account->id->name;
- id_address = account->id->address;
+ extension = e_source_get_extension (source, extension_name);
-=======
+ id_name = e_source_mail_identity_get_name (extension);
+ id_address = e_source_mail_identity_get_address (extension);
- id_name = account->id->name;
- id_address = account->id->address;
+ if (id_name == NULL || id_address == NULL)
+ continue;
->>>>>>> Refactor CompEditor pages to isolate EAccount usage.
identity = g_strdup_printf ("%s <%s>", id_name, id_address);
match = (g_ascii_strcasecmp (text, identity) == 0);
g_free (identity);
@@ -267,11 +270,9 @@ get_current_identity (EventPage *page,
if (match && mailto != NULL)
*mailto = g_strdup_printf ("MAILTO:%s", id_address);
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return match;
}
@@ -656,7 +657,7 @@ sensitize_widgets (EventPage *epage)
event_page_set_info_string (epage, GTK_STOCK_DIALOG_INFO, tmp);
g_free (tmp);
} else if (!check_starts_in_the_past (epage)) {
- event_page_set_info_string (epage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+ event_page_set_info_string (epage, NULL, NULL);
}
alarm = e_dialog_combo_box_get (priv->alarm_time_combo, priv->alarm_map) != ALARM_NONE;
@@ -698,7 +699,7 @@ sensitize_widgets (EventPage *epage)
gtk_editable_set_editable (GTK_EDITABLE (priv->categories), !read_only);
if (delegate) {
- gtk_widget_set_sensitive (priv->source_selector, FALSE);
+ gtk_widget_set_sensitive (priv->source_combo_box, FALSE);
}
gtk_widget_set_sensitive (priv->organizer, !read_only);
@@ -724,7 +725,7 @@ sensitize_widgets (EventPage *epage)
gtk_widget_hide (priv->attendee_box);
gtk_widget_hide (priv->organizer);
gtk_label_set_text_with_mnemonic ((GtkLabel *) priv->org_cal_label, _("_Calendar:"));
- gtk_label_set_mnemonic_widget ((GtkLabel *) priv->org_cal_label, priv->source_selector);
+ gtk_label_set_mnemonic_widget ((GtkLabel *) priv->org_cal_label, priv->source_combo_box);
} else {
gtk_widget_show (priv->calendar_label);
gtk_widget_show (priv->list_box);
@@ -1106,6 +1107,8 @@ event_page_fill_widgets (CompEditorPage *page,
ECalComponentClassification cl;
ECalComponentTransparency transparency;
ECalComponentDateTime start_date, end_date;
+ ESourceRegistry *registry;
+ EShell *shell;
const gchar *location, *uid = NULL;
const gchar *categories;
gchar *backend_addr = NULL;
@@ -1118,6 +1121,9 @@ event_page_fill_widgets (CompEditorPage *page,
editor = comp_editor_page_get_editor (page);
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
if (!e_cal_component_has_organizer (comp)) {
flags |= COMP_EDITOR_USER_ORG;
@@ -1178,7 +1184,8 @@ event_page_fill_widgets (CompEditorPage *page,
gchar *name = NULL;
gchar *mailto = NULL;
- priv->user_add = itip_get_comp_attendee (comp, client);
+ priv->user_add = itip_get_comp_attendee (
+ registry, comp, client);
/* Organizer strings */
event_page_select_organizer (epage, backend_addr);
@@ -1190,7 +1197,8 @@ event_page_fill_widgets (CompEditorPage *page,
const gchar *strip = itip_strip_mailto (organizer.value);
gchar *string;
- if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) {
if (e_client_check_capability (
E_CLIENT (client),
CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
@@ -1363,7 +1371,7 @@ event_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (client)));
e_cal_component_get_uid (comp, &uid);
@@ -2510,6 +2518,7 @@ static gboolean
get_widgets (EventPage *epage)
{
EShell *shell;
+ ESourceRegistry *registry;
CompEditor *editor;
CompEditorPage *page = COMP_EDITOR_PAGE (epage);
GtkEntryCompletion *completion;
@@ -2526,6 +2535,7 @@ get_widgets (EventPage *epage)
editor = comp_editor_page_get_editor (page);
shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
priv->main = GW ("event-page");
if (!priv->main)
@@ -2618,9 +2628,9 @@ get_widgets (EventPage *epage)
priv->description = GW ("description");
- priv->source_selector = GW ("source");
-
- e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/calendar/sources");
+ priv->source_combo_box = GW ("source");
+ e_source_combo_box_set_registry (
+ E_SOURCE_COMBO_BOX (priv->source_combo_box), registry);
completion = e_category_completion_new ();
gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
@@ -2934,7 +2944,7 @@ event_page_send_options_clicked_cb (EventPage *epage)
if (!priv->sod) {
priv->sod = e_send_options_dialog_new ();
source = e_source_combo_box_ref_active (
- E_SOURCE_COMBO_BOX (priv->source_selector));
+ E_SOURCE_COMBO_BOX (priv->source_combo_box));
e_send_options_utils_set_default_data (
priv->sod, source, "calendar");
priv->sod->data->initialized = TRUE;
@@ -2979,7 +2989,7 @@ epage_client_opened_cb (GObject *source_object,
old_client = comp_editor_get_client (editor);
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (
@@ -3045,7 +3055,6 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_client_utils_open_new (
source, E_CLIENT_SOURCE_TYPE_EVENTS,
FALSE, priv->open_cancellable,
- e_client_utils_authenticate_handler, NULL,
epage_client_opened_cb, epage);
g_object_unref (source);
@@ -3055,26 +3064,8 @@ static void
set_subscriber_info_string (EventPage *epage,
const gchar *backend_address)
{
- CompEditor *editor;
- ECalClient *client;
- ESource *source;
-
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
- client = comp_editor_get_client (editor);
- source = e_client_get_source (E_CLIENT (client));
-
- if (e_source_get_property (source, "subscriber")) {
- g_free (epage->priv->subscriber_info_text);
- /* Translators: This string is used when we are creating an Event
- * (meeting or appointment) on behalf of some other user */
- epage->priv->subscriber_info_text = g_markup_printf_escaped (_("You are acting on behalf of %s"), backend_address);
- } else {
- g_free (epage->priv->subscriber_info_text);
- epage->priv->subscriber_info_text = NULL;
- }
-
if (!check_starts_in_the_past (epage))
- event_page_set_info_string (epage, epage->priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, epage->priv->subscriber_info_text);
+ event_page_set_info_string (epage, NULL, NULL);
}
static void
@@ -3219,7 +3210,9 @@ static gboolean
init_widgets (EventPage *epage)
{
EventPagePrivate *priv = epage->priv;
+ EShell *shell;
CompEditor *editor;
+ ESourceRegistry *registry;
GtkTextBuffer *text_buffer;
icaltimezone *zone;
gchar *combo_label = NULL;
@@ -3231,8 +3224,12 @@ init_widgets (EventPage *epage)
GtkListStore *store;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
+
+ shell = comp_editor_get_shell (editor);
client = comp_editor_get_client (editor);
+ registry = e_shell_get_registry (shell);
+
/* Make sure the EDateEdit widgets use our timezones to get the
* current time. */
e_date_edit_set_get_time_callback (
@@ -3276,7 +3273,7 @@ init_widgets (EventPage *epage)
/* Source selector */
g_signal_connect (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (source_changed_cb), epage);
/* Alarms */
@@ -3357,7 +3354,7 @@ init_widgets (EventPage *epage)
priv->alarm_dialog, "delete-event",
G_CALLBACK (gtk_widget_hide), priv->alarm_dialog);
priv->alarm_list_dlg_widget = alarm_list_dialog_peek (
- client, priv->alarm_list_store);
+ registry, client, priv->alarm_list_store);
gtk_widget_reparent (priv->alarm_list_dlg_widget, priv->alarm_box);
gtk_widget_show_all (priv->alarm_list_dlg_widget);
gtk_widget_hide (priv->alarm_dialog);
@@ -3481,7 +3478,7 @@ init_widgets (EventPage *epage)
priv->categories, "changed",
G_CALLBACK (comp_editor_page_changed), epage);
g_signal_connect_swapped (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (comp_editor_page_changed), epage);
g_signal_connect_swapped (
priv->start_timezone, "changed",
@@ -3504,32 +3501,18 @@ event_page_select_organizer (EventPage *epage,
const gchar *backend_address)
{
EventPagePrivate *priv = epage->priv;
- CompEditor *editor;
- ECalClient *client;
const gchar *default_address;
- gboolean subscribed_cal = FALSE;
- ESource *source = NULL;
- const gchar *user_addr = NULL;
gint ii;
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
- client = comp_editor_get_client (editor);
-
- if (client)
- source = e_client_get_source (E_CLIENT (client));
- if (source)
- user_addr = e_source_get_property (source, "subscriber");
-
- if (user_addr)
- subscribed_cal = TRUE;
- else
- user_addr = (backend_address && *backend_address) ? backend_address : NULL;
+ /* Treat an empty backend address as NULL. */
+ if (backend_address != NULL && *backend_address == '\0')
+ backend_address = NULL;
default_address = priv->fallback_address;
- if (user_addr) {
+ if (backend_address != NULL) {
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
- if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
+ if (g_strrstr (priv->address_strings[ii], backend_address) != NULL) {
default_address = priv->address_strings[ii];
break;
}
@@ -3542,7 +3525,6 @@ event_page_select_organizer (EventPage *epage,
g_signal_handlers_block_by_func (entry, organizer_changed_cb, epage);
gtk_entry_set_text (entry, default_address);
- gtk_widget_set_sensitive (priv->organizer, !subscribed_cal);
g_signal_handlers_unblock_by_func (entry, organizer_changed_cb, epage);
}
} else
@@ -3563,12 +3545,18 @@ event_page_construct (EventPage *epage,
EMeetingStore *meeting_store)
{
EventPagePrivate *priv;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
GtkComboBox *combo_box;
GtkListStore *list_store;
GtkTreeModel *model;
GtkTreeIter iter;
gint ii;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
+ shell = comp_editor_get_shell (editor);
+
priv = epage->priv;
priv->meeting_store = g_object_ref (meeting_store);
@@ -3602,8 +3590,9 @@ event_page_construct (EventPage *epage,
model = gtk_combo_box_get_model (combo_box);
list_store = GTK_LIST_STORE (model);
- priv->address_strings = itip_get_user_identities ();
- priv->fallback_address = itip_get_fallback_identity ();
+ registry = e_shell_get_registry (shell);
+ priv->address_strings = itip_get_user_identities (registry);
+ priv->fallback_address = itip_get_fallback_identity (registry);
/* FIXME Could we just use a GtkComboBoxText? */
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
diff --git a/calendar/gui/dialogs/event-page.ui b/calendar/gui/dialogs/event-page.ui
index c2e291f558..ee9c3e51b9 100644
--- a/calendar/gui/dialogs/event-page.ui
+++ b/calendar/gui/dialogs/event-page.ui
@@ -779,6 +779,8 @@
</child>
<child>
<object class="ESourceComboBox" type-func="e_source_combo_box_get_type" id="source">
+ <property name="extension-name">Calendar</property>
+ <property name="show-colors">True</property>
<property name="visible">True</property>
</object>
<packing>
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index 715681445c..4e054d2a5b 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -34,6 +34,8 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
@@ -50,8 +52,6 @@
#include <misc/e-spell-entry.h>
#include <misc/e-buffer-tagger.h>
-#include <libemail-utils/e-account-utils.h>
-
#include "../calendar-config.h"
#include "comp-editor.h"
#include "comp-editor-util.h"
@@ -75,7 +75,6 @@ struct _MemoPagePrivate {
GtkWidget *info_hbox;
GtkWidget *info_icon;
GtkWidget *info_string;
- gchar *subscriber_info_text;
/* Organizer */
GtkWidget *org_label;
@@ -97,7 +96,7 @@ struct _MemoPagePrivate {
GtkWidget *categories_btn;
GtkWidget *categories;
- GtkWidget *source_selector;
+ GtkWidget *source_combo_box;
gchar **address_strings;
gchar *fallback_address;
@@ -120,32 +119,43 @@ get_current_identity (MemoPage *page,
gchar **name,
gchar **mailto)
{
- EAccountList *account_list;
- EIterator *iterator;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
+ GList *list, *iter;
GtkWidget *entry;
+ const gchar *extension_name;
const gchar *text;
gboolean match = FALSE;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
+ shell = comp_editor_get_shell (editor);
+
entry = gtk_bin_get_child (GTK_BIN (page->priv->org_combo));
text = gtk_entry_get_text (GTK_ENTRY (entry));
if (text == NULL || *text == '\0')
return FALSE;
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- while (!match && e_iterator_is_valid (iterator)) {
- EAccount *account;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; !match && iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
const gchar *id_name;
const gchar *id_address;
gchar *identity;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
+ extension = e_source_get_extension (source, extension_name);
+
+ id_name = e_source_mail_identity_get_name (extension);
+ id_address = e_source_mail_identity_get_address (extension);
- id_name = account->id->name;
- id_address = account->id->address;
+ if (id_name == NULL || id_address == NULL)
+ continue;
identity = g_strdup_printf ("%s <%s>", id_name, id_address);
match = (g_ascii_strcasecmp (text, identity) == 0);
@@ -156,11 +166,9 @@ get_current_identity (MemoPage *page,
if (match && mailto != NULL)
*mailto = g_strdup_printf ("MAILTO:%s", id_address);
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return match;
}
@@ -236,8 +244,6 @@ memo_page_finalize (GObject *object)
priv->builder = NULL;
}
- g_free (priv->subscriber_info_text);
-
/* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (memo_page_parent_class)->finalize (object);
}
@@ -270,6 +276,8 @@ memo_page_fill_widgets (CompEditorPage *page,
ECalComponentClassification cl;
ECalComponentText text;
ECalComponentDateTime d;
+ ESourceRegistry *registry;
+ EShell *shell;
GSList *l;
const gchar *categories;
gchar *backend_addr = NULL;
@@ -280,6 +288,9 @@ memo_page_fill_widgets (CompEditorPage *page,
editor = comp_editor_page_get_editor (page);
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Clean the screen */
clear_widgets (mpage);
@@ -343,7 +354,8 @@ memo_page_fill_widgets (CompEditorPage *page,
else
string = g_strdup (strip);
- if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) {
gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->org_combo))), string);
} else {
GtkComboBox *combo_box;
@@ -370,7 +382,7 @@ memo_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (client)));
if (priv->to_entry && (flags & COMP_EDITOR_IS_SHARED) && !(flags & COMP_EDITOR_NEW_ITEM))
@@ -421,12 +433,11 @@ check_starts_in_the_past (MemoPage *mpage)
start_tt.is_date = TRUE;
if (e_date_edit_get_date (E_DATE_EDIT (priv->start_date), &start_tt.year, &start_tt.month, &start_tt.day) &&
comp_editor_test_time_in_the_past (start_tt)) {
- gchar *tmp = g_strconcat ("<b>", _("Memo's start date is in the past"), "</b>",
- priv->subscriber_info_text ? "\n" : "", priv->subscriber_info_text, NULL);
+ gchar *tmp = g_strconcat ("<b>", _("Memo's start date is in the past"), "</b>", NULL);
memo_page_set_info_string (mpage, GTK_STOCK_DIALOG_WARNING, tmp);
g_free (tmp);
} else {
- memo_page_set_info_string (mpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+ memo_page_set_info_string (mpage, NULL, NULL);
}
return TRUE;
@@ -466,7 +477,7 @@ sensitize_widgets (MemoPage *mpage)
memo_page_set_info_string (mpage, GTK_STOCK_DIALOG_INFO, tmp);
g_free (tmp);
} else if (!check_starts_in_the_past (mpage)) {
- memo_page_set_info_string (mpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+ memo_page_set_info_string (mpage, NULL, NULL);
}
/* The list of organizers is set to be non-editable. Otherwise any
@@ -553,7 +564,7 @@ fill_comp_with_recipients (ENameSelector *name_selector,
ENameSelectorModel *model;
EContactStore *c_store;
GSList *clients, *l;
- gchar *uri = e_contact_get (contact, E_CONTACT_BOOK_URI);
+ gchar *uid = e_contact_get (contact, E_CONTACT_BOOK_URI);
dialog = e_name_selector_peek_dialog (name_selector);
model = e_name_selector_dialog_peek_model (dialog);
@@ -562,7 +573,11 @@ fill_comp_with_recipients (ENameSelector *name_selector,
for (l = clients; l; l = l->next) {
EBookClient *b = l->data;
- if (g_str_equal (uri, e_client_get_uri (E_CLIENT (b)))) {
+ ESource *source;
+
+ source = e_client_get_source (E_CLIENT (b));
+
+ if (g_strcmp0 (uid, e_source_get_uid (source)) == 0) {
book_client = b;
break;
}
@@ -834,6 +849,9 @@ memo_page_set_info_string (MemoPage *mpage,
static gboolean
get_widgets (MemoPage *mpage)
{
+ EShell *shell;
+ ESourceRegistry *registry;
+ CompEditor *editor;
CompEditorPage *page = COMP_EDITOR_PAGE (mpage);
GtkEntryCompletion *completion;
MemoPagePrivate *priv;
@@ -845,6 +863,10 @@ get_widgets (MemoPage *mpage)
#define GW(name) e_builder_get_widget (priv->builder, name)
+ editor = comp_editor_page_get_editor (page);
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
priv->main = GW ("memo-page");
if (!priv->main) {
g_warning("couldn't find memo-page!");
@@ -885,11 +907,11 @@ get_widgets (MemoPage *mpage)
priv->categories_btn = GW ("categories-button");
priv->categories = GW ("categories");
- priv->source_selector = GW ("source");
+ priv->source_combo_box = GW ("source");
+ e_source_combo_box_set_registry (
+ E_SOURCE_COMBO_BOX (priv->source_combo_box), registry);
#undef GW
- e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/memos/sources");
-
completion = e_category_completion_new ();
gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
g_object_unref (completion);
@@ -958,7 +980,7 @@ mpage_client_opened_cb (GObject *source_object,
old_client = comp_editor_get_client (editor);
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
@@ -1021,7 +1043,6 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_client_utils_open_new (
source, E_CLIENT_SOURCE_TYPE_MEMOS,
FALSE, priv->open_cancellable,
- e_client_utils_authenticate_handler, NULL,
mpage_client_opened_cb, mpage);
g_object_unref (source);
@@ -1031,26 +1052,8 @@ static void
set_subscriber_info_string (MemoPage *mpage,
const gchar *backend_address)
{
- CompEditor *editor;
- ECalClient *client;
- ESource *source;
-
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
- client = comp_editor_get_client (editor);
- source = e_client_get_source (E_CLIENT (client));
-
- if (e_source_get_property (source, "subscriber")) {
- g_free (mpage->priv->subscriber_info_text);
- /* Translators: This string is used when we are creating a Memo
- * on behalf of some other user */
- mpage->priv->subscriber_info_text = g_markup_printf_escaped (_("You are acting on behalf of %s"), backend_address);
- } else {
- g_free (mpage->priv->subscriber_info_text);
- mpage->priv->subscriber_info_text = NULL;
- }
-
if (!check_starts_in_the_past (mpage))
- memo_page_set_info_string (mpage, mpage->priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, mpage->priv->subscriber_info_text);
+ memo_page_set_info_string (mpage, NULL, NULL);
}
static void
@@ -1117,7 +1120,7 @@ init_widgets (MemoPage *mpage)
/* Source selector */
g_signal_connect (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (source_changed_cb), mpage);
/* Connect the default signal handler to use to make sure the "changed"
@@ -1137,7 +1140,7 @@ init_widgets (MemoPage *mpage)
G_CALLBACK (comp_editor_page_changed), mpage);
g_signal_connect_swapped (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (comp_editor_page_changed), mpage);
g_signal_connect_swapped (
@@ -1184,36 +1187,24 @@ static void
memo_page_select_organizer (MemoPage *mpage,
const gchar *backend_address)
{
- MemoPagePrivate *priv;
+ MemoPagePrivate *priv = mpage->priv;
CompEditor *editor;
CompEditorFlags flags;
- ECalClient *client;
const gchar *default_address;
- gboolean subscribed_cal = FALSE;
- ESource *source = NULL;
- const gchar *user_addr = NULL;
gint ii;
- priv = mpage->priv;
+ /* Treat an empty backend address as NULL. */
+ if (backend_address != NULL && *backend_address == '\0')
+ backend_address = NULL;
+
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
- client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
- if (client)
- source = e_client_get_source (E_CLIENT (client));
- if (source)
- user_addr = e_source_get_property (source, "subscriber");
-
- if (user_addr)
- subscribed_cal = TRUE;
- else
- user_addr = (backend_address && *backend_address) ? backend_address : NULL;
-
default_address = priv->fallback_address;
- if (user_addr) {
+ if (backend_address != NULL) {
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
- if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
+ if (g_strrstr (priv->address_strings[ii], backend_address) != NULL) {
default_address = priv->address_strings[ii];
break;
}
@@ -1223,7 +1214,6 @@ memo_page_select_organizer (MemoPage *mpage,
if (default_address != NULL) {
if (flags & COMP_EDITOR_NEW_ITEM) {
gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->org_combo))), default_address);
- gtk_widget_set_sensitive (priv->org_combo, !subscribed_cal);
}
} else
g_warning ("No potential organizers!");
@@ -1242,13 +1232,19 @@ MemoPage *
memo_page_construct (MemoPage *mpage)
{
MemoPagePrivate *priv;
+ EShell *shell;
CompEditor *editor;
CompEditorFlags flags;
+ ESourceRegistry *registry;
priv = mpage->priv;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Make sure our custom widget classes are registered with
* GType before we load the GtkBuilder definition file. */
@@ -1275,8 +1271,8 @@ memo_page_construct (MemoPage *mpage)
model = gtk_combo_box_get_model (combo_box);
list_store = GTK_LIST_STORE (model);
- priv->address_strings = itip_get_user_identities ();
- priv->fallback_address = itip_get_fallback_identity ();
+ priv->address_strings = itip_get_user_identities (registry);
+ priv->fallback_address = itip_get_fallback_identity (registry);
/* FIXME Could we just use a GtkComboBoxText? */
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
@@ -1291,7 +1287,7 @@ memo_page_construct (MemoPage *mpage)
gtk_widget_show (priv->org_label);
gtk_widget_show (priv->org_combo);
- priv->name_selector = e_name_selector_new ();
+ priv->name_selector = e_name_selector_new (registry);
priv->to_entry = get_to_entry (priv->name_selector);
gtk_container_add ((GtkContainer *) priv->to_hbox, priv->to_entry);
gtk_widget_show (priv->to_hbox);
diff --git a/calendar/gui/dialogs/memo-page.ui b/calendar/gui/dialogs/memo-page.ui
index d30aecf0d5..fe63f1e009 100644
--- a/calendar/gui/dialogs/memo-page.ui
+++ b/calendar/gui/dialogs/memo-page.ui
@@ -184,6 +184,8 @@
<property name="spacing">0</property>
<child>
<object class="ESourceComboBox" type-func="e_source_combo_box_get_type" id="source">
+ <property name="extension-name">Memo List</property>
+ <property name="show-colors">True</property>
<property name="visible">True</property>
</object>
<packing>
diff --git a/calendar/gui/dialogs/select-source-dialog.c b/calendar/gui/dialogs/select-source-dialog.c
index 740428ae49..8ea35e2c00 100644
--- a/calendar/gui/dialogs/select-source-dialog.c
+++ b/calendar/gui/dialogs/select-source-dialog.c
@@ -26,6 +26,7 @@
#endif
#include <glib/gi18n.h>
+#include <libedataserver/e-source-calendar.h>
#include <libedataserverui/e-source-selector-dialog.h>
#include "select-source-dialog.h"
@@ -36,37 +37,31 @@
*/
ESource *
select_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ECalClientSourceType obj_type,
ESource *except_source)
{
GtkWidget *dialog;
- ESourceList *source_list;
ESource *selected_source = NULL;
- const gchar *gconf_key;
- GConfClient *conf_client;
- const gchar *icon_name = NULL;
+ const gchar *extension_name;
+ const gchar *icon_name;
- if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
- gconf_key = "/apps/evolution/calendar/sources";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
- gconf_key = "/apps/evolution/tasks/sources";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
- gconf_key = "/apps/evolution/memos/sources";
- else
- return NULL;
-
- conf_client = gconf_client_get_default ();
- source_list = e_source_list_new_for_gconf (conf_client, gconf_key);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
- /* create the dialog */
- dialog = e_source_selector_dialog_new (parent, source_list);
-
- if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
+ if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS) {
+ extension_name = E_SOURCE_EXTENSION_CALENDAR;
icon_name = "x-office-calendar";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
+ } else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS) {
+ extension_name = E_SOURCE_EXTENSION_TASK_LIST;
icon_name = "stock_todo";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
+ } else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS) {
+ extension_name = E_SOURCE_EXTENSION_MEMO_LIST;
icon_name = "stock_journal";
+ } else
+ return NULL;
+
+ /* create the dialog */
+ dialog = e_source_selector_dialog_new (parent, registry, extension_name);
if (icon_name)
gtk_window_set_icon_name (GTK_WINDOW (dialog), icon_name);
@@ -74,16 +69,15 @@ select_source_dialog (GtkWindow *parent,
if (except_source)
g_object_set_data (G_OBJECT (dialog), "except-source", except_source);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
- selected_source = e_source_selector_dialog_peek_primary_selection (E_SOURCE_SELECTOR_DIALOG (dialog));
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+ goto exit;
- if (selected_source)
- g_object_ref (selected_source);
- } else
- selected_source = NULL;
+ selected_source = e_source_selector_dialog_peek_primary_selection (
+ E_SOURCE_SELECTOR_DIALOG (dialog));
+ if (selected_source != NULL)
+ g_object_ref (selected_source);
- g_object_unref (conf_client);
- g_object_unref (source_list);
+exit:
gtk_widget_destroy (dialog);
return selected_source;
diff --git a/calendar/gui/dialogs/select-source-dialog.h b/calendar/gui/dialogs/select-source-dialog.h
index 2ef8e0e625..77864e8c97 100644
--- a/calendar/gui/dialogs/select-source-dialog.h
+++ b/calendar/gui/dialogs/select-source-dialog.h
@@ -27,10 +27,11 @@
#define SELECT_SOURCE_DIALOG_H
#include <gtk/gtk.h>
-#include <libedataserver/e-source.h>
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-registry.h>
ESource * select_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ECalClientSourceType type,
ESource *except_source);
diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c
index 378aea593a..0c81d3ea47 100644
--- a/calendar/gui/dialogs/task-editor.c
+++ b/calendar/gui/dialogs/task-editor.c
@@ -138,74 +138,6 @@ task_editor_model_changed_cb (TaskEditor *te)
}
}
-static GObject *
-task_editor_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- CompEditor *editor;
- CompEditorFlags flags;
- TaskEditorPrivate *priv;
- GtkWidget *content_area;
- GtkActionGroup *action_group;
- ECalClient *client;
- gboolean is_assigned;
-
- /* Chain up to parent's constructor() method. */
- object = G_OBJECT_CLASS (task_editor_parent_class)->constructor (
- type, n_construct_properties, construct_properties);
-
- editor = COMP_EDITOR (object);
- priv = TASK_EDITOR_GET_PRIVATE (object);
-
- client = comp_editor_get_client (editor);
- flags = comp_editor_get_flags (editor);
-
- priv->task_page = task_page_new (priv->model, editor);
- comp_editor_append_page (
- editor, COMP_EDITOR_PAGE (priv->task_page),
- _("Task"), TRUE);
-
- priv->task_details_window = gtk_dialog_new_with_buttons (
- _("Task Details"), GTK_WINDOW (object), GTK_DIALOG_MODAL,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
- g_signal_connect (
- priv->task_details_window, "response",
- G_CALLBACK (gtk_widget_hide), NULL);
- g_signal_connect (
- priv->task_details_window, "delete-event",
- G_CALLBACK (gtk_widget_hide), NULL);
-
- priv->task_details_page = task_details_page_new (editor);
- content_area = gtk_dialog_get_content_area (
- GTK_DIALOG (priv->task_details_window));
- gtk_container_add (
- GTK_CONTAINER (content_area),
- comp_editor_page_get_widget (
- (CompEditorPage *) priv->task_details_page));
- gtk_widget_show_all (
- gtk_bin_get_child (GTK_BIN (priv->task_details_window)));
- comp_editor_append_page (
- editor, COMP_EDITOR_PAGE (priv->task_details_page), NULL, FALSE);
-
- is_assigned = flags & COMP_EDITOR_IS_ASSIGNED;
-
- action_group = comp_editor_get_action_group (editor, "coordinated");
- task_page_set_assignment (priv->task_page, is_assigned);
- gtk_action_group_set_visible (action_group, is_assigned);
-
- if (is_assigned) {
- if (e_client_check_capability (
- E_CLIENT (client),
- CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
- task_page_show_options (priv->task_page);
- comp_editor_set_group_item (editor, TRUE);
- }
-
- return object;
-}
-
static void
task_editor_dispose (GObject *object)
{
@@ -236,8 +168,37 @@ static void
task_editor_constructed (GObject *object)
{
TaskEditorPrivate *priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
+ GtkActionGroup *action_group;
+ gboolean is_assigned;
priv = TASK_EDITOR_GET_PRIVATE (object);
+ editor = COMP_EDITOR (object);
+
+ flags = comp_editor_get_flags (editor);
+ is_assigned = flags & COMP_EDITOR_IS_ASSIGNED;
+
+ priv->task_page = task_page_new (priv->model, editor);
+ task_page_set_assignment (priv->task_page, is_assigned);
+ comp_editor_append_page (
+ editor, COMP_EDITOR_PAGE (priv->task_page),
+ _("Task"), TRUE);
+
+ action_group = comp_editor_get_action_group (editor, "coordinated");
+ gtk_action_group_set_visible (action_group, is_assigned);
+
+ if (is_assigned) {
+ ECalClient *client;
+
+ client = comp_editor_get_client (editor);
+
+ if (e_client_check_capability (
+ E_CLIENT (client),
+ CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
+ task_page_show_options (priv->task_page);
+ comp_editor_set_group_item (editor, TRUE);
+ }
g_object_bind_property (
object, "client",
@@ -311,7 +272,6 @@ task_editor_class_init (TaskEditorClass *class)
g_type_class_add_private (class, sizeof (TaskEditorPrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->constructor = task_editor_constructor;
object_class->dispose = task_editor_dispose;
object_class->constructed = task_editor_constructed;
@@ -333,6 +293,7 @@ task_editor_init (TaskEditor *te)
CompEditor *editor = COMP_EDITOR (te);
GtkUIManager *ui_manager;
GtkActionGroup *action_group;
+ GtkWidget *content_area;
GtkAction *action;
const gchar *id;
GError *error = NULL;
@@ -342,6 +303,28 @@ task_editor_init (TaskEditor *te)
te->priv->assignment_shown = TRUE;
te->priv->updating = FALSE;
+ te->priv->task_details_window = gtk_dialog_new_with_buttons (
+ _("Task Details"), GTK_WINDOW (te), GTK_DIALOG_MODAL,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+ g_signal_connect (
+ te->priv->task_details_window, "response",
+ G_CALLBACK (gtk_widget_hide), NULL);
+ g_signal_connect (
+ te->priv->task_details_window, "delete-event",
+ G_CALLBACK (gtk_widget_hide), NULL);
+
+ te->priv->task_details_page = task_details_page_new (editor);
+ content_area = gtk_dialog_get_content_area (
+ GTK_DIALOG (te->priv->task_details_window));
+ gtk_container_add (
+ GTK_CONTAINER (content_area),
+ comp_editor_page_get_widget (
+ (CompEditorPage *) te->priv->task_details_page));
+ gtk_widget_show_all (
+ gtk_bin_get_child (GTK_BIN (te->priv->task_details_window)));
+ comp_editor_append_page (
+ editor, COMP_EDITOR_PAGE (te->priv->task_details_page), NULL, FALSE);
+
action_group = comp_editor_get_action_group (editor, "individual");
gtk_action_group_add_actions (
action_group, task_entries,
@@ -386,6 +369,8 @@ task_editor_edit_comp (CompEditor *editor,
ECalComponentOrganizer organizer;
ECalClient *client;
GSList *attendees = NULL;
+ ESourceRegistry *registry;
+ EShell *shell;
priv = TASK_EDITOR_GET_PRIVATE (editor);
@@ -394,8 +379,11 @@ task_editor_edit_comp (CompEditor *editor,
if (COMP_EDITOR_CLASS (task_editor_parent_class)->edit_comp)
COMP_EDITOR_CLASS (task_editor_parent_class)->edit_comp (editor, comp);
+ shell = comp_editor_get_shell (editor);
client = comp_editor_get_client (editor);
+ registry = e_shell_get_registry (shell);
+
/* Get meeting related stuff */
e_cal_component_get_organizer (comp, &organizer);
e_cal_component_get_attendee_list (comp, &attendees);
@@ -450,7 +438,7 @@ task_editor_edit_comp (CompEditor *editor,
comp_editor_set_needs_send (
editor, priv->assignment_shown &&
- itip_organizer_is_user (comp, client));
+ itip_organizer_is_user (registry, comp, client));
priv->updating = FALSE;
}
@@ -461,6 +449,8 @@ task_editor_send_comp (CompEditor *editor,
gboolean strip_alarms)
{
TaskEditorPrivate *priv;
+ EShell *shell;
+ ESourceRegistry *registry;
ECalComponent *comp = NULL;
priv = TASK_EDITOR_GET_PRIVATE (editor);
@@ -470,6 +460,9 @@ task_editor_send_comp (CompEditor *editor,
method == E_CAL_COMPONENT_METHOD_CANCEL)
goto parent;
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
comp = task_page_get_cancel_comp (priv->task_page);
if (comp != NULL) {
ECalClient *client;
@@ -477,7 +470,7 @@ task_editor_send_comp (CompEditor *editor,
client = e_meeting_store_get_client (priv->model);
result = itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL, comp,
+ registry, E_CAL_COMPONENT_METHOD_CANCEL, comp,
client, NULL, NULL, NULL, strip_alarms, FALSE);
g_object_unref (comp);
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index 8b2bd1f98c..665e03eb30 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -34,6 +34,8 @@
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
@@ -47,8 +49,6 @@
#include <e-util/e-util-private.h>
#include <e-util/e-util.h>
-#include <libemail-utils/e-account-utils.h>
-
#include "../e-meeting-attendee.h"
#include "../e-meeting-list-view.h"
#include "../e-meeting-store.h"
@@ -87,7 +87,6 @@ struct _TaskPagePrivate {
GtkWidget *info_hbox;
GtkWidget *info_icon;
GtkWidget *info_string;
- gchar *subscriber_info_text;
GtkWidget *summary;
GtkWidget *summary_label;
@@ -102,7 +101,7 @@ struct _TaskPagePrivate {
GtkWidget *categories_btn;
GtkWidget *categories;
- GtkWidget *source_selector;
+ GtkWidget *source_combo_box;
/* Meeting related items */
GtkWidget *list_box;
@@ -150,32 +149,43 @@ get_current_identity (TaskPage *page,
gchar **name,
gchar **mailto)
{
- EAccountList *account_list;
- EIterator *iterator;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
+ GList *list, *iter;
GtkWidget *entry;
+ const gchar *extension_name;
const gchar *text;
gboolean match = FALSE;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
+ shell = comp_editor_get_shell (editor);
+
entry = gtk_bin_get_child (GTK_BIN (page->priv->organizer));
text = gtk_entry_get_text (GTK_ENTRY (entry));
if (text == NULL || *text == '\0')
return FALSE;
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- while (!match && e_iterator_is_valid (iterator)) {
- EAccount *account;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; !match && iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
const gchar *id_name;
const gchar *id_address;
gchar *identity;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
+ extension = e_source_get_extension (source, extension_name);
+
+ id_name = e_source_mail_identity_get_name (extension);
+ id_address = e_source_mail_identity_get_address (extension);
- id_name = account->id->name;
- id_address = account->id->address;
+ if (id_name == NULL || id_address == NULL)
+ continue;
identity = g_strdup_printf ("%s <%s>", id_name, id_address);
match = (g_ascii_strcasecmp (text, identity) == 0);
@@ -186,11 +196,9 @@ get_current_identity (TaskPage *page,
if (match && mailto != NULL)
*mailto = g_strdup_printf ("MAILTO:%s", id_address);
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return match;
}
@@ -253,12 +261,11 @@ check_starts_in_the_past (TaskPage *tpage)
if (start_in_past || due_in_past) {
gchar *tmp = g_strconcat ("<b>", start_in_past ? _("Task's start date is in the past") : "",
- start_in_past && due_in_past ? "\n" : "", due_in_past ? _("Task's due date is in the past") : "", "</b>",
- priv->subscriber_info_text ? "\n" : "", priv->subscriber_info_text, NULL);
+ start_in_past && due_in_past ? "\n" : "", due_in_past ? _("Task's due date is in the past") : "", "</b>", NULL);
task_page_set_info_string (tpage, GTK_STOCK_DIALOG_WARNING, tmp);
g_free (tmp);
} else {
- task_page_set_info_string (tpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+ task_page_set_info_string (tpage, NULL, NULL);
}
return TRUE;
@@ -301,7 +308,7 @@ sensitize_widgets (TaskPage *tpage)
sens = FALSE;
read_only = TRUE;
} else if (!check_starts_in_the_past (tpage)) {
- task_page_set_info_string (tpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+ task_page_set_info_string (tpage, NULL, NULL);
}
/* The list of organizers is set to be non-editable. Otherwise any
@@ -341,7 +348,7 @@ sensitize_widgets (TaskPage *tpage)
gtk_widget_hide (priv->organizer);
gtk_widget_hide (priv->invite);
gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->org_cal_label), _("_List:"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->org_cal_label), priv->source_selector);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (priv->org_cal_label), priv->source_combo_box);
} else {
gtk_widget_show (priv->invite);
gtk_widget_show (priv->calendar_label);
@@ -487,10 +494,12 @@ task_page_fill_widgets (CompEditorPage *page,
ECalComponentText text;
ECalComponentDateTime d;
ECalComponentClassification cl;
+ ESourceRegistry *registry;
CompEditor *editor;
CompEditorFlags flags;
GtkAction *action;
ECalClient *client;
+ EShell *shell;
GSList *l;
icalcomponent *icalcomp;
const gchar *categories, *uid;
@@ -504,6 +513,9 @@ task_page_fill_widgets (CompEditorPage *page,
editor = comp_editor_page_get_editor (page);
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Clean out old data */
if (priv->comp != NULL)
@@ -521,7 +533,8 @@ task_page_fill_widgets (CompEditorPage *page,
/* Clean the screen */
clear_widgets (tpage);
- priv->user_add = itip_get_comp_attendee (comp, client);
+ priv->user_add = itip_get_comp_attendee (
+ registry, comp, client);
/* Summary, description(s) */
e_cal_component_get_summary (comp, &text);
@@ -628,7 +641,7 @@ task_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (client)));
e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
@@ -639,7 +652,8 @@ task_page_fill_widgets (CompEditorPage *page,
gchar *name = NULL;
gchar *mailto = NULL;
- priv->user_add = itip_get_comp_attendee (comp, client);
+ priv->user_add = itip_get_comp_attendee (
+ registry, comp, client);
/* Organizer strings */
task_page_select_organizer (tpage, backend_addr);
@@ -651,7 +665,8 @@ task_page_fill_widgets (CompEditorPage *page,
const gchar *strip = itip_strip_mailto (organizer.value);
gchar *string;
- if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) {
if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
priv->user_org = TRUE;
} else {
@@ -1436,6 +1451,9 @@ task_page_set_info_string (TaskPage *tpage,
static gboolean
get_widgets (TaskPage *tpage)
{
+ EShell *shell;
+ ESourceRegistry *registry;
+ CompEditor *editor;
CompEditorPage *page = COMP_EDITOR_PAGE (tpage);
GtkEntryCompletion *completion;
TaskPagePrivate *priv;
@@ -1447,6 +1465,10 @@ get_widgets (TaskPage *tpage)
priv = tpage->priv;
+ editor = comp_editor_page_get_editor (page);
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
priv->main = e_builder_get_widget (priv->builder, "task-page");
if (!priv->main)
return FALSE;
@@ -1508,10 +1530,11 @@ get_widgets (TaskPage *tpage)
gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (priv->list_view));
gtk_box_pack_start (GTK_BOX (priv->list_box), sw, TRUE, TRUE, 0);
- priv->source_selector = e_builder_get_widget (priv->builder, "source");
- e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/tasks/sources");
+ priv->source_combo_box = e_builder_get_widget (priv->builder, "source");
+ e_source_combo_box_set_registry (
+ E_SOURCE_COMBO_BOX (priv->source_combo_box), registry);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->calendar_label), priv->source_selector);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (priv->calendar_label), priv->source_combo_box);
completion = e_category_completion_new ();
gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
@@ -1785,7 +1808,7 @@ tpage_client_opened_cb (GObject *source_object,
old_client = comp_editor_get_client (editor);
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (
@@ -1852,7 +1875,6 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_client_utils_open_new (
source, E_CLIENT_SOURCE_TYPE_TASKS,
FALSE, priv->open_cancellable,
- e_client_utils_authenticate_handler, NULL,
tpage_client_opened_cb, tpage);
g_object_unref (source);
@@ -1862,26 +1884,8 @@ static void
set_subscriber_info_string (TaskPage *tpage,
const gchar *backend_address)
{
- CompEditor *editor;
- ECalClient *client;
- ESource *source;
-
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
- client = comp_editor_get_client (editor);
- source = e_client_get_source (E_CLIENT (client));
-
- if (e_source_get_property (source, "subscriber")) {
- g_free (tpage->priv->subscriber_info_text);
- /* Translators: This string is used when we are creating a Task
- * on behalf of some other user */
- tpage->priv->subscriber_info_text = g_markup_printf_escaped (_("You are acting on behalf of %s"), backend_address);
- } else {
- g_free (tpage->priv->subscriber_info_text);
- tpage->priv->subscriber_info_text = NULL;
- }
-
if (!check_starts_in_the_past (tpage))
- task_page_set_info_string (tpage, tpage->priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, tpage->priv->subscriber_info_text);
+ task_page_set_info_string (tpage, NULL, NULL);
}
void
@@ -1900,7 +1904,7 @@ task_page_send_options_clicked_cb (TaskPage *tpage)
priv->sod = e_send_options_dialog_new ();
priv->sod->data->initialized = TRUE;
source = e_source_combo_box_ref_active (
- E_SOURCE_COMBO_BOX (priv->source_selector));
+ E_SOURCE_COMBO_BOX (priv->source_combo_box));
e_send_options_utils_set_default_data (
priv->sod, source, "task");
g_object_unref (source);
@@ -1977,7 +1981,7 @@ init_widgets (TaskPage *tpage)
/* Source selector */
g_signal_connect (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (source_changed_cb), tpage);
/* Connect the default signal handler to use to make sure the "changed"
@@ -2084,45 +2088,30 @@ task_page_select_organizer (TaskPage *tpage,
const gchar *backend_address)
{
TaskPagePrivate *priv = tpage->priv;
- CompEditor *editor;
const gchar *default_address;
- gboolean subscribed_cal = FALSE;
- ESource *source = NULL;
- ECalClient *client;
- const gchar *user_addr = NULL;
gint ii;
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
- client = comp_editor_get_client (editor);
-
- if (client)
- source = e_client_get_source (E_CLIENT (client));
- if (source)
- user_addr = e_source_get_property (source, "subscriber");
-
- if (user_addr)
- subscribed_cal = TRUE;
- else
- user_addr = (backend_address && *backend_address) ? backend_address : NULL;
+ /* Treat an empty backend address as NULL. */
+ if (backend_address == NULL && *backend_address == '\0')
+ backend_address = NULL;
default_address = priv->fallback_address;
- if (user_addr) {
+ if (backend_address != NULL) {
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
- if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
+ if (g_strrstr (priv->address_strings[ii], backend_address) != NULL) {
default_address = priv->address_strings[ii];
break;
}
}
}
- if (default_address) {
+ if (default_address != NULL) {
if (!priv->comp || !e_cal_component_has_organizer (priv->comp)) {
GtkEntry *entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->organizer)));
g_signal_handlers_block_by_func (entry, organizer_changed_cb, tpage);
gtk_entry_set_text (entry, default_address);
- gtk_widget_set_sensitive (priv->organizer, !subscribed_cal);
g_signal_handlers_unblock_by_func (entry, organizer_changed_cb, tpage);
}
} else
@@ -2143,6 +2132,9 @@ task_page_construct (TaskPage *tpage,
EMeetingStore *meeting_store,
ECalClient *client)
{
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
TaskPagePrivate *priv;
GtkComboBox *combo_box;
GtkListStore *list_store;
@@ -2150,6 +2142,9 @@ task_page_construct (TaskPage *tpage,
GtkTreeIter iter;
gint ii;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
+ shell = comp_editor_get_shell (editor);
+
priv = tpage->priv;
priv->meeting_store = g_object_ref (meeting_store);
priv->client = client;
@@ -2174,8 +2169,9 @@ task_page_construct (TaskPage *tpage,
model = gtk_combo_box_get_model (combo_box);
list_store = GTK_LIST_STORE (model);
- priv->address_strings = itip_get_user_identities ();
- priv->fallback_address = itip_get_fallback_identity ();
+ registry = e_shell_get_registry (shell);
+ priv->address_strings = itip_get_user_identities (registry);
+ priv->fallback_address = itip_get_fallback_identity (registry);
/* FIXME Could we just use a GtkComboBoxText? */
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
diff --git a/calendar/gui/dialogs/task-page.ui b/calendar/gui/dialogs/task-page.ui
index f3f85f5177..0603f44de4 100644
--- a/calendar/gui/dialogs/task-page.ui
+++ b/calendar/gui/dialogs/task-page.ui
@@ -438,7 +438,9 @@
</packing>
</child>
<child>
- <object class="ESourceComboBox" id="source">
+ <object class="ESourceComboBox" type-func="e_source_combo_box_get_type" id="source">
+ <property name="extension-name">Task List</property>
+ <property name="show-colors">True</property>
<property name="visible">True</property>
</object>
<packing>