[evolution] Bug 319195 - Add options to simplify Contact Editor
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 319195 - Add options to simplify Contact Editor
- Date: Wed, 24 Sep 2014 06:56:28 +0000 (UTC)
commit d38e33193d02e8760b3ae088bf3e75b34c0ff981
Author: Christian Schaarschmidt <schaarsc gmx de>
Date: Wed Sep 24 08:55:54 2014 +0200
Bug 319195 - Add options to simplify Contact Editor
addressbook/gui/contact-editor/contact-editor.ui | 137 +++++-
addressbook/gui/contact-editor/e-contact-editor.c | 579 +++++++++++++++-----
.../org.gnome.evolution.addressbook.gschema.xml.in | 52 +--
3 files changed, 563 insertions(+), 205 deletions(-)
---
diff --git a/addressbook/gui/contact-editor/contact-editor.ui
b/addressbook/gui/contact-editor/contact-editor.ui
index 9ccb3e8..1c5dd93 100644
--- a/addressbook/gui/contact-editor/contact-editor.ui
+++ b/addressbook/gui/contact-editor/contact-editor.ui
@@ -1958,7 +1958,34 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">0</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="button-config">
+ <property name="direction">up</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">False</property>
+ <property name="use-underline">True</property>
+ <property name="halign">end</property>
+ <property name="tooltip_text" translatable="yes">Options</property>
+ <style>
+ <class name="image-button"/>
+ </style><child>
+ <object class="GtkImage" id="gears-icon">
+ <property name="visible">True</property>
+ <property name="icon-name">emblem-system-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
@@ -1974,7 +2001,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
@@ -1992,7 +2019,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
@@ -2010,4 +2037,108 @@
<action-widget response="-5">button-ok</action-widget>
</action-widgets>
</object>
+
+ <object class="GtkMenu" id="menu-editor-config">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-phone">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Telephone</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-sip">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show SIP Address</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-im">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Instant Messaging</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-web">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Web Addresses</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-job">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Job section</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-misc">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Miscellaneous</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-home">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Home Mailing Address</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-work">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Work Mailing Address</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-other">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Other Mailing Address</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem-config-notes">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Show Notes</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
+
</interface>
diff --git a/addressbook/gui/contact-editor/e-contact-editor.c
b/addressbook/gui/contact-editor/e-contact-editor.c
index d8c15a4..e0a5485 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -55,8 +55,24 @@
#define IM_SLOTS 50
#define ADDRESS_SLOTS 3
+/* represents index in address_name */
+#define ADDRESS_SLOT_HOME 1
+#define ADDRESS_SLOT_WORK 0
+#define ADDRESS_SLOT_OTHER 2
+
#define EVOLUTION_UI_SLOT_PARAM "X-EVOLUTION-UI-SLOT"
+#define CHECK_PHONE 1
+#define CHECK_SIP 2
+#define CHECK_IM 3
+#define CHECK_HOME 4
+#define CHECK_WORK 5
+#define CHECK_OTHER 6
+#define CHECK_WEB 7
+#define CHECK_JOB 8
+#define CHECK_MISC 9
+#define CHECK_NOTE 10
+
/* IM columns */
enum {
COLUMN_IM_ICON,
@@ -1529,6 +1545,397 @@ init_sip (EContactEditor *editor)
gtk_expander_set_expanded (expander, TRUE);
}
+static gboolean
+check_dyntable_for_data (EContactEditor *editor,
+ const gchar *name)
+{
+ EContactEditorDynTable *dyntable;
+ GtkTreeModel *tree_model;
+ GtkTreeIter iter;
+
+ dyntable = E_CONTACT_EDITOR_DYNTABLE (e_builder_get_widget (editor->priv->builder, name));
+ tree_model = GTK_TREE_MODEL (e_contact_editor_dyntable_extract_data (dyntable));
+
+ return gtk_tree_model_get_iter_first (tree_model, &iter);
+}
+
+static void
+extract_address_textview (EContactEditor *editor,
+ gint record,
+ EContactAddress *address)
+{
+ gchar *textview_name;
+ GtkWidget *textview;
+ GtkTextBuffer *text_buffer;
+ GtkTextIter iter_1, iter_2;
+
+ textview_name = g_strdup_printf ("textview-%s-address", address_name[record]);
+ textview = e_builder_get_widget (editor->priv->builder, textview_name);
+ g_free (textview_name);
+
+ text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
+ gtk_text_buffer_get_start_iter (text_buffer, &iter_1);
+
+ /* Skip blank lines */
+ while (gtk_text_iter_get_chars_in_line (&iter_1) < 1 &&
+ !gtk_text_iter_is_end (&iter_1))
+ gtk_text_iter_forward_line (&iter_1);
+
+ if (gtk_text_iter_is_end (&iter_1))
+ return;
+
+ iter_2 = iter_1;
+ gtk_text_iter_forward_to_line_end (&iter_2);
+
+ /* Extract street (first line of text) */
+ address->street = gtk_text_iter_get_text (&iter_1, &iter_2);
+
+ iter_1 = iter_2;
+ gtk_text_iter_forward_line (&iter_1);
+
+ if (gtk_text_iter_is_end (&iter_1))
+ return;
+
+ gtk_text_iter_forward_to_end (&iter_2);
+
+ /* Extract extended address (remaining lines of text) */
+ address->ext = gtk_text_iter_get_text (&iter_1, &iter_2);
+}
+
+static gchar *
+extract_address_field (EContactEditor *editor,
+ gint record,
+ const gchar *widget_field_name)
+{
+ gchar *entry_name;
+ GtkWidget *entry;
+
+ entry_name = g_strdup_printf (
+ "entry-%s-%s", address_name[record], widget_field_name);
+ entry = e_builder_get_widget (editor->priv->builder, entry_name);
+ g_free (entry_name);
+
+ return g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+}
+
+static void
+extract_address_from_gui (EContactEditor* editor,
+ EContactAddress* address,
+ gint record)
+{
+ extract_address_textview (editor, record, address);
+ address->locality = extract_address_field (editor, record, "city");
+ address->region = extract_address_field (editor, record, "state");
+ address->code = extract_address_field (editor, record, "zip");
+ address->country = extract_address_field (editor, record, "country");
+ address->po = extract_address_field (editor, record, "pobox");
+}
+
+static gboolean
+check_address_for_data (EContactEditor *editor,
+ gint record)
+{
+ gboolean has_data = FALSE;
+ EContactAddress *address;
+
+ address = g_new0 (EContactAddress, 1);
+
+ extract_address_from_gui (editor, address, record);
+ if (!STRING_IS_EMPTY (address->street) ||
+ !STRING_IS_EMPTY (address->ext) ||
+ !STRING_IS_EMPTY (address->locality) ||
+ !STRING_IS_EMPTY (address->region) ||
+ !STRING_IS_EMPTY (address->code) ||
+ !STRING_IS_EMPTY (address->po) ||
+ !STRING_IS_EMPTY (address->country)) {
+ has_data = TRUE;
+ }
+
+ g_free (address);
+
+ return has_data;
+}
+
+static gboolean
+check_web_for_data (EContactEditor *editor)
+{
+ GtkBuilder *b = editor->priv->builder;
+
+ return !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b,
"entry-homepage")))) ||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-weblog"))))
||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-caluri"))))
||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-fburl"))))
||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b,
"entry-videourl")))) ;
+}
+
+static gboolean
+check_job_for_data (EContactEditor *editor)
+{
+ GtkBuilder *b = editor->priv->builder;
+
+ return !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-manager"))))
||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b,
"entry-assistant")))) ||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b,
"entry-profession")))) ||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b,
"entry-jobtitle")))) ||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-company"))))
||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b,
"entry-department")))) ||
+ !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-office"))));
+}
+
+static gboolean
+check_misc_for_data (EContactEditor *editor)
+{
+ GtkBuilder *b = editor->priv->builder;
+ gint year, month, day;
+
+ return !STRING_IS_EMPTY (gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (b, "entry-spouse"))))
||
+ e_date_edit_get_date (E_DATE_EDIT (e_builder_get_widget (b, "dateedit-birthday")), &year,
&month, &day) ||
+ e_date_edit_get_date (E_DATE_EDIT (e_builder_get_widget (b, "dateedit-anniversary")), &year,
&month, &day);
+}
+
+static gboolean
+check_notes_for_data (EContactEditor *editor)
+{
+ GtkWidget *tv = e_builder_get_widget (editor->priv->builder, "text-comments");
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
+
+ return gtk_text_buffer_get_char_count (buffer) > 0;
+}
+
+static gboolean
+check_section_for_data (EContactEditor *editor,
+ gint check)
+{
+ gboolean has_data = TRUE;
+
+ switch (check) {
+ case CHECK_PHONE:
+ has_data = check_dyntable_for_data (editor, "phone-dyntable");
+ break;
+ case CHECK_SIP:
+ has_data = check_dyntable_for_data (editor, "sip-dyntable");
+ break;
+ case CHECK_IM:
+ has_data = check_dyntable_for_data (editor, "im-dyntable");
+ break;
+ case CHECK_HOME:
+ has_data = check_address_for_data (editor, ADDRESS_SLOT_HOME);
+ break;
+ case CHECK_WORK:
+ has_data = check_address_for_data (editor, ADDRESS_SLOT_WORK);
+ break;
+ case CHECK_OTHER:
+ has_data = check_address_for_data (editor, ADDRESS_SLOT_OTHER);
+ break;
+ case CHECK_WEB:
+ has_data = check_web_for_data (editor);
+ break;
+ case CHECK_JOB:
+ has_data = check_job_for_data (editor);
+ break;
+ case CHECK_MISC:
+ has_data = check_misc_for_data (editor);
+ break;
+ case CHECK_NOTE:
+ has_data = check_notes_for_data (editor);
+ break;
+ default:
+ g_warning ("unknown data check requested");
+ }
+
+ return has_data;
+}
+
+static void
+config_sensitize_item (EContactEditor *editor,
+ const gchar *item_name,
+ gint check)
+{
+ GtkWidget *item;
+ gboolean has_data;
+
+ has_data = check_section_for_data (editor, check);
+ item = e_builder_get_widget (editor->priv->builder, item_name);
+
+ if (has_data) {
+ gtk_widget_set_sensitive (item, FALSE);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
+ } else {
+ gtk_widget_set_sensitive (item, TRUE);
+ }
+}
+
+static void
+config_sensitize_cb (GtkWidget *button,
+ EContactEditor *editor)
+{
+ config_sensitize_item (editor, "menuitem-config-phone", CHECK_PHONE);
+ config_sensitize_item (editor, "menuitem-config-sip", CHECK_SIP);
+ config_sensitize_item (editor, "menuitem-config-im", CHECK_IM);
+
+ config_sensitize_item (editor, "menuitem-config-web", CHECK_WEB);
+ config_sensitize_item (editor, "menuitem-config-job", CHECK_JOB);
+ config_sensitize_item (editor, "menuitem-config-misc", CHECK_MISC);
+
+ config_sensitize_item (editor, "menuitem-config-home", CHECK_HOME);
+ config_sensitize_item (editor, "menuitem-config-work", CHECK_WORK);
+ config_sensitize_item (editor, "menuitem-config-other", CHECK_OTHER);
+
+ config_sensitize_item (editor, "menuitem-config-notes", CHECK_NOTE);
+}
+
+/*
+ * get the value from GSettings and check if there is data in the widget.
+ * if no data is found set_visible (value), set_visible (true) otherwise
+ *
+ * Returns: the new visibility
+ */
+static gboolean
+configure_widget_visibility (EContactEditor *editor,
+ GSettings *settings,
+ const gchar *widget_name,
+ const gchar *settings_name,
+ gint check)
+{
+ gboolean config, has_data;
+ GtkWidget *widget;
+
+ config = g_settings_get_boolean (settings, settings_name);
+ widget = e_builder_get_widget (editor->priv->builder, widget_name);
+ has_data = check_section_for_data (editor, check);
+
+ gtk_widget_set_visible (widget, config || has_data);
+
+ return config || has_data;
+}
+
+static void
+configure_visibility (EContactEditor *editor)
+{
+ gboolean show_tab;
+ GSettings *settings = g_settings_new ("org.gnome.evolution.addressbook");
+
+ configure_widget_visibility (editor, settings, "vbox-contact-phone", "editor-show-contact-phone",
CHECK_PHONE);
+ configure_widget_visibility (editor, settings, "vbox-contact-sip", "editor-show-contact-sip",
CHECK_SIP);
+ configure_widget_visibility (editor, settings, "vbox-contact-im", "editor-show-contact-im",
CHECK_IM);
+
+ show_tab = configure_widget_visibility (editor, settings, "frame-mailing-home",
"editor-show-mailing-home", CHECK_HOME);
+ show_tab |= configure_widget_visibility (editor, settings, "frame-mailing-work",
"editor-show-mailing-work", CHECK_WORK);
+ show_tab |= configure_widget_visibility (editor, settings, "expander-address-other",
"editor-show-mailing-other", CHECK_OTHER);
+ gtk_widget_set_visible (
+ e_builder_get_widget (editor->priv->builder, "scrolledwindow-mailing"),
+ show_tab);
+
+ show_tab = configure_widget_visibility (editor, settings, "expander-personal-web",
"editor-show-personal-web", CHECK_WEB);
+ show_tab |= configure_widget_visibility (editor, settings, "expander-personal-job",
"editor-show-personal-job", CHECK_JOB);
+ show_tab |= configure_widget_visibility (editor, settings, "expander-personal-misc",
"editor-show-personal-misc", CHECK_MISC);
+ gtk_widget_set_visible (
+ e_builder_get_widget (editor->priv->builder, "scrolledwindow-personal"),
+ show_tab);
+
+ configure_widget_visibility (editor, settings, "scrolledwindow-notes", "editor-show-notes",
CHECK_NOTE);
+
+ g_object_unref (settings);
+}
+
+static void
+config_menuitem_save (EContactEditor *editor,
+ GSettings *settings,
+ const gchar *item_name,
+ const gchar *key)
+{
+ GtkWidget *item;
+ gboolean active, sensitive;
+
+ item = e_builder_get_widget (editor->priv->builder, item_name);
+ active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item));
+ sensitive = gtk_widget_get_sensitive (item);
+
+ if (sensitive)
+ g_settings_set_boolean (settings, key, active);
+}
+
+static void
+config_save_cb (GtkWidget *button,
+ EContactEditor *editor)
+{
+ GSettings *settings;
+
+ settings = g_settings_new ("org.gnome.evolution.addressbook");
+
+ config_menuitem_save (editor, settings, "menuitem-config-phone", "editor-show-contact-phone");
+ config_menuitem_save (editor, settings, "menuitem-config-sip", "editor-show-contact-sip");
+ config_menuitem_save (editor, settings, "menuitem-config-im", "editor-show-contact-im");
+
+ config_menuitem_save (editor, settings, "menuitem-config-web", "editor-show-personal-web");
+ config_menuitem_save (editor, settings, "menuitem-config-job", "editor-show-personal-job");
+ config_menuitem_save (editor, settings, "menuitem-config-misc", "editor-show-personal-misc");
+
+ config_menuitem_save (editor, settings, "menuitem-config-home", "editor-show-mailing-home");
+ config_menuitem_save (editor, settings, "menuitem-config-work", "editor-show-mailing-work");
+ config_menuitem_save (editor, settings, "menuitem-config-other", "editor-show-mailing-other");
+
+ config_menuitem_save (editor, settings, "menuitem-config-notes", "editor-show-notes");
+
+ g_object_unref (settings);
+
+ configure_visibility (editor);
+}
+
+static void
+init_config_menuitem (EContactEditor *editor,
+ GSettings *settings,
+ const gchar *item_name,
+ const gchar *key)
+{
+ gboolean show;
+ GtkWidget *item;
+
+ show = g_settings_get_boolean (settings, key);
+ item = e_builder_get_widget (editor->priv->builder, item_name);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), show);
+
+ g_signal_connect (
+ item, "activate",
+ G_CALLBACK (config_save_cb), editor);
+}
+
+static void
+init_config (EContactEditor *editor)
+{
+ GtkWidget *button, *menu;
+ GSettings *settings;
+
+ button = e_builder_get_widget (editor->priv->builder, "button-config");
+ menu = e_builder_get_widget (editor->priv->builder, "menu-editor-config");
+ gtk_menu_button_set_popup (GTK_MENU_BUTTON (button), menu);
+
+ /* save resources by only doing the data checks and sensitizing upon request,
+ * instead of doing it with each change in object_changed()
+ */
+ g_signal_connect (
+ button, "clicked",
+ G_CALLBACK (config_sensitize_cb), editor);
+
+ settings = g_settings_new ("org.gnome.evolution.addressbook");
+
+ init_config_menuitem (editor, settings, "menuitem-config-phone", "editor-show-contact-phone");
+ init_config_menuitem (editor, settings, "menuitem-config-sip", "editor-show-contact-sip");
+ init_config_menuitem (editor, settings, "menuitem-config-im", "editor-show-contact-im");
+
+ init_config_menuitem (editor, settings, "menuitem-config-web", "editor-show-personal-web");
+ init_config_menuitem (editor, settings, "menuitem-config-job", "editor-show-personal-job");
+ init_config_menuitem (editor, settings, "menuitem-config-misc", "editor-show-personal-misc");
+
+ init_config_menuitem (editor, settings, "menuitem-config-home", "editor-show-mailing-home");
+ init_config_menuitem (editor, settings, "menuitem-config-work", "editor-show-mailing-work");
+ init_config_menuitem (editor, settings, "menuitem-config-other", "editor-show-mailing-other");
+
+ init_config_menuitem (editor, settings, "menuitem-config-notes", "editor-show-notes");
+
+ g_object_unref (settings);
+}
+
static void
sensitize_sip_types (EContactEditor *editor)
{
@@ -1892,6 +2299,10 @@ init_address (EContactEditor *editor)
for (i = 0; i < ADDRESS_SLOTS; i++)
init_address_record (editor, i);
+
+ gtk_expander_set_expanded (
+ GTK_EXPANDER (e_builder_get_widget (editor->priv->builder,
"expander-address-other")),
+ !editor->priv->compress_ui);
}
static void
@@ -1999,65 +2410,6 @@ fill_in_address (EContactEditor *editor)
fill_in_address_record (editor, i);
}
-static void
-extract_address_textview (EContactEditor *editor,
- gint record,
- EContactAddress *address)
-{
- gchar *textview_name;
- GtkWidget *textview;
- GtkTextBuffer *text_buffer;
- GtkTextIter iter_1, iter_2;
-
- textview_name = g_strdup_printf ("textview-%s-address", address_name[record]);
- textview = e_builder_get_widget (editor->priv->builder, textview_name);
- g_free (textview_name);
-
- text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
- gtk_text_buffer_get_start_iter (text_buffer, &iter_1);
-
- /* Skip blank lines */
- while (gtk_text_iter_get_chars_in_line (&iter_1) < 1 &&
- !gtk_text_iter_is_end (&iter_1))
- gtk_text_iter_forward_line (&iter_1);
-
- if (gtk_text_iter_is_end (&iter_1))
- return;
-
- iter_2 = iter_1;
- gtk_text_iter_forward_to_line_end (&iter_2);
-
- /* Extract street (first line of text) */
- address->street = gtk_text_iter_get_text (&iter_1, &iter_2);
-
- iter_1 = iter_2;
- gtk_text_iter_forward_line (&iter_1);
-
- if (gtk_text_iter_is_end (&iter_1))
- return;
-
- gtk_text_iter_forward_to_end (&iter_2);
-
- /* Extract extended address (remaining lines of text) */
- address->ext = gtk_text_iter_get_text (&iter_1, &iter_2);
-}
-
-static gchar *
-extract_address_field (EContactEditor *editor,
- gint record,
- const gchar *widget_field_name)
-{
- gchar *entry_name;
- GtkWidget *entry;
-
- entry_name = g_strdup_printf (
- "entry-%s-%s", address_name[record], widget_field_name);
- entry = e_builder_get_widget (editor->priv->builder, entry_name);
- g_free (entry_name);
-
- return g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-}
-
static gchar *
append_to_address_label (gchar *address_label,
const gchar *part,
@@ -2134,13 +2486,7 @@ extract_address_record (EContactEditor *editor,
address = g_new0 (EContactAddress, 1);
- extract_address_textview (editor, record, address);
- address->locality = extract_address_field (editor, record, "city");
- address->region = extract_address_field (editor, record, "state");
- address->code = extract_address_field (editor, record, "zip");
- address->country = extract_address_field (editor, record, "country");
- address->po = extract_address_field (editor, record, "pobox");
-
+ extract_address_from_gui (editor, address, record);
if (!STRING_IS_EMPTY (address->street) ||
!STRING_IS_EMPTY (address->ext) ||
!STRING_IS_EMPTY (address->locality) ||
@@ -2798,52 +3144,6 @@ sensitize_simple (EContactEditor *editor)
}
static void
-configure_expander_state (EContactEditor *editor,
- GSettings *settings,
- const gchar *widget,
- const gchar *settings_key)
-{
- GtkExpander *expander;
- gboolean expand;
-
- expander = GTK_EXPANDER (e_builder_get_widget (editor->priv->builder, widget));
- expand = g_settings_get_boolean (settings, settings_key);
- gtk_expander_set_expanded (expander, expand);
-}
-
-static void
-configure_expander_initial_state (EContactEditor *editor)
-{
- if (editor->priv->compress_ui) {
- GtkBuilder *builder = editor->priv->builder;
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-contact-email")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-contact-phone")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-contact-phone")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-contact-sip")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-contact-im")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-personal-web")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-personal-job")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-personal-misc")), FALSE);
- gtk_expander_set_expanded (GTK_EXPANDER (e_builder_get_widget (builder,
"expander-address-other")), FALSE);
- } else {
- GSettings *settings = g_settings_new ("org.gnome.evolution.addressbook");
-
- configure_expander_state (editor, settings, "expander-contact-email",
"editor-expand-contact-email");
- configure_expander_state (editor, settings, "expander-contact-phone",
"editor-expand-contact-phone");
- configure_expander_state (editor, settings, "expander-contact-sip",
"editor-expand-contact-sip");
- configure_expander_state (editor, settings, "expander-contact-im",
"editor-expand-contact-im");
-
- configure_expander_state (editor, settings, "expander-personal-web",
"editor-expand-personal-web");
- configure_expander_state (editor, settings, "expander-personal-job",
"editor-expand-personal-job");
- configure_expander_state (editor, settings, "expander-personal-misc",
"editor-expand-personal-misc");
-
- configure_expander_state (editor, settings, "expander-address-other",
"editor-expand-mailing-other");
-
- g_object_unref (settings);
- }
-}
-
-static void
fill_in_all (EContactEditor *editor)
{
GtkWidget *focused_widget;
@@ -2866,10 +3166,11 @@ fill_in_all (EContactEditor *editor)
fill_in_im (editor);
fill_in_address (editor);
- /* set expander state after dyntables have been filled,
- * otherwise dyntable and expander can get out of synch
+ /* Visibility of sections and status of menuitems in the config-menu depend on data
+ * they have to be initialized here instead of init_all() and sensitize_all()
*/
- configure_expander_initial_state (editor);
+ configure_visibility (editor);
+ config_sensitize_cb (NULL, editor);
if (weak_pointer) {
g_object_remove_weak_pointer (G_OBJECT (focused_widget), &weak_pointer);
@@ -2918,41 +3219,17 @@ sensitize_all (EContactEditor *editor)
}
static void
-configure_widget_visibility (EContactEditor *editor,
- GSettings *settings,
- const gchar *widget_name,
- const gchar *settings_name)
-{
- gboolean is_visible;
- GtkWidget *widget;
-
- is_visible = g_settings_get_boolean (settings, settings_name);
- widget = e_builder_get_widget (editor->priv->builder, widget_name);
- gtk_widget_set_visible (widget, is_visible);
-}
-
-static void
-configure_visibility (EContactEditor *editor)
+init_personal (EContactEditor *editor)
{
- GSettings *settings = g_settings_new ("org.gnome.evolution.addressbook");
-
- configure_widget_visibility (editor, settings, "vbox-contact-phone", "editor-show-contact-phone");
- configure_widget_visibility (editor, settings, "vbox-contact-sip", "editor-show-contact-sip");
- configure_widget_visibility (editor, settings, "vbox-contact-im", "editor-show-contact-im");
-
- configure_widget_visibility (editor, settings, "scrolledwindow-mailing", "editor-show-mailing-tab");
- configure_widget_visibility (editor, settings, "frame-mailing-home", "editor-show-mailing-home");
- configure_widget_visibility (editor, settings, "frame-mailing-work", "editor-show-mailing-work");
- configure_widget_visibility (editor, settings, "expander-address-other", "editor-show-mailing-other");
-
- configure_widget_visibility (editor, settings, "scrolledwindow-personal", "editor-show-personal-tab");
- configure_widget_visibility (editor, settings, "expander-personal-web", "editor-show-personal-web");
- configure_widget_visibility (editor, settings, "expander-personal-job", "editor-show-personal-job");
- configure_widget_visibility (editor, settings, "expander-personal-misc",
"editor-show-personal-misc");
-
- configure_widget_visibility (editor, settings, "scrolledwindow-notes", "editor-show-notes-tab");
-
- g_object_unref (settings);
+ gtk_expander_set_expanded (
+ GTK_EXPANDER (e_builder_get_widget (editor->priv->builder,
"expander-personal-web")),
+ !editor->priv->compress_ui);
+ gtk_expander_set_expanded (
+ GTK_EXPANDER (e_builder_get_widget (editor->priv->builder,
"expander-personal-job")),
+ !editor->priv->compress_ui);
+ gtk_expander_set_expanded (
+ GTK_EXPANDER (e_builder_get_widget (editor->priv->builder,
"expander-personal-misc")),
+ !editor->priv->compress_ui);
}
static void
@@ -2968,9 +3245,9 @@ init_all (EContactEditor *editor)
init_phone (editor);
init_sip (editor);
init_im (editor);
+ init_personal (editor);
init_address (editor);
-
- configure_visibility (editor);
+ init_config (editor);
/* with so many scrolled windows, we need to
* do some manual sizing */
diff --git a/data/org.gnome.evolution.addressbook.gschema.xml.in
b/data/org.gnome.evolution.addressbook.gschema.xml.in
index 51653c4..1c27195 100644
--- a/data/org.gnome.evolution.addressbook.gschema.xml.in
+++ b/data/org.gnome.evolution.addressbook.gschema.xml.in
@@ -50,46 +50,6 @@
<_summary>Show preview pane</_summary>
<_description>Whether to show the preview pane.</_description>
</key>
- <key name="editor-expand-contact-email" type="b">
- <default>true</default>
- <_summary>Expand Contact-Tab / Email Section</_summary>
- <_description>Defines the initial state of the Email Section</_description>
- </key>
- <key name="editor-expand-contact-phone" type="b">
- <default>true</default>
- <_summary>Expand Contact-Tab / Phone Section</_summary>
- <_description>Defines the initial state of the Phone Section</_description>
- </key>
- <key name="editor-expand-contact-sip" type="b">
- <default>true</default>
- <_summary>Expand Contact-Tab / SIP Section</_summary>
- <_description>Defines the initial state of the SIP Section</_description>
- </key>
- <key name="editor-expand-contact-im" type="b">
- <default>true</default>
- <_summary>Expand Contact-Tab / IM Section</_summary>
- <_description>Defines the initial state of the IM Section</_description>
- </key>
- <key name="editor-expand-personal-web" type="b">
- <default>true</default>
- <_summary>Expand Personal-Tab / Web Section</_summary>
- <_description>Defines the initial state of the Web Address Section</_description>
- </key>
- <key name="editor-expand-personal-job" type="b">
- <default>true</default>
- <_summary>Expand Personal-Tab / Job Section</_summary>
- <_description>Defines the initial state of the Job Section</_description>
- </key>
- <key name="editor-expand-personal-misc" type="b">
- <default>true</default>
- <_summary>Expand Personal-Tab / Miscellaneous Section</_summary>
- <_description>Defines the initial state of the Miscellaneous Section</_description>
- </key>
- <key name="editor-expand-mailing-other" type="b">
- <default>true</default>
- <_summary>Expand Mailing-Tab / Other Section</_summary>
- <_description>Defines the initial state of the Other Address Section</_description>
- </key>
<key type="b" name="editor-show-contact-phone">
<_default>true</_default>
<summary>Show phone numbers</summary>
@@ -105,11 +65,6 @@
<summary>Show IM addresses</summary>
<_description>Whether to show IM addresses in the editor</_description>
</key>
- <key type="b" name="editor-show-mailing-tab">
- <_default>true</_default>
- <summary>Show mailing addresses</summary>
- <_description>Whether to show mailing addresses tab (home, work, other) in the editor</_description>
- </key>
<key type="b" name="editor-show-mailing-home">
<_default>true</_default>
<summary>Show mailing Home addresses</summary>
@@ -125,11 +80,6 @@
<summary>Show mailing Other addresses</summary>
<_description>Whether to show mailing addresses Other in the editor</_description>
</key>
- <key type="b" name="editor-show-personal-tab">
- <_default>true</_default>
- <summary>Show personal information</summary>
- <_description>Whether to show personal information tab (Web Address, Job, Misc.) in the
editor</_description>
- </key>
<key type="b" name="editor-show-personal-web">
<_default>true</_default>
<summary>Show web addresses</summary>
@@ -145,7 +95,7 @@
<summary>Show Miscellaneous information</summary>
<_description>Whether to show Miscellaneous information in the editor</_description>
</key>
- <key type="b" name="editor-show-notes-tab">
+ <key type="b" name="editor-show-notes">
<_default>true</_default>
<summary>Show notes-tab</summary>
<_description>Whether to show notes in the editor</_description>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]