From a56da82fef5637a57f6a797dcf5dc065daaefb18 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 1 Feb 2022 10:26:00 +0100 Subject: [PATCH] I#1792 - Contacts: Option to preview Personal section before Work Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1792 --- ...gnome.evolution.addressbook.gschema.xml.in | 5 ++++ .../gui/widgets/eab-contact-display.c | 26 +++++++++++++++++++ .../gui/widgets/eab-contact-formatter.c | 16 ++++++++++-- .../addressbook/autocompletion-config.c | 9 +++++++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/data/org.gnome.evolution.addressbook.gschema.xml.in b/data/org.gnome.evolution.addressbook.gschema.xml.in index b300c89ee8..c413049abb 100644 --- a/data/org.gnome.evolution.addressbook.gschema.xml.in +++ b/data/org.gnome.evolution.addressbook.gschema.xml.in @@ -120,5 +120,10 @@ <_summary>Where to open contact locations <_description>Currently supported values are “openstreetmap” and “google”; if unknown set, uses “openstreetmap” + + <_default>false + Preview Personal before Work information + <_description>Show the Personal information before the Work information in the contact preview + diff --git a/src/addressbook/gui/widgets/eab-contact-display.c b/src/addressbook/gui/widgets/eab-contact-display.c index 79e2664123..9af181d7ad 100644 --- a/src/addressbook/gui/widgets/eab-contact-display.c +++ b/src/addressbook/gui/widgets/eab-contact-display.c @@ -49,6 +49,7 @@ struct _EABContactDisplayPrivate { EABContactDisplayMode mode; gboolean show_maps; + gboolean home_before_work; }; enum { @@ -435,6 +436,24 @@ contact_display_web_process_crashed_cb (EABContactDisplay *display) e_alert_submit (alert_sink, "addressbook:webkit-web-process-crashed", NULL); } +static void +eab_contact_display_settings_changed_cb (GSettings *settings, + const gchar *key, + gpointer user_data) +{ + EABContactDisplay *display = user_data; + gboolean home_before_work; + + g_return_if_fail (EAB_IS_CONTACT_DISPLAY (display)); + + home_before_work = g_settings_get_boolean (settings, "preview-home-before-work"); + + if (display->priv->contact && (home_before_work ? 1 : 0) != (display->priv->home_before_work ? 1 : 0)) { + display->priv->home_before_work = home_before_work; + load_contact (display); + } +} + static void eab_contact_display_class_init (EABContactDisplayClass *class) { @@ -503,6 +522,7 @@ eab_contact_display_init (EABContactDisplay *display) EWebView *web_view; GtkUIManager *ui_manager; GtkActionGroup *action_group; + GSettings *settings; const gchar *domain = GETTEXT_PACKAGE; GError *error = NULL; @@ -537,6 +557,12 @@ eab_contact_display_init (EABContactDisplay *display) gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, &error); if (error != NULL) g_error ("%s", error->message); + + settings = e_util_ref_settings ("org.gnome.evolution.addressbook"); + g_signal_connect_object (settings, "changed::preview-home-before-work", + G_CALLBACK (eab_contact_display_settings_changed_cb), display, 0); + display->priv->home_before_work = g_settings_get_boolean (settings, "preview-home-before-work"); + g_clear_object (&settings); } GtkWidget * diff --git a/src/addressbook/gui/widgets/eab-contact-formatter.c b/src/addressbook/gui/widgets/eab-contact-formatter.c index 9fbf27e4b0..1980d73fc0 100644 --- a/src/addressbook/gui/widgets/eab-contact-formatter.c +++ b/src/addressbook/gui/widgets/eab-contact-formatter.c @@ -1120,12 +1120,24 @@ render_contact (EABContactFormatter *formatter, EContact *contact, GString *buffer) { + GSettings *settings; + gboolean home_before_work; + + settings = e_util_ref_settings ("org.gnome.evolution.addressbook"); + home_before_work = g_settings_get_boolean (settings, "preview-home-before-work"); + g_clear_object (&settings); + render_title_block (formatter, contact, buffer); g_string_append (buffer, "
"); render_contact_column (formatter, contact, buffer); - render_work_column (formatter, contact, buffer); - render_personal_column (formatter, contact, buffer); + if (home_before_work) { + render_personal_column (formatter, contact, buffer); + render_work_column (formatter, contact, buffer); + } else { + render_work_column (formatter, contact, buffer); + render_personal_column (formatter, contact, buffer); + } render_other_column (formatter, contact, buffer); g_string_append (buffer, "
"); diff --git a/src/modules/addressbook/autocompletion-config.c b/src/modules/addressbook/autocompletion-config.c index 3e00c03183..726066c5b9 100644 --- a/src/modules/addressbook/autocompletion-config.c +++ b/src/modules/addressbook/autocompletion-config.c @@ -135,6 +135,15 @@ get_general_page (EConfig *config, gtk_box_pack_start (GTK_BOX (itembox), widget, FALSE, FALSE, 0); gtk_widget_show (widget); + widget = gtk_check_button_new_with_mnemonic ( + _("_Preview Personal information before Work information")); + g_settings_bind ( + settings, "preview-home-before-work", + widget, "active", + G_SETTINGS_BIND_DEFAULT); + gtk_box_pack_start (GTK_BOX (itembox), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); + container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_box_pack_start (GTK_BOX (itembox), container, FALSE, FALSE, 0); gtk_widget_show (container);