aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/dialogs/memo-page.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/dialogs/memo-page.c')
-rw-r--r--calendar/gui/dialogs/memo-page.c733
1 files changed, 307 insertions, 426 deletions
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index e5aacb2937..9f3e5d85d4 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -47,8 +47,11 @@
#include "e-send-options-utils.h"
#include "memo-page.h"
+#define MEMO_PAGE_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), TYPE_MEMO_PAGE, MemoPagePrivate))
-/* Private part of the TaskPage structure */
+/* Private part of the MemoPage structure */
struct _MemoPagePrivate {
/* Glade XML data */
GladeXML *xml;
@@ -60,11 +63,6 @@ struct _MemoPagePrivate {
EAccountList *accounts;
- /* Bonobo Controller for the menu/toolbar */
- BonoboUIComponent *uic;
-
- ECalComponentClassification classification;
-
/* Generic informative messages placeholder */
GtkWidget *info_hbox;
GtkWidget *info_icon;
@@ -95,278 +93,100 @@ struct _MemoPagePrivate {
GList *address_strings;
ENameSelector *name_selector;
-
- gboolean updating;
-};
-
-static const int classification_map[] = {
- E_CAL_COMPONENT_CLASS_PUBLIC,
- E_CAL_COMPONENT_CLASS_PRIVATE,
- E_CAL_COMPONENT_CLASS_CONFIDENTIAL,
- -1
};
-
-
-static void memo_page_finalize (GObject *object);
-
-static GtkWidget *memo_page_get_widget (CompEditorPage *page);
-static void memo_page_focus_main_widget (CompEditorPage *page);
-static gboolean memo_page_fill_widgets (CompEditorPage *page, ECalComponent *comp);
+static void set_subscriber_info_string (MemoPage *mpage, const gchar *backend_address);
+static const char * get_recipients (ECalComponent *comp);
+static void sensitize_widgets (MemoPage *mpage);
static gboolean memo_page_fill_component (CompEditorPage *page, ECalComponent *comp);
static void memo_page_select_organizer (MemoPage *mpage, const char *backend_address);
-static void set_subscriber_info_string (MemoPage *mpage, const char *backend_address);
G_DEFINE_TYPE (MemoPage, memo_page, TYPE_COMP_EDITOR_PAGE)
-
-
-/**
- * memo_page_get_type:
- *
- * Registers the #TaskPage class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the #TaskPage class.
- **/
-
-/* Class initialization function for the memo page */
+/* Fills the widgets with default values */
static void
-memo_page_class_init (MemoPageClass *klass)
+clear_widgets (MemoPage *mpage)
{
- CompEditorPageClass *editor_page_class;
- GObjectClass *object_class;
+ GtkTextBuffer *buffer;
+ GtkTextView *view;
+ CompEditor *editor;
- editor_page_class = (CompEditorPageClass *) klass;
- object_class = (GObjectClass *) klass;
+ /* Summary */
+ e_dialog_editable_set (mpage->priv->summary_entry, NULL);
- editor_page_class->get_widget = memo_page_get_widget;
- editor_page_class->focus_main_widget = memo_page_focus_main_widget;
- editor_page_class->fill_widgets = memo_page_fill_widgets;
- editor_page_class->fill_component = memo_page_fill_component;
+ /* Description */
+ view = GTK_TEXT_VIEW (mpage->priv->memo_content);
+ buffer = gtk_text_view_get_buffer (view);
+ gtk_text_buffer_set_text (buffer, "", 0);
- object_class->finalize = memo_page_finalize;
+ /* Classification */
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+ comp_editor_set_classification (editor, E_CAL_COMPONENT_CLASS_PRIVATE);
+
+ /* Categories */
+ e_dialog_editable_set (mpage->priv->categories, NULL);
}
-/* Object initialization function for the memo page */
static void
-memo_page_init (MemoPage *mpage)
+memo_page_dispose (GObject *object)
{
MemoPagePrivate *priv;
- priv = g_new0 (MemoPagePrivate, 1);
- mpage->priv = priv;
-
- priv->xml = NULL;
-
- priv->main = NULL;
- priv->memo_content = NULL;
- priv->classification = E_CAL_COMPONENT_CLASS_NONE;
- priv->categories_btn = NULL;
- priv->categories = NULL;
+ priv = MEMO_PAGE_GET_PRIVATE (object);
- priv->info_hbox = NULL;
- priv->info_icon = NULL;
- priv->info_string = NULL;
-
- priv->updating = FALSE;
+ g_list_foreach (priv->address_strings, (GFunc) g_free, NULL);
+ g_list_free (priv->address_strings);
- priv->address_strings = NULL;
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (memo_page_parent_class)->dispose (object);
}
-/* Destroy handler for the memo page */
static void
memo_page_finalize (GObject *object)
{
- MemoPage *mpage;
MemoPagePrivate *priv;
- GList *l;
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_MEMO_PAGE (object));
-
- mpage = MEMO_PAGE (object);
- priv = mpage->priv;
+ priv = MEMO_PAGE_GET_PRIVATE (object);
- for (l = priv->address_strings; l != NULL; l = l->next)
- g_free (l->data);
- g_list_free (priv->address_strings);
-
- if (priv->main)
+ if (priv->main != NULL) {
g_object_unref (priv->main);
+ priv->main = NULL;
+ }
if (priv->xml) {
g_object_unref (priv->xml);
priv->xml = NULL;
}
- g_free (priv);
- mpage->priv = NULL;
-
- if (G_OBJECT_CLASS (memo_page_parent_class)->finalize)
- (* G_OBJECT_CLASS (memo_page_parent_class)->finalize) (object);
+ /* Chain up to parent's finalize() method. */
+ G_OBJECT_CLASS (memo_page_parent_class)->finalize (object);
}
-static void
-set_classification_menu (MemoPage *page, gint class)
-{
- bonobo_ui_component_freeze (page->priv->uic, NULL);
- switch (class) {
- case E_CAL_COMPONENT_CLASS_PUBLIC:
- bonobo_ui_component_set_prop (
- page->priv->uic, "/commands/ActionClassPublic",
- "state", "1", NULL);
- break;
- case E_CAL_COMPONENT_CLASS_CONFIDENTIAL:
- bonobo_ui_component_set_prop (
- page->priv->uic, "/commands/ActionClassConfidential",
- "state", "1", NULL);
- break;
- case E_CAL_COMPONENT_CLASS_PRIVATE:
- bonobo_ui_component_set_prop (
- page->priv->uic, "/commands/ActionClassPrivate",
- "state", "1", NULL);
- break;
- }
- bonobo_ui_component_thaw (page->priv->uic, NULL);
-}
-
-/* get_widget handler for the task page */
static GtkWidget *
memo_page_get_widget (CompEditorPage *page)
{
- MemoPage *mpage;
- MemoPagePrivate *priv;
-
- mpage = MEMO_PAGE (page);
- priv = mpage->priv;
+ MemoPagePrivate *priv = MEMO_PAGE_GET_PRIVATE (page);
return priv->main;
}
-/* focus_main_widget handler for the memo page */
static void
memo_page_focus_main_widget (CompEditorPage *page)
{
- MemoPage *mpage;
- MemoPagePrivate *priv;
-
- mpage = MEMO_PAGE (page);
- priv = mpage->priv;
+ MemoPagePrivate *priv = MEMO_PAGE_GET_PRIVATE (page);
gtk_widget_grab_focus (priv->summary_entry);
}
-/* Fills the widgets with default values */
-static void
-clear_widgets (MemoPage *mpage)
-{
- MemoPagePrivate *priv;
-
- priv = mpage->priv;
-
- /* Summary */
- e_dialog_editable_set (priv->summary_entry, NULL);
-
- /* memo content */
- gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->memo_content)), "", 0);
-
- /* Classification */
- priv->classification = E_CAL_COMPONENT_CLASS_PRIVATE;
- set_classification_menu (mpage, priv->classification);
-
- /* Categories */
- e_dialog_editable_set (priv->categories, NULL);
-}
-
-void
-memo_page_set_classification (MemoPage *page, ECalComponentClassification class)
-{
- page->priv->classification = class;
-}
-
-static void
-sensitize_widgets (MemoPage *mpage)
-{
- gboolean read_only, sens = FALSE, sensitize;
- MemoPagePrivate *priv;
-
- priv = mpage->priv;
-
- if (!e_cal_is_read_only (COMP_EDITOR_PAGE (mpage)->client, &read_only, NULL))
- read_only = TRUE;
-
- if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_IS_SHARED)
- sens = COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_PAGE_USER_ORG;
- else
- sens = TRUE;
-
- sensitize = (!read_only && sens);
-
- priv = mpage->priv;
-
- /* The list of organizers is set to be non-editable. Otherwise any
- * change in the displayed list causes an 'Account not found' error.
- */
- gtk_editable_set_editable (GTK_EDITABLE (GTK_COMBO (priv->org_combo)->entry), FALSE);
-
- gtk_text_view_set_editable (GTK_TEXT_VIEW (priv->memo_content), sensitize);
- gtk_widget_set_sensitive (priv->start_date, sensitize);
- gtk_widget_set_sensitive (priv->categories_btn, !read_only);
- gtk_editable_set_editable (GTK_EDITABLE (priv->categories), !read_only);
- gtk_editable_set_editable (GTK_EDITABLE (priv->summary_entry), sensitize);
-
- if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_IS_SHARED) {
- if (priv->to_entry) {
- gtk_editable_set_editable (GTK_EDITABLE (priv->to_entry), !read_only);
- gtk_widget_grab_focus (priv->to_entry);
- }
- }
-
- bonobo_ui_component_set_prop (priv->uic, "/commands/ActionClassPublic", "sensitive", sensitize ? "1" : "0"
- , NULL);
- bonobo_ui_component_set_prop (priv->uic, "/commands/ActionClassPrivate", "sensitive", sensitize ? "1" : "0"
- , NULL);
- bonobo_ui_component_set_prop (priv->uic, "/commands/ActionClassConfidential", "sensitive",
- sensitize ? "1" : "0", NULL);
- bonobo_ui_component_set_prop (priv->uic, "/commands/InsertAttachments", "sensitive", sensitize ? "1" : "0"
- , NULL);
-}
-
-/* returns empty string rather than NULL because of simplicity of usage */
-static const char *
-get_recipients (ECalComponent *comp)
-{
- icalcomponent *icalcomp;
- icalproperty *icalprop;
-
- g_return_val_if_fail (comp != NULL, "");
-
- icalcomp = e_cal_component_get_icalcomponent (comp);
-
- /* first look if we have there such property */
- for (icalprop = icalcomponent_get_first_property (icalcomp, ICAL_X_PROPERTY);
- icalprop;
- icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY)) {
- const char *xname = icalproperty_get_x_name (icalprop);
-
- if (xname && strcmp (xname, "X-EVOLUTION-RECIPIENTS") == 0)
- break;
- }
-
- if (icalprop)
- return icalproperty_get_x (icalprop);
-
- return "";
-}
-
-
-/* fill_widgets handler for the memo page */
static gboolean
-memo_page_fill_widgets (CompEditorPage *page, ECalComponent *comp)
+memo_page_fill_widgets (CompEditorPage *page,
+ ECalComponent *comp)
{
MemoPage *mpage;
MemoPagePrivate *priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
+ ECal *client;
ECalComponentClassification cl;
ECalComponentText text;
ECalComponentDateTime d;
@@ -377,7 +197,9 @@ memo_page_fill_widgets (CompEditorPage *page, ECalComponent *comp)
mpage = MEMO_PAGE (page);
priv = mpage->priv;
- priv->updating = TRUE;
+ editor = comp_editor_page_get_editor (page);
+ client = comp_editor_get_client (editor);
+ flags = comp_editor_get_flags (editor);
/* Clean the screen */
clear_widgets (mpage);
@@ -406,41 +228,19 @@ memo_page_fill_widgets (CompEditorPage *page, ECalComponent *comp)
e_date_edit_set_date (E_DATE_EDIT (priv->start_date),
start_tt->year, start_tt->month,
start_tt->day);
- } else if (!(page->flags & COMP_EDITOR_PAGE_NEW_ITEM))
+ } else if (!(flags & COMP_EDITOR_NEW_ITEM))
e_date_edit_set_time (E_DATE_EDIT (priv->start_date), -1);
e_cal_component_free_datetime (&d);
/* Classification. */
e_cal_component_get_classification (comp, &cl);
-
- switch (cl) {
- case E_CAL_COMPONENT_CLASS_PUBLIC:
- {
- cl = E_CAL_COMPONENT_CLASS_PUBLIC;
- break;
- }
- case E_CAL_COMPONENT_CLASS_PRIVATE:
- {
- cl = E_CAL_COMPONENT_CLASS_PRIVATE;
- break;
- }
- case E_CAL_COMPONENT_CLASS_CONFIDENTIAL:
- {
- cl = E_CAL_COMPONENT_CLASS_CONFIDENTIAL;
- break;
- }
- default:
- /* default to PUBLIC */
- cl = E_CAL_COMPONENT_CLASS_PUBLIC;
- break;
- }
- set_classification_menu (mpage, cl);
+ comp_editor_set_classification (editor, cl);
/* Categories */
e_cal_component_get_categories (comp, &categories);
e_dialog_editable_set (priv->categories, categories);
- e_cal_get_cal_address (COMP_EDITOR_PAGE (mpage)->client, &backend_addr, NULL);
+ e_cal_get_cal_address (client, &backend_addr, NULL);
set_subscriber_info_string (mpage, backend_addr);
if (e_cal_component_has_organizer (comp)) {
@@ -457,7 +257,7 @@ memo_page_fill_widgets (CompEditorPage *page, ECalComponent *comp)
else
string = g_strdup (strip);
- if (itip_organizer_is_user (comp, page->client) || itip_sentby_is_user (comp)) {
+ if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp)) {
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->org_combo)->entry), string);
} else {
list = g_list_append (list, string);
@@ -475,18 +275,117 @@ memo_page_fill_widgets (CompEditorPage *page, ECalComponent *comp)
/* Source */
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (page->client));
+ e_cal_get_source (client));
- if (priv->to_entry && (page->flags & COMP_EDITOR_PAGE_IS_SHARED) && !(page->flags & COMP_EDITOR_PAGE_NEW_ITEM))
+ if (priv->to_entry && (flags & COMP_EDITOR_IS_SHARED) && !(flags & COMP_EDITOR_NEW_ITEM))
gtk_entry_set_text (GTK_ENTRY (priv->to_entry), get_recipients (comp));
- priv->updating = FALSE;
-
sensitize_widgets (mpage);
return TRUE;
}
+static void
+memo_page_class_init (MemoPageClass *class)
+{
+ CompEditorPageClass *editor_page_class;
+ GObjectClass *object_class;
+
+ g_type_class_add_private (class, sizeof (MemoPagePrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->dispose = memo_page_dispose;
+ object_class->finalize = memo_page_finalize;
+
+ editor_page_class = COMP_EDITOR_PAGE_CLASS (class);
+ editor_page_class->get_widget = memo_page_get_widget;
+ editor_page_class->focus_main_widget = memo_page_focus_main_widget;
+ editor_page_class->fill_widgets = memo_page_fill_widgets;
+ editor_page_class->fill_component = memo_page_fill_component;
+}
+
+static void
+memo_page_init (MemoPage *mpage)
+{
+ mpage->priv = MEMO_PAGE_GET_PRIVATE (mpage);
+}
+
+static void
+sensitize_widgets (MemoPage *mpage)
+{
+ GtkActionGroup *action_group;
+ gboolean read_only, sens = FALSE, sensitize;
+ CompEditor *editor;
+ CompEditorFlags flags;
+ MemoPagePrivate *priv;
+ ECal *client;
+
+ priv = mpage->priv;
+
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+ client = comp_editor_get_client (editor);
+ flags = comp_editor_get_flags (editor);
+
+ if (!e_cal_is_read_only (client, &read_only, NULL))
+ read_only = TRUE;
+
+ if (flags & COMP_EDITOR_IS_SHARED)
+ sens = flags & COMP_EDITOR_USER_ORG;
+ else
+ sens = TRUE;
+
+ sensitize = (!read_only && sens);
+
+ /* The list of organizers is set to be non-editable. Otherwise any
+ * change in the displayed list causes an 'Account not found' error.
+ */
+ gtk_editable_set_editable (GTK_EDITABLE (GTK_COMBO (priv->org_combo)->entry), FALSE);
+
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (priv->memo_content), sensitize);
+ gtk_widget_set_sensitive (priv->start_date, sensitize);
+ gtk_widget_set_sensitive (priv->categories_btn, !read_only);
+ gtk_editable_set_editable (GTK_EDITABLE (priv->categories), !read_only);
+ gtk_editable_set_editable (GTK_EDITABLE (priv->summary_entry), sensitize);
+
+ if (flags & COMP_EDITOR_IS_SHARED) {
+ if (priv->to_entry) {
+ gtk_editable_set_editable (GTK_EDITABLE (priv->to_entry), !read_only);
+ gtk_widget_grab_focus (priv->to_entry);
+ }
+ }
+
+ action_group = comp_editor_get_action_group (editor, "individual");
+ gtk_action_group_set_sensitive (action_group, sensitize);
+}
+
+/* returns empty string rather than NULL because of simplicity of usage */
+static const char *
+get_recipients (ECalComponent *comp)
+{
+ icalcomponent *icalcomp;
+ icalproperty *icalprop;
+
+ g_return_val_if_fail (comp != NULL, "");
+
+ icalcomp = e_cal_component_get_icalcomponent (comp);
+
+ /* first look if we have there such property */
+ for (icalprop = icalcomponent_get_first_property (icalcomp, ICAL_X_PROPERTY);
+ icalprop;
+ icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY)) {
+ const char *xname = icalproperty_get_x_name (icalprop);
+
+ if (xname && strcmp (xname, "X-EVOLUTION-RECIPIENTS") == 0)
+ break;
+ }
+
+ if (icalprop)
+ return icalproperty_get_x (icalprop);
+
+ return "";
+}
+
+
static gboolean
fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
{
@@ -607,12 +506,10 @@ fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
static EAccount *
get_current_account (MemoPage *page)
{
- MemoPagePrivate *priv;
+ MemoPagePrivate *priv = page->priv;
EIterator *it;
const char *str;
- priv = page->priv;
-
str = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (priv->org_combo)->entry));
if (!str)
return NULL;
@@ -637,10 +534,15 @@ get_current_account (MemoPage *page)
/* fill_component handler for the memo page */
static gboolean
-memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
+memo_page_fill_component (CompEditorPage *page,
+ ECalComponent *comp)
{
MemoPage *mpage;
MemoPagePrivate *priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
+ ECal *client;
+ ECalComponentClassification classification;
ECalComponentDateTime start_date;
struct icaltimetype start_tt;
char *cat, *str;
@@ -650,6 +552,11 @@ memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
mpage = MEMO_PAGE (page);
priv = mpage->priv;
+
+ editor = comp_editor_page_get_editor (page);
+ client = comp_editor_get_client (editor);
+ flags = comp_editor_get_flags (editor);
+
text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->memo_content));
/* Summary */
@@ -738,7 +645,8 @@ memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
e_cal_component_set_dtstart (comp, NULL);
/* Classification. */
- e_cal_component_set_classification (comp, priv->classification);
+ classification = comp_editor_get_classification (editor);
+ e_cal_component_set_classification (comp, classification);
/* Categories */
cat = e_dialog_editable_get (priv->categories);
@@ -752,13 +660,13 @@ memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
g_free (str);
/* change recipients only when creating new item, after that no such action is available */
- if ((page->flags & COMP_EDITOR_PAGE_IS_SHARED) && (page->flags & COMP_EDITOR_PAGE_NEW_ITEM) && fill_comp_with_recipients (priv->name_selector, comp)) {
+ if ((flags & COMP_EDITOR_IS_SHARED) && (flags & COMP_EDITOR_NEW_ITEM) && fill_comp_with_recipients (priv->name_selector, comp)) {
ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL};
EAccount *a;
gchar *backend_addr = NULL, *org_addr = NULL, *sentby = NULL;
- e_cal_get_cal_address (page->client, &backend_addr, NULL);
+ e_cal_get_cal_address (client, &backend_addr, NULL);
/* Find the identity for the organizer or sentby field */
a = get_current_account (mpage);
@@ -789,8 +697,8 @@ memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
e_cal_component_set_organizer (comp, &organizer);
- if (page->flags & COMP_EDITOR_PAGE_NEW_ITEM)
- comp_editor_page_notify_needs_send (page);
+ if (flags & COMP_EDITOR_NEW_ITEM)
+ comp_editor_set_needs_send (editor, TRUE);
g_free (backend_addr);
g_free (org_addr);
@@ -893,89 +801,82 @@ get_widgets (MemoPage *mpage)
* category list dialog.
*/
static void
-categories_clicked_cb (GtkWidget *button, gpointer data)
-{
- MemoPage *mpage;
- MemoPagePrivate *priv;
- GtkWidget *entry;
-
- mpage = MEMO_PAGE (data);
- priv = mpage->priv;
-
- entry = priv->categories;
- e_categories_config_open_dialog_for_entry (GTK_ENTRY (entry));
-}
-
-/* This is called when any field is changed; it notifies upstream. */
-static void
-field_changed_cb (GtkWidget *widget, gpointer data)
+categories_clicked_cb (GtkWidget *button,
+ MemoPage *mpage)
{
- MemoPage *mpage;
- MemoPagePrivate *priv;
-
- mpage = MEMO_PAGE (data);
- priv = mpage->priv;
+ GtkEntry *entry;
- if (!priv->updating)
- comp_editor_page_notify_changed (COMP_EDITOR_PAGE (mpage));
+ entry = GTK_ENTRY (mpage->priv->categories);
+ e_categories_config_open_dialog_for_entry (entry);
}
static void
-source_changed_cb (ESourceComboBox *source_combo_box, MemoPage *mpage)
+source_changed_cb (ESourceComboBox *source_combo_box,
+ MemoPage *mpage)
{
MemoPagePrivate *priv = mpage->priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
ESource *source;
+ ECal *client;
- source = e_source_combo_box_get_active (source_combo_box);
+ if (comp_editor_page_get_updating (COMP_EDITOR_PAGE (mpage)))
+ return;
- if (!priv->updating) {
- ECal *client;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+ flags = comp_editor_get_flags (editor);
- client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_JOURNAL);
- if (!client || !e_cal_open (client, FALSE, NULL)) {
- GtkWidget *dialog;
+ client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_JOURNAL);
+ source = e_source_combo_box_get_active (source_combo_box);
- if (client)
- g_object_unref (client);
+ if (!client || !e_cal_open (client, FALSE, NULL)) {
+ GtkWidget *dialog;
+ ECal *old_client;
- e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (COMP_EDITOR_PAGE (mpage)->client));
+ old_client = comp_editor_get_client (editor);
- dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
- _("Unable to open memos in '%s'."),
- e_source_peek_name (source));
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- } else {
- comp_editor_notify_client_changed (
- COMP_EDITOR (gtk_widget_get_toplevel (priv->main)),
- client);
+ if (client)
+ g_object_unref (client);
- if (client) {
- gchar *backend_addr = NULL;
+ e_source_combo_box_set_active (
+ E_SOURCE_COMBO_BOX (priv->source_selector),
+ e_cal_get_source (old_client));
- e_cal_get_cal_address(client, &backend_addr, NULL);
+ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
+ _("Unable to open memos in '%s'."),
+ e_source_peek_name (source));
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ } else {
+ comp_editor_set_client (editor, client);
- if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_PAGE_IS_SHARED)
- memo_page_select_organizer (mpage, backend_addr);
+ if (client) {
+ gchar *backend_addr = NULL;
- set_subscriber_info_string (mpage, backend_addr);
- g_free (backend_addr);
- }
+ e_cal_get_cal_address(client, &backend_addr, NULL);
+
+ if (flags & COMP_EDITOR_IS_SHARED)
+ memo_page_select_organizer (mpage, backend_addr);
- sensitize_widgets (mpage);
+ set_subscriber_info_string (mpage, backend_addr);
+ g_free (backend_addr);
}
+
+ sensitize_widgets (mpage);
}
}
static void
-set_subscriber_info_string (MemoPage *mpage, const char *backend_address)
+set_subscriber_info_string (MemoPage *mpage,
+ const gchar *backend_address)
{
- ECal *client = COMP_EDITOR_PAGE (mpage)->client;
+ CompEditor *editor;
+ ECal *client;
ESource *source;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+ client = comp_editor_get_client (editor);
source = e_cal_get_source (client);
if (e_source_get_property (source, "subscriber"))
@@ -987,136 +888,106 @@ set_subscriber_info_string (MemoPage *mpage, const char *backend_address)
memo_page_set_info_string (mpage, NULL, NULL);
}
-/*sets the current focused widget */
-static gboolean
-widget_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
- MemoPage *mpage;
- mpage = MEMO_PAGE (data);
-
- comp_editor_page_set_focused_widget (COMP_EDITOR_PAGE (mpage), widget);
-
- return FALSE;
-}
-
-/*unset the current focused widget */
-static gboolean
-widget_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
- MemoPage *mpage;
- mpage = MEMO_PAGE (data);
-
- comp_editor_page_unset_focused_widget (COMP_EDITOR_PAGE (mpage), widget);
-
- return FALSE;
-}
-
-/* Callback used when the summary changes; we emit the notification signal. */
static void
-summary_changed_cb (GtkEditable *editable, gpointer data)
+summary_changed_cb (GtkEditable *editable,
+ CompEditorPage *page)
{
- MemoPage *mpage;
- MemoPagePrivate *priv;
+ CompEditor *editor;
gchar *summary;
- mpage = MEMO_PAGE (data);
- priv = mpage->priv;
-
- if (priv->updating)
+ if (comp_editor_page_get_updating (page))
return;
+ editor = comp_editor_page_get_editor (page);
summary = e_dialog_editable_get (GTK_WIDGET (editable));
- comp_editor_page_notify_summary_changed (COMP_EDITOR_PAGE (mpage),
- summary);
+ comp_editor_set_summary (editor, summary);
g_free (summary);
}
static void
-to_button_clicked_cb (GtkButton *button, gpointer data)
+to_button_clicked_cb (GtkButton *button,
+ MemoPage *mpage)
{
- MemoPage *page = data;
- MemoPagePrivate *priv = page->priv;
ENameSelectorDialog *name_selector_dialog;
- name_selector_dialog = e_name_selector_peek_dialog (priv->name_selector);
+ name_selector_dialog = e_name_selector_peek_dialog (
+ mpage->priv->name_selector);
gtk_widget_show (GTK_WIDGET (name_selector_dialog));
}
-static void
-response_cb (ENameSelectorDialog *name_selector_dialog, gint response, gpointer user_data)
-{
- gtk_widget_hide (GTK_WIDGET (name_selector_dialog));
-}
-
/* Hooks the widget signals */
static gboolean
init_widgets (MemoPage *mpage)
{
- MemoPagePrivate *priv;
- GtkTextBuffer *text_buffer;
-
- priv = mpage->priv;
+ MemoPagePrivate *priv = mpage->priv;
+ GtkTextBuffer *buffer;
+ GtkTextView *view;
/* Generic informative messages */
gtk_widget_hide (priv->info_hbox);
/* Summary */
- g_signal_connect((priv->summary_entry), "changed",
- G_CALLBACK (summary_changed_cb), mpage);
- g_signal_connect(priv->summary_entry, "focus-in-event",
- G_CALLBACK (widget_focus_in_cb), mpage);
- g_signal_connect(priv->summary_entry, "focus-out-event",
- G_CALLBACK (widget_focus_out_cb), mpage);
+ g_signal_connect (
+ priv->summary_entry, "changed",
+ G_CALLBACK (summary_changed_cb), mpage);
/* Memo Content */
- text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->memo_content));
-
- gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (priv->memo_content), GTK_WRAP_WORD);
-
- g_signal_connect(priv->memo_content, "focus-in-event",
- G_CALLBACK (widget_focus_in_cb), mpage);
- g_signal_connect(priv->memo_content, "focus-out-event",
- G_CALLBACK (widget_focus_out_cb), mpage);
+ view = GTK_TEXT_VIEW (priv->memo_content);
+ buffer = gtk_text_view_get_buffer (view);
+ gtk_text_view_set_wrap_mode (view, GTK_WRAP_WORD);
/* Categories button */
- g_signal_connect((priv->categories_btn), "clicked",
- G_CALLBACK (categories_clicked_cb), mpage);
+ g_signal_connect(
+ priv->categories_btn, "clicked",
+ G_CALLBACK (categories_clicked_cb), mpage);
/* Source selector */
- g_signal_connect((priv->source_selector), "changed",
- G_CALLBACK (source_changed_cb), mpage);
+ g_signal_connect (
+ priv->source_selector, "changed",
+ G_CALLBACK (source_changed_cb), mpage);
/* Connect the default signal handler to use to make sure the "changed"
field gets set whenever a field is changed. */
/* Belongs to priv->memo_content */
- g_signal_connect ((text_buffer), "changed",
- G_CALLBACK (field_changed_cb), mpage);
+ g_signal_connect_swapped (
+ buffer, "changed",
+ G_CALLBACK (comp_editor_page_changed), mpage);
- g_signal_connect((priv->categories), "changed",
- G_CALLBACK (field_changed_cb), mpage);
+ g_signal_connect_swapped (
+ priv->categories, "changed",
+ G_CALLBACK (comp_editor_page_changed), mpage);
- g_signal_connect((priv->summary_entry), "changed",
- G_CALLBACK (field_changed_cb), mpage);
+ g_signal_connect_swapped (
+ priv->summary_entry, "changed",
+ G_CALLBACK (comp_editor_page_changed), mpage);
- g_signal_connect((priv->source_selector), "changed",
- G_CALLBACK (field_changed_cb), mpage);
+ g_signal_connect_swapped (
+ priv->source_selector, "changed",
+ G_CALLBACK (comp_editor_page_changed), mpage);
- g_signal_connect((priv->start_date), "changed",
- G_CALLBACK (field_changed_cb), mpage);
+ g_signal_connect_swapped (
+ priv->start_date, "changed",
+ G_CALLBACK (comp_editor_page_changed), mpage);
if (priv->name_selector) {
ENameSelectorDialog *name_selector_dialog;
name_selector_dialog = e_name_selector_peek_dialog (priv->name_selector);
- g_signal_connect (name_selector_dialog, "response",
- G_CALLBACK (response_cb), mpage);
- g_signal_connect ((priv->to_button), "clicked", G_CALLBACK (to_button_clicked_cb), mpage);
- g_signal_connect ((priv->to_entry), "changed", G_CALLBACK (field_changed_cb), mpage);
+ g_signal_connect (
+ name_selector_dialog, "response",
+ G_CALLBACK (gtk_widget_hide), NULL);
+ g_signal_connect (
+ priv->to_button, "clicked",
+ G_CALLBACK (to_button_clicked_cb), mpage);
+ g_signal_connect_swapped (
+ priv->to_entry, "changed",
+ G_CALLBACK (comp_editor_page_changed), mpage);
}
- memo_page_set_show_categories (mpage, calendar_config_get_show_categories());
+ memo_page_set_show_categories (
+ mpage, calendar_config_get_show_categories());
return TRUE;
}
@@ -1138,7 +1009,10 @@ static void
memo_page_select_organizer (MemoPage *mpage, const char *backend_address)
{
MemoPagePrivate *priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
GList *l;
+ ECal *client;
EAccount *def_account;
gchar *def_address = NULL;
const char *default_address;
@@ -1151,8 +1025,12 @@ memo_page_select_organizer (MemoPage *mpage, const char *backend_address)
def_address = g_strdup_printf("%s <%s>", def_account->id->name, def_account->id->address);
priv = mpage->priv;
- if (COMP_EDITOR_PAGE (mpage)->client)
- source = e_cal_get_source (COMP_EDITOR_PAGE (mpage)->client);
+ 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_cal_get_source (client);
if (source)
user_addr = e_source_get_property (source, "subscriber");
@@ -1173,7 +1051,7 @@ memo_page_select_organizer (MemoPage *mpage, const char *backend_address)
default_address = def_address;
if (default_address) {
- if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_PAGE_NEW_ITEM) {
+ if (flags & COMP_EDITOR_NEW_ITEM) {
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->org_combo)->entry), default_address);
/* FIXME: Use accessor functions to access private members of a GtkCombo widget */
gtk_widget_set_sensitive (GTK_WIDGET (GTK_COMBO (priv->org_combo)->button), !subscribed_cal);
@@ -1196,13 +1074,15 @@ memo_page_select_organizer (MemoPage *mpage, const char *backend_address)
MemoPage *
memo_page_construct (MemoPage *mpage)
{
- MemoPagePrivate *priv;
+ MemoPagePrivate *priv = mpage->priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
EIterator *it;
char *gladefile;
EAccount *a;
- CompEditorPageFlags flags = COMP_EDITOR_PAGE (mpage)->flags;
- priv = mpage->priv;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+ flags = comp_editor_get_flags (editor);
gladefile = g_build_filename (EVOLUTION_GLADEDIR,
"memo-page.glade",
@@ -1222,7 +1102,7 @@ memo_page_construct (MemoPage *mpage)
return NULL;
}
- if (flags & COMP_EDITOR_PAGE_IS_SHARED) {
+ if (flags & COMP_EDITOR_IS_SHARED) {
priv->accounts = itip_addresses_get ();
for (it = e_list_get_iterator((EList *)priv->accounts);
e_iterator_is_valid(it);
@@ -1257,7 +1137,7 @@ memo_page_construct (MemoPage *mpage)
gtk_widget_show (priv->to_entry);
gtk_widget_show (priv->to_button);
- if (!(flags & COMP_EDITOR_PAGE_NEW_ITEM)) {
+ if (!(flags & COMP_EDITOR_NEW_ITEM)) {
gtk_widget_set_sensitive (priv->to_button, FALSE);
gtk_widget_set_sensitive (priv->to_entry, FALSE);
}
@@ -1281,17 +1161,17 @@ memo_page_construct (MemoPage *mpage)
* not be created.
**/
MemoPage *
-memo_page_new (BonoboUIComponent *uic, CompEditorPageFlags flags)
+memo_page_new (CompEditor *editor)
{
MemoPage *mpage;
- mpage = g_object_new (TYPE_MEMO_PAGE, NULL);
- mpage->priv->uic = uic;
- COMP_EDITOR_PAGE (mpage)->flags = flags;
+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL);
+
+ mpage = g_object_new (TYPE_MEMO_PAGE, "editor", editor, NULL);
if (!memo_page_construct (mpage)) {
g_object_unref (mpage);
- return NULL;
+ g_return_val_if_reached (NULL);
}
return mpage;
@@ -1302,13 +1182,13 @@ GtkWidget *memo_page_create_date_edit (void);
GtkWidget *
memo_page_create_date_edit (void)
{
- GtkWidget *dedit;
+ GtkWidget *widget;
- dedit = comp_editor_new_date_edit (TRUE, FALSE, TRUE);
- e_date_edit_set_allow_no_date_set (E_DATE_EDIT (dedit), TRUE);
- gtk_widget_show (dedit);
+ widget = comp_editor_new_date_edit (TRUE, FALSE, TRUE);
+ e_date_edit_set_allow_no_date_set (E_DATE_EDIT (widget), TRUE);
+ gtk_widget_show (widget);
- return dedit;
+ return widget;
}
GtkWidget *memo_page_create_source_combo_box (void);
@@ -1316,18 +1196,19 @@ GtkWidget *memo_page_create_source_combo_box (void);
GtkWidget *
memo_page_create_source_combo_box (void)
{
- GtkWidget *combo_box;
- GConfClient *gconf_client;
+ GtkWidget *widget;
+ GConfClient *client;
ESourceList *source_list;
- gconf_client = gconf_client_get_default ();
+ client = gconf_client_get_default ();
source_list = e_source_list_new_for_gconf (
- gconf_client, "/apps/evolution/memos/sources");
+ client, "/apps/evolution/memos/sources");
+
+ widget = e_source_combo_box_new (source_list);
+ gtk_widget_show (widget);
- combo_box = e_source_combo_box_new (source_list);
g_object_unref (source_list);
- g_object_unref (gconf_client);
+ g_object_unref (client);
- gtk_widget_show (combo_box);
- return combo_box;
+ return widget;
}