diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..0b224a4fe38f5576d5422a99b905dfb03dd63baf --- /dev/null +++ b/.editorconfig @@ -0,0 +1,30 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +trim_trailing_whitespace = true + +[*.vala] +indent_size = 2 +tab_size = 4 +indent_style = space + +[*.css] +indent_size = 2 +tab_size = 2 +indent_style = space + +[*.ui] +indent_size = 2 +tab_size = 2 +indent_style = space + +[*.{xml.in,xml}] +indent_size = 2 +tab_size = 2 +indent_style = space + +[meson.build] +indent_size = 2 +indent_style = space diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..03bdb8683fb45a5fa2ae7204aacd91ea69a9e0b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Default build directory +build +# Created by our ./configure +Makefile +# Flatpak-builder build directory +.flatpak-builder/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..73bd5db347f024ea23223245b311f9fcdb1405a0 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,35 @@ +include: 'https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml' + +stages: + - review + - test + - deploy + +style-check: + stage: review + script: + - ./.gitlab/ci/style-check.sh + artifacts: + expire_in: 1 week + name: "style-check-junit-report" + when: always + reports: + junit: style-check-junit-report.xml + paths: + - "style-check-junit-report.xml" + + +flatpak: + image: quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master + variables: + MANIFEST_PATH: 'build-aux/flatpak/org.gnome.Contacts.Devel.json' + FLATPAK_MODULE: "gnome-contacts" + RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo" + APP_ID: "org.gnome.Contacts.Devel" + BUNDLE: 'gnome-contacts.flatpak' + extends: .flatpak + +nightly: + extends: '.publish_nightly' + dependencies: + - 'flatpak' diff --git a/.gitlab/ci/junit-report.sh b/.gitlab/ci/junit-report.sh new file mode 100755 index 0000000000000000000000000000000000000000..47792e446c59c28a664cefa82c9e5af2469e450b --- /dev/null +++ b/.gitlab/ci/junit-report.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# +# junit-report.sh: JUnit report helpers +# +# Source this file into your CI scripts to get a nice JUnit report file which +# can be shown in the GitLab UI. + +JUNIT_REPORT_TESTS_FILE=$(mktemp) + +# We need this to make sure we don't send funky stuff into the XML report, +# making it invalid XML (and thus unparsable by CI) +function escape_xml() { + echo "$1" | sed -e 's/&/\&/g; s/\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' +} + +# Append a failed test case with the given name and message +function append_failed_test_case() { + test_name="$1" + test_message="$2" + + # Escape both fields before putting them into the xml + test_name_esc="$(escape_xml "$test_name")" + test_message_esc="$(escape_xml "$test_message")" + + echo "" >> $JUNIT_REPORT_TESTS_FILE + echo " " >> $JUNIT_REPORT_TESTS_FILE + echo "" >> $JUNIT_REPORT_TESTS_FILE + + # Also output to stderr, so it shows up in the job output + echo >&2 "Test '$test_name' failed: $test_message" +} + +# Append a successful test case with the given name +function append_passed_test_case() { + test_name="$1" + test_name_esc="$(escape_xml "$test_name")" + + echo "" >> $JUNIT_REPORT_TESTS_FILE + + # Also output to stderr, so it shows up in the job output + echo >&2 "Test '$test_name' succeeded" +} + +# Aggregates the test cases into a proper JUnit report XML file +function generate_junit_report() { + junit_report_file="$1" + testsuite_name="$2" + + num_tests=$(fgrep ' $junit_report_file << __EOF__ + + + +$(< $JUNIT_REPORT_TESTS_FILE) + + +__EOF__ +} + +# Returns a non-zero exit status if any of the tests in the given JUnit report failed +# You probably want to call this at the very end of your script. +function check_junit_report() { + junit_report_file="$1" + + ! fgrep -q ' + +# Affected version +- GNOME Contacts version: +- Application provider: distribution / built from git / flatpak +- Related info: + + +# Steps to reproduce + +1. +2. +3. + +# Current behavior + + + +# Expected behavior + + + +# Additional information + + + + +/label ~"1. Bug" diff --git a/.gitlab/issue_templates/Feature.md b/.gitlab/issue_templates/Feature.md new file mode 100644 index 0000000000000000000000000000000000000000..2fa6f03475b167cc25839ea6d2fc3c5a21983163 --- /dev/null +++ b/.gitlab/issue_templates/Feature.md @@ -0,0 +1,22 @@ +### Use cases + + + +### Desired behavior + + + +### Benefits of the solution + + + +### Possible drawbacks + + + +/label ~"1. Feature" diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 528e728cf61324a11c99a2c81bd3ee6c8cce75e8..0000000000000000000000000000000000000000 --- a/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Alexander Larsson - diff --git a/README.md b/README.md index d7fe8539a05890099d86e25f0c64e5e4dfa1e501..002f4b8547043f9a4b67ff23c0f1dbc49848641a 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ Contacts organizes your contacts information from all your online and offline sources, providing a centralized place for managing your contacts. -[](https://flathub.org/apps/details/org.gnome.Contacts) - ## Building You can build and install Contacts using [Meson](http://mesonbuild.com/): @@ -53,5 +51,5 @@ To discuss issues with developers and other users, you can post to the or join [#contacts](irc://irc.gnome.org/contacts) on irc.gnome.org. If you would like to get involved with GNOME projects, please also visit our -[Newcomers page](https://wiki.gnome.org/TranslationProject/JoiningTranslation) +[Newcomers page](https://wiki.gnome.org/Newcomers) on the Wiki. diff --git a/data/flatpak/org.gnome.Contacts.Devel.json b/build-aux/flatpak/org.gnome.Contacts.Devel.json similarity index 78% rename from data/flatpak/org.gnome.Contacts.Devel.json rename to build-aux/flatpak/org.gnome.Contacts.Devel.json index c7ea51232266df3cce376de867d30b86341db6ed..443e85471760132569e0c26f8d081c0ad5fb3c8f 100644 --- a/data/flatpak/org.gnome.Contacts.Devel.json +++ b/build-aux/flatpak/org.gnome.Contacts.Devel.json @@ -17,10 +17,9 @@ /* Webcam access */ /* FIMXE: Remove when the webcam portal is available */ "--device=all", - /* Notification access */ - "--talk-name=org.freedesktop.Notifications", /* GNOME Control Center (for the Online Accounts panel) */ "--talk-name=org.gnome.ControlCenter", + "--talk-name=org.gnome.Settings", /* GNOME Online Accounts */ "--talk-name=org.gnome.OnlineAccounts", /* Evolution Data server */ @@ -32,25 +31,17 @@ ], "cleanup": [ "/include", - "/lib/pkgconfig", "/share/pkgconfig", + "/lib/pkgconfig", + "/share/pkgconfig", "/share/aclocal", - "/man", "/share/man", + "/man", + "/share/man", "/share/gtk-doc", "/share/vala", - "*.la", "*.a" + "*.la", + "*.a" ], "modules": [ - { - /* Needed by g-o-a */ - "name": "librest", - "sources": [ - { - "type": "git", - "branch": "librest-0-7", - "url": "https://gitlab.gnome.org/GNOME/librest.git" - } - ] - }, { "name": "gnome-online-accounts", "cleanup": [ "/bin", "/share/GConf" ], @@ -60,6 +51,21 @@ "type": "git", "url": "https://gitlab.gnome.org/GNOME/gnome-online-accounts.git" } + ], + "modules": [ + { + "name": "librest", + "buildsystem": "meson", + "config-opts": [ + "-Dgtk_doc=false" + ], + "sources": [ + { + "type": "git", + "url": "https://gitlab.gnome.org/GNOME/librest.git" + } + ] + } ] }, { @@ -80,8 +86,8 @@ "sources": [ { "type": "archive", - "url": "https://github.com/libical/libical/releases/download/v3.0.7/libical-3.0.7.tar.gz", - "sha256": "0abe66df1ea826e57db7f281c704ede834c84139012e6c686ea7adafd4e763fc" + "url": "https://github.com/libical/libical/releases/download/v3.0.10/libical-3.0.10.tar.gz", + "sha256": "f933b3e6cf9d56a35bb5625e8e4a9c3a50239a85aea05ed842932c1a1dc336b4" } ] }, @@ -150,32 +156,17 @@ ] }, { - "name": "gnome-desktop", - "buildsystem": "meson", - "config-opts": [ - "-Ddesktop_docs=false", - "-Ddebug_tools=false", - "-Dgtk_doc=false", - "-Dudev=disabled" - ], - "sources": [ - { - "type": "git", - "url": "https://gitlab.gnome.org/GNOME/gnome-desktop.git" - } - ] - }, - { - "name": "libhandy", - "buildsystem": "meson", - "builddir": true, - "config-opts": [ - "-Dglade_catalog=disabled" + "name" : "libportal", + "buildsystem" : "meson", + "config-opts" : [ + "-Ddocs=false", + "-Dbackends=gtk4" ], - "sources": [ + "sources" : [ { - "type": "git", - "url": "https://gitlab.gnome.org/GNOME/libhandy.git" + "type" : "git", + "url" : "https://github.com/flatpak/libportal.git", + "branch" : "main" } ] }, diff --git a/build-aux/meson_post_install.py b/build-aux/meson_post_install.py deleted file mode 100644 index bf320a9dc6d6f82a57799ff7f81201eda441df94..0000000000000000000000000000000000000000 --- a/build-aux/meson_post_install.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python3 - -import os -import subprocess - -install_prefix = os.environ['MESON_INSTALL_PREFIX'] -icondir = os.path.join(install_prefix, 'share', 'icons', 'hicolor') -schemadir = os.path.join(install_prefix, 'share', 'glib-2.0', 'schemas') - -if not os.environ.get('DESTDIR'): - print('Update icon cache...') - subprocess.call(['gtk-update-icon-cache', '-f', '-t', icondir]) - - print('Compiling gsettings schemas...') - subprocess.call(['glib-compile-schemas', schemadir]) diff --git a/data/contacts.gresource.xml b/data/contacts.gresource.xml index 4105fc5dad81da685e22edff59b65228181c618f..89c80529fe61d926e4139a26cba840a7e29938a9 100644 --- a/data/contacts.gresource.xml +++ b/data/contacts.gresource.xml @@ -2,17 +2,26 @@ ui/style.css + + icons/scalable/actions/birthday-symbolic.svg + icons/scalable/actions/building-symbolic.svg + icons/scalable/actions/calendar-symbolic.svg + icons/scalable/actions/chat-symbolic.svg + icons/scalable/actions/external-link-symbolic.svg + icons/scalable/actions/map-symbolic.svg + icons/scalable/actions/note-symbolic.svg + icons/scalable/actions/photo-camera-symbolic.svg + icons/scalable/actions/website-symbolic.svg + gtk/help-overlay.ui - ui/contacts-accounts-list.ui ui/contacts-avatar-selector.ui ui/contacts-contact-pane.ui - ui/contacts-crop-cheese-dialog.ui + ui/contacts-crop-dialog.ui ui/contacts-editor-menu.ui - ui/contacts-in-app-notification.ui ui/contacts-link-suggestion-grid.ui ui/contacts-linked-personas-dialog.ui - ui/contacts-list-pane.ui + ui/contacts-main-window.ui + ui/contacts-preferences-window.ui ui/contacts-setup-window.ui - ui/contacts-window.ui diff --git a/data/gnome-contacts.xml b/data/gnome-contacts.xml new file mode 100644 index 0000000000000000000000000000000000000000..3357a8f9af121405e8b04ad36d1452f2a9a45dd2 --- /dev/null +++ b/data/gnome-contacts.xml @@ -0,0 +1,79 @@ + + + + + + + gnome-contacts + GNOME + + + + Maintainer + Niels + De Graef + nielsdegraef@gmail.com + + + + + + gnome-contacts + 1 + User Commands + + + + gnome-contacts + Access and store information about contacts + + + + + gnome-contacts OPTION + + + + + Description + + gnome-contacts is a graphical user interface + to access and store information about your contacts. + + gnome-contacts uses the folks library to pull together contact + information from various sources, including evolution-data-server, your + configured GNOME online accounts, etc. + + + + Options + + + + -?, --help + + Prints a short help text and exits. + + + + -e, --email + + Show contact with this email address. + + + + -i, --individual + + Show contact with this individual id. + + + + -v, --version + + Show the current version of Contacts. + + + + + diff --git a/data/gtk/help-overlay.ui b/data/gtk/help-overlay.ui index 2b8a7a81184db4ddd3adb4be4d4ad7a1298402a7..91a4057f406cd2f5da51e546f9c9a31a8984f2ad 100644 --- a/data/gtk/help-overlay.ui +++ b/data/gtk/help-overlay.ui @@ -2,49 +2,41 @@ - 1 - 1 Overview - 1 F1 Help - 1 F10 Open menu - 1 <Primary>n Create a new contact - 1 <Primary>f <Primary>s Search - 1 <Primary>question Shortcut list - 1 <Primary>q Quit diff --git a/data/icons/hicolor/symbolic/apps/org.gnome.Contacts-symbolic.svg b/data/icons/hicolor/symbolic/apps/org.gnome.Contacts-symbolic.svg index f58d16df416f332635e19de865bf5fc393eab7d0..39acc5401a331cf93189832fd4cf535d2e550def 100644 --- a/data/icons/hicolor/symbolic/apps/org.gnome.Contacts-symbolic.svg +++ b/data/icons/hicolor/symbolic/apps/org.gnome.Contacts-symbolic.svg @@ -26,7 +26,7 @@ - + diff --git a/data/icons/scalable/actions/birthday-symbolic.svg b/data/icons/scalable/actions/birthday-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..2924f38b4b251098d3b7df2843c2e0b69c8093d7 --- /dev/null +++ b/data/icons/scalable/actions/birthday-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/data/icons/scalable/actions/building-symbolic.svg b/data/icons/scalable/actions/building-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..fcf36a6c6c05d9ccc64d19c6732d831d7a8f7eda --- /dev/null +++ b/data/icons/scalable/actions/building-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/actions/calendar-symbolic.svg b/data/icons/scalable/actions/calendar-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..73d0e4b67920f146d010f97a29e609e2dcead54e --- /dev/null +++ b/data/icons/scalable/actions/calendar-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/data/icons/scalable/actions/chat-symbolic.svg b/data/icons/scalable/actions/chat-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..baaf6623fa174cdcef1260233512beeba5e4a213 --- /dev/null +++ b/data/icons/scalable/actions/chat-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/actions/external-link-symbolic.svg b/data/icons/scalable/actions/external-link-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..74f85c3a4dfd38ef259cafbb2996d12b552f23e2 --- /dev/null +++ b/data/icons/scalable/actions/external-link-symbolic.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + external-link + + \ No newline at end of file diff --git a/data/icons/scalable/actions/map-symbolic.svg b/data/icons/scalable/actions/map-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..2a513ae3a80f853c469bf1aae12f415cb627e2b3 --- /dev/null +++ b/data/icons/scalable/actions/map-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/actions/note-symbolic.svg b/data/icons/scalable/actions/note-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..ca8c94979e5763611a9baebd5365aca76b0032a2 --- /dev/null +++ b/data/icons/scalable/actions/note-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/actions/photo-camera-symbolic.svg b/data/icons/scalable/actions/photo-camera-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d99fa5b602430e6cae8faa560e8171dc0ff367f --- /dev/null +++ b/data/icons/scalable/actions/photo-camera-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/actions/website-symbolic.svg b/data/icons/scalable/actions/website-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..0d2f8326a15ecf8a07ea694950868b4ffaed43ec --- /dev/null +++ b/data/icons/scalable/actions/website-symbolic.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/data/meson.build b/data/meson.build index 2b831cc25f981a0af678eee5d316abbb8e2413e9..62fd8d60588fa2a899fd047b8d2027a944bb9cfe 100644 --- a/data/meson.build +++ b/data/meson.build @@ -25,7 +25,7 @@ desktop_file = i18n.merge_file( install: true, install_dir: get_option('datadir') / 'applications' ) -# Validate the desktop file +# Validate the desktop file desktop_file_validate = find_program ('desktop-file-validate', required: false) if desktop_file_validate.found() test('validate-desktop', @@ -33,7 +33,10 @@ if desktop_file_validate.found() suite: 'data', args: [ desktop_file.full_path() - ] + ], + depends: [ + desktop_file, + ], ) endif @@ -52,14 +55,17 @@ appdata_file = i18n.merge_file( install: true, install_dir: get_option('datadir') / 'metainfo', ) -# Validate the appdata file +# Validate the appdata file appstream_util = find_program('appstream-util', required: false) if appstream_util.found() test('validate-appdata', appstream_util, suite: 'data', args: [ 'validate-relax', '--nonet', appdata_file.full_path() - ] + ], + depends: [ + appdata_file, + ], ) endif @@ -98,3 +104,27 @@ configure_file( install: true, install_dir: get_option('datadir') / 'gnome-shell' / 'search-providers', ) + +# Manpage +if get_option('manpage') + xsltproc = find_program('xsltproc') + + custom_target('manfile-gnome-contacts', + input: 'gnome-contacts.xml', + output: 'gnome-contacts.1', + install: true, + install_dir: get_option('mandir') / 'man1', + command: [ + xsltproc, + '--nonet', + '--stringparam', 'man.output.quietly', '1', + '--stringparam', 'funcsynopsis.style', 'ansi', + '--stringparam', 'man.th.extra1.suppress', '1', + '--stringparam', 'man.authors.section.enabled', '0', + '--stringparam', 'man.copyright.section.enabled', '0', + '-o', '@OUTPUT@', + 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl', + '@INPUT@' + ] + ) +endif diff --git a/data/org.gnome.Contacts.appdata.xml.in.in b/data/org.gnome.Contacts.appdata.xml.in.in index ed075b2f313d04a9aede16b3a1ad3369c7d84126..b57fd7390eb332e1c5c3f061cc81460392e7330b 100644 --- a/data/org.gnome.Contacts.appdata.xml.in.in +++ b/data/org.gnome.Contacts.appdata.xml.in.in @@ -26,24 +26,253 @@ - + - Version 3.38.1 is a stable bugfix release in the 3.38.x series, with - the following changes: + This is the beta release in the GNOME 43 unstable series, + with the following improvements: + + + + Contacts can now import and export your contacts in the vCard + format (aka VCF) to or from a file on the system. + + + The app will now warn you if your system has a configuration issue + of your primary address book + + + + + This release also updates translations in several languages. + + + + + + This is the first unstable release in the GNOME 43 series, + with the following improvements: + + + + Some dialogs (like the "About" window) have a better UI and now + look consistent with other GNOME apps + + + An improve UI for textual properties in the contact editor + + + The settings to configure your address books have moved to a + preferences window + + + This release also updates translations in several languages. + + + + + + This is the first stable release in the GNOME 42 series, with the + following improvements since 41.0: - Fix searching for a contact when Contacts hasn't started yet - Fix for an issue where it was impossible to delete an address - when editing a contact + A fresh new look thanks to a port to GTK 4 and libadwaita, along + with a new UI design + + + It is now possible to open up a contact's location with your + default maps application (provided it supports "maps:" URIs) + + + It is now possible to show and add the organisational role of a + contact. This is an especially useful feature for corporate address + books + + + Contacts shows a little reminder when displaying someone's contact + information if their birthday is today - Get rid of a minor error message when creating a contact - Building Contacts with telepathy integration is fixed + + This release also updates translations in several languages. + + + + + + This is the second unstable release in the GNOME 42 series, + with the following improvements: + + + + Contact properties can be selected, which means you can also copy + them to paste it elsewhere. + + + It is now possible to show and add the organisational role of a + contact. This is mostly useful for corporate address books, as + you can now see what job a colleague is performing. + + + Some paper cuts that got introduced when porting to GTK4 have been + resolved. + + + Contacts shows a little reminder when displaying someone's contact + information if their birthday is today + + + Fixed launching the Online Accounts dialog in GNOME 42. + + + This release also updates translations in several languages. + + + + + + This is the first unstable release in the GNOME 42 series, + with the following improvements: + + + + A fresh new look thanks to a port to GTK 4 and libadwaita, along + with a new UI design. + + + It is now possible to open up a contact's location with your + default maps application (provided it supports "maps:" URIs) + + + Fixes to the birthday editor. + + + This release also updates translations in several languages. + + + + + + Version 41 is a stable release, with the following major + improvements since version 40: + + + + When adding or updating a contact, Contacts will now scroll the + list to the newly-made contact. + + + Long names are wrapped over more lines, which makes them more + readable, especially in the case of a small screen. + + + We now have a dedicated selection mode button, which makes the UX + for touchscreen devices much more intuitive. + + + Several small UI improvements, like extra tooltips that follow the + GNOME HIG. + + + When opening a contact, a previously entered birthday is now shown + + + This release also updates translations in several languages + + + + + + This is the first unstable release in the GNOME 41 series, + with the following improvements: + + + + When adding or updating a contact, Contacts will now scroll the + list to the newly-made contact. + + + The Contacts title after cancelling selecting now correctly shows + "Contacts" + + + When opening a contact, a previously entered birthday is now shown + + + We now have a dedicated selection mode button, which makes the UX + for touchscreen devices much more intuitive. + + + Several small UI improvements, like extra tooltips that follow the + GNOME HIG. + + + This release also updates translations in several languages. + + + + + + Version 40 is a stable release, with the following major + improvements since 3.38: + + + + Several issues that occurred when editing or adding postal + addresses are now fixed + + + Better accessibility when creating a new contact by adding support + for mnemonics + + You can now select a contact by using a long press + The avatar selector now displays properly on smaller screens + Deleting the final contact now properly clears the title bar + Contacts now also remembers if the window was fullscreened + Cancelling selection no longer hides headerbar buttons + Fixed: stop cursor from appearing when viewing a contact + Several style and typography updates This release also updates translations in several languages + + + + This is the second unstable release in the GNOME 40 series, + with the following improvements: + + + Cancelling selection no longer hides headerbar buttons + Fixed: stop cursor from appearing when viewing a contact + + This release also updates translations in several languages. + + + + + + This is the first unstable release in the GNOME 40 series, + with the following improvements: + + + + Several issues that occurred when editing or adding postal + addresses are now fixed + + + Better accessibility when creating a new contact by adding support + for mnemonics + + You can now select a contact by using a long press + The avatar selector now displays properly on smaller screens + Deleting the final contact now properly clears the title bar + Contacts now also remembers if the window was fullscreened + Several style and typography updates + + This release also updates translations in several languages. + + @@ -64,7 +293,7 @@ This release also updates translations in several languages - + This is the beta release in the 3.37 development series, @@ -76,7 +305,7 @@ This release also updates translations in several languages. - + This is the first unstable release in the 3.37 development series, @@ -106,7 +335,7 @@ This release also updates translations in several languages. - + This is the next unstable release in the 3.35 development series, @@ -123,7 +352,7 @@ This release also updates translations in several languages. - + This is the first unstable release in the 3.35 development series, @@ -160,7 +389,7 @@ This release also updates translations in several languages. - + This is the last unstable release in the 3.33 development series, @@ -172,7 +401,7 @@ This release also updates translations in several languages. - + This is the next unstable release in the 3.33 development series, @@ -190,7 +419,7 @@ This release also updates translations in several languages. - + This is the second unstable release in the 3.33 development series, @@ -204,7 +433,7 @@ This release also updates translations in several languages. - + This is the first unstable release in the 3.33 development series, @@ -241,7 +470,7 @@ This release also updates translations in several languages. - + This is the next unstable release in the 3.31 development series, @@ -256,7 +485,7 @@ This release also updates translations in several languages. - + This is the next unstable release in the 3.31 development series, @@ -274,7 +503,7 @@ This release also updates translations in several languages. - + This is the first unstable release in the 3.31 development series, @@ -305,7 +534,7 @@ This release also updates translations in several languages. - + This is the last unstable release in the 3.29 development series, @@ -320,7 +549,7 @@ This release also updates translations in several languages. - + This is the first unstable release in the 3.29 development series, @@ -354,7 +583,7 @@ This release also updates translations in several languages. - + This is the fourth unstable (beta) release in the 3.27 development series, @@ -368,7 +597,7 @@ This release also updates translations in several languages. - + This is the third unstable release in the 3.27 development series, @@ -383,7 +612,7 @@ This release also updates translations in several languages. - + This is the second unstable release in the 3.27 development series, @@ -400,7 +629,7 @@ This release also updates translations in several languages. - + This is the first unstable release in the 3.27 development series, @@ -428,7 +657,7 @@ This release also updates translations in several languages. - + This is an unstable release in the 3.25 development series, @@ -436,7 +665,7 @@ - + This is an unstable release in the 3.25 development series, @@ -458,7 +687,7 @@ This release also updates translations in several languages. - + This is an unstable release in the 3.25 development series, @@ -474,7 +703,7 @@ Folks now requires version 11.4 or higher Migrated away from intltool and libgd - Got rid of a bunch of warnings and critical messsages + Got rid of a bunch of warnings and critical messages Use the locale to translate months Added git.mk to automagically create .gitignores @@ -489,6 +718,14 @@ ModernToolkit SearchProvider + + keyboard + pointing + touch + + + 360 + gnome-contacts @@ -529,4 +766,8 @@ none none + + workstation + mobile + diff --git a/data/org.gnome.Contacts.desktop.in.in b/data/org.gnome.Contacts.desktop.in.in index 81238eb5b97a8f3ba290b4cdb098ae7b90430963..6a406a7600634c4ae4e332409cc538da06c5202d 100644 --- a/data/org.gnome.Contacts.desktop.in.in +++ b/data/org.gnome.Contacts.desktop.in.in @@ -10,5 +10,6 @@ Terminal=false Type=Application StartupNotify=true Categories=GNOME;GTK;Office;ContactManagement; -OnlyShowIn=GNOME;Unity; DBusActivatable=true +# Translators: Do NOT translate or transliterate this text (these are enum types)! +X-Purism-FormFactor=Workstation;Mobile; diff --git a/data/ui/contacts-accounts-list.ui b/data/ui/contacts-accounts-list.ui deleted file mode 100644 index 555d7914c7251339862c833a5b38a40e666ebfa4..0000000000000000000000000000000000000000 --- a/data/ui/contacts-accounts-list.ui +++ /dev/null @@ -1,11 +0,0 @@ - - - - - True - none - - - diff --git a/data/ui/contacts-avatar-selector.ui b/data/ui/contacts-avatar-selector.ui index 895805a9ab45677495c55378fd4ae8d4cbfab867..5f34fe9f043a0eee9333ae97d73f4d843831fc9b 100644 --- a/data/ui/contacts-avatar-selector.ui +++ b/data/ui/contacts-avatar-selector.ui @@ -1,88 +1,84 @@ - - - False - + + True + 400 + 400 + Select a new avatar + + + + Cancel + True + + + + + Done + + + + + cancel_button + done_button + + + + - True - False - 10 - 10 - 10 - 10 vertical - 10 - - - True - False - 5 - 5 - none - - - False - True - 0 - - - - True - False - 5 - 5 - 5 - 8 - none + + never + True + True + + + True + + + 10 + 10 + 10 + 10 + vertical + 10 + + + 5 + 5 + 8 + single + True + False + + + + + + - - True - True - 1 - - - True - False - center - 10 + - + + False Take a Picture… - True - True True - + - - False - True - 0 - Select a File… - True - True True - + - - False - True - 1 - - - False - True - 2 - diff --git a/data/ui/contacts-contact-pane.ui b/data/ui/contacts-contact-pane.ui index d4efd8489cfb82641ab2b4e034fcad549a600823..818d4f502da46b7414986cf2839a56a0299b40f7 100644 --- a/data/ui/contacts-contact-pane.ui +++ b/data/ui/contacts-contact-pane.ui @@ -1,81 +1,68 @@ - - - True + True True - none - never - automatic - - True - 32 - 32 - 24 - 24 + - - True - none_selected_page - - - True - 300 - vertical + + none-selected-page + + + avatar-default-symbolic + Select a Contact + + + + + + + contact-sheet-page + + True True - 6 + never + automatic - - True - avatar-default-symbolic - True - end - 144 + + 500 + + + + + + + contact-editor-page + + + True + True + never + automatic - - True - Select a contact - True - True - start - 70 + + + + + + - - none-selected-page - - - - - True - - - contact-sheet-page - - - - - True - - - contact-editor-page - - - + + none-selected-page diff --git a/data/ui/contacts-crop-cheese-dialog.ui b/data/ui/contacts-crop-cheese-dialog.ui deleted file mode 100644 index 345c816d5a7f1b5bff6c055baef340d94c195373..0000000000000000000000000000000000000000 --- a/data/ui/contacts-crop-cheese-dialog.ui +++ /dev/null @@ -1,116 +0,0 @@ - - - - - False - True - 400 - 400 - True - True - - - - True - False - - - - - - - - True - False - - - Cancel - True - True - True - - - - 1 - - - - - True - False - - - - True - False - 5 - - - Take Another… - True - True - True - True - - - - False - True - 0 - - - - - Done - True - True - True - - - - - False - True - 1 - - - - - crop - - - - - True - True - True - end - - - - True - False - camera-photo-symbolic - - - - - - cheese - 1 - - - - - end - 1 - - - - - - diff --git a/data/ui/contacts-crop-dialog.ui b/data/ui/contacts-crop-dialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..2a795367887209328449620cab7c5827dba271cf --- /dev/null +++ b/data/ui/contacts-crop-dialog.ui @@ -0,0 +1,34 @@ + + + + True + 400 + 400 + True + + + + + Cancel + + + + + Done + + + + + cancel_button + done_button + + + + + vertical + + + + diff --git a/data/ui/contacts-editor-menu.ui b/data/ui/contacts-editor-menu.ui index 21ac6bb2a980577a592c2a5add6000111931c17d..92eb32a31106204996b8fe6265c6c5570234e0b1 100644 --- a/data/ui/contacts-editor-menu.ui +++ b/data/ui/contacts-editor-menu.ui @@ -3,12 +3,10 @@ - True vertical 10 - True persona.change-addressbook Change Addressbook diff --git a/data/ui/contacts-in-app-notification.ui b/data/ui/contacts-in-app-notification.ui deleted file mode 100644 index 2df36bf8d9f203fd187864fc57042fa7665d2ee7..0000000000000000000000000000000000000000 --- a/data/ui/contacts-in-app-notification.ui +++ /dev/null @@ -1,54 +0,0 @@ - - - - - True - center - start - - - True - 12 - 300 - - - - True - True - start - True - 50 - PANGO_WRAP_WORD_CHAR - - - 0 - 0 - - - - - True - center - False - none - - - - True - False - 16 - window-close-symbolic - - - - - 0 - 2 - - - - - - diff --git a/data/ui/contacts-link-suggestion-grid.ui b/data/ui/contacts-link-suggestion-grid.ui index 30511c78f79fd2f8bdbf30dad4017d4609c73eec..8b5e34e8812229a8305d7a00834f51e42c8940ab 100644 --- a/data/ui/contacts-link-suggestion-grid.ui +++ b/data/ui/contacts-link-suggestion-grid.ui @@ -1,26 +1,24 @@ - horizontal - True - end 6 + - True end start True - 12 + 12 True word-char + + 0 + 1 + - - 1 - 0 - 1 - @@ -32,16 +30,14 @@ + + 1 + 1 + - - 1 - 1 - 1 - - True center horizontal 6 @@ -51,7 +47,6 @@ 6 - True center Link Contacts 6 @@ -59,31 +54,28 @@ - True vertical - True center - True window-close-symbolic + + 0 + 2 + 2 + - - 2 - 0 - 2 - diff --git a/data/ui/contacts-linked-personas-dialog.ui b/data/ui/contacts-linked-personas-dialog.ui index 16e46105a2fec41889a61b1ddbc90a4c174f5e0c..e783d52e51d015289ec7a792c4d40dcc1618e2b7 100644 --- a/data/ui/contacts-linked-personas-dialog.ui +++ b/data/ui/contacts-linked-personas-dialog.ui @@ -1,46 +1,43 @@ - - True True 600 400 - True Linked Accounts - True vertical - True vertical 8 12 - True never automatic True True in - - True - none + + True + + + none + + - True center You can link contacts by selecting them from the contacts list diff --git a/data/ui/contacts-list-pane.ui b/data/ui/contacts-list-pane.ui deleted file mode 100644 index 00ec107bb1ed4012ae0e926f3bb1b8da89df2833..0000000000000000000000000000000000000000 --- a/data/ui/contacts-list-pane.ui +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - False - False - True - none - - - vertical - True - - - True - True - edit-find-symbolic - False - False - 6 - Type to search - - - - 0 - 0 - - - - - True - True - True - True - never - True - - - 0 - 1 - 1 - 1 - - - - - False - - - True - True - False - Link - 70 - False - - - - start - - - - - True - True - False - Remove - 70 - False - - - - - end - - - - - 0 - 2 - 1 - 1 - - - - - - diff --git a/data/ui/contacts-main-window.ui b/data/ui/contacts-main-window.ui new file mode 100644 index 0000000000000000000000000000000000000000..48e557b7f7393ef5fb08484524d8bab6da3f7d5c --- /dev/null +++ b/data/ui/contacts-main-window.ui @@ -0,0 +1,300 @@ + + + + + List Contacts By: + + First Name + win.sort-on + firstname + + + Surname + win.sort-on + surname + + + + + Import… + app.import + + + + + Preferences + app.show-preferences + + + Keyboard Shortcuts + win.show-help-overlay + + + Help + app.help + + + About Contacts + app.about + + + + + + 800 + 600 + gnome-contacts + + + + global + + + <Control>n + action(win.new-contact) + + + + + + + + + + True + + + + + + list-pane + + + vertical + + + False + + + + + Create new contact + list-add-symbolic + win.new-contact + + + + + + hamburger_menu_popover + True + Menu + open-menu-symbolic + + + + + selection-mode-symbolic + Select Items + + + + + + False + Cancel + Cancel Selection + + + + + + + False + + + + vertical + 300 + True + center + True + + + True + end + center + + + + + start + center + Loading + + + + + + + + vertical + + + Type to search + + + + + + + True + True + + + + + False + + + Export + Export Selected Contacts + win.export-marked-contacts + + + + + False + Link + Link Selected Contacts Together + win.link-marked-contacts + + + + + False + Remove + win.delete-marked-contacts + + + + + + + + + + + + + + + + + False + + + + + + + + + + contact-pane + + + vertical + + + True + + + slide-right + + + center + go-previous-symbolic + Back + + + + + + + + + + + + + False + _Cancel + True + + win.stop-editing-contact + true + + + + + False + horizontal + 6 + 6 + + + starred-symbolic + + + + + + document-edit-symbolic + win.edit-contact + Edit Contact + + + + + user-trash-symbolic + win.delete-contact + Delete Contact + + + + + + + False + True + Done + center + win.stop-editing-contact + false + + + + + + + + True + + + + + + + + + + + + diff --git a/data/ui/contacts-preferences-window.ui b/data/ui/contacts-preferences-window.ui new file mode 100644 index 0000000000000000000000000000000000000000..fc4d2b49242e20ae5b843c16ad039d15a810c098 --- /dev/null +++ b/data/ui/contacts-preferences-window.ui @@ -0,0 +1,10 @@ + + + + + + Address Books + + + + diff --git a/data/ui/contacts-setup-window.ui b/data/ui/contacts-setup-window.ui index 4194476ff4253d1c720d1b2ab52cfba605f9e8c3..40bcf157c4f98d24d69b2816df6a9c62a6f3050d 100644 --- a/data/ui/contacts-setup-window.ui +++ b/data/ui/contacts-setup-window.ui @@ -1,107 +1,50 @@ - - + 800 600 - - - True - False - Contacts Setup - False - + + + vertical + 360 - - True - True - _Quit - True - app.quit - - - Cancel setup and quit + + False + + + Contacts Setup + + + + + _Quit + True + Cancel Setup And Quit + app.quit - - - start - - - - - True - False - True - False - _Done - True - - - Setup complete + + + False + _Done + + Complete setup + True + - - - end - - - - - - True - never - True - - True - 32 - 32 - 12 - 12 - - - True - center - center - 12 - 24 - vertical - - - True - center - end - Welcome - - - - - - - - True - start - True - 0 - Please select your main address book: this is where new contacts will be added. If you keep your contacts in an online account, you can add them using the online accounts settings. - - - - - True - 400 - - + + Welcome + Please select your main address book: this is where new contacts will be added. If you keep your contacts in an online account, you can add them using the online accounts settings. + + - + diff --git a/data/ui/contacts-window.ui b/data/ui/contacts-window.ui deleted file mode 100644 index 0c2d3d5bb7cd79d5814bcc1ae31e077e696856a9..0000000000000000000000000000000000000000 --- a/data/ui/contacts-window.ui +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - - True - 12 - vertical - - - True - 5 - start - List contacts by: - - - - - - - - - - True - First name - radio - - - - - True - Surname - radio - - - - - 6 - 6 - True - - - - - True - Change Address Book… - app.change-book - True - - - - - True - Online Accounts <sup>↗</sup> - app.online-accounts - True - True - - - - - 6 - 6 - True - - - - - True - Keyboard Shortcuts - win.show-help-overlay - True - - - - - True - Help - app.help - True - - - - - True - About Contacts - app.about - True - - - - - - - - - True - vertical - 10 - - - False - window.share-contact - Share - - - - - True - window.edit-contact - Edit - - - - - True - window.unlink-contact - Unlink - - - - - True - - - - - True - window.delete-contact - Delete - - - - - - - False - 800 - 600 - gnome-contacts - Contacts - - - - - True - - - True - False - - - - - - True - False - False - Contacts - True - - - True - True - center - center - Create new contact - - - - Add contact - - - - - True - False - list-add-symbolic - 1 - - - - - start - - - - - True - True - False - hamburger_menu_popover - - - - True - False - open-menu-symbolic - - - - - end - - - - - False - True - False - Cancel - Cancel selection - - - end - - - - - list-pane - - - - - True - - - - False - - - - - True - True - True - - - True - False - slide-right - - - - True - center - True - - - - - Back - - - - - True - go-previous-symbolic - 1 - - - - - - - - - False - True - False - Cancel - 70 - center - - - - - start - - - - - False - True - False - center - - - - True - False - starred-symbolic - 1 - - - - - end - 2 - - - - - False - True - False - contact_sheet_menu - - - True - False - view-more-symbolic - - - - - end - 1 - - - - - False - True - False - Done - 70 - center - - - - end - - - - - contact-pane - - - - - - - - - True - False - - - True - False - True - - - - - True - False - False - - - True - False - vertical - 300 - True - - - True - False - True - end - center - - - - - - True - False - start - center - Loading - - - - - - - - list-pane - - - - - True - - - - False - - - - - True - False - True - - - contact-pane - - - - - - - - - horizontal - - - - - - - horizontal - - - - - - - - - - - - - - - - - - - - diff --git a/data/ui/style.css b/data/ui/style.css index de2f0f6d020dea88e76090798f9d93723d81952f..63be3c816c3233ccbdc5c812510c5c221b95265c 100644 --- a/data/ui/style.css +++ b/data/ui/style.css @@ -7,64 +7,84 @@ background-color: transparent; } -.contacts-suggestion { +/* The search entry to filter the list of contacts */ +.contacts-filter-entry { + margin: 6px; +} + +/* Draw a little shadow about the contact list when scrolling */ +.contact-list-scrolled-window undershoot.top { + box-shadow: inset 0 1px @borders; +} + +/* The link suggestion widget */ +.contacts-link-suggestion { border-top: 1px solid @borders; background-color: shade(@theme_bg_color, 0.9); } -/* Give the avatar in the ContactSheet some margin, - * so it doesn't jump when switching to the editor. */ -.contacts-contact-sheet .contacts-avatar { - margin: 4px 8px; -} + .contacts-link-suggestion avatar { + margin: 12px; + } -.contacts-postal-entry { - border-radius: 0 0 0 0; - border-width: 1px 1px 0 1px; +.contacts-avatar-popover .contact-display-name { + font-size: 20px; } -.contacts-postal-entry:nth-child(first) { - border-radius: 4px 4px 0 0; +flowboxchild.circular { + padding: 4px; + border-radius: 9999px; } -.contacts-postal-entry:nth-child(last) { - border-radius: 0 0 4px 4px; - border-width: 1px; +/* Contact Sheet/Editor common */ +/* --------------------------- */ + +.contacts-sheet-container, +.contacts-contact-editor-container { + margin: 36px 12px 24px 12px; } -/* The style for the background "watermark" image and text. - * (copied from dim-label) */ -.contacts-watermark { - opacity: 0.55; - text-shadow: none; +.contacts-sheet-property, +.contacts-editor-property { + margin: 9px 6px; } -.contacts-avatar-popover .contact-display-name { - font-size: 20px; +/* Contact Sheet-related CSS class */ +/* ------------------------------- */ + +.contacts-sheet { } -.avatar-button { - border-radius: 50%; - padding: 0 0; +.contacts-sheet-header { + margin: 0 0 12px 0; } -.contacts-flatten:not(:hover) { - background-color: transparent; - background-image: none; - border-color: transparent; - box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); - text-shadow: none; -gtk-icon-shadow: none; - border: 1px solid rgba(205, 199, 194, 0.5); +.contacts-sheet-property { } -/* remove padding from ListBoxRow so that the revealer doesn't jump */ -row.editor-property-row { - padding: 0px; + +/* Contact Editor-related CSS classes */ +/* ---------------------------------- */ + +/* Common class for all widgets editing a property */ +.contacts-editor-property { } -popover list { - background-color: @theme_bg_color; + .contacts-editor-property .contacts-property-icon { + margin: 12px 12px; + } + + .contacts-editor-property button.contacts-editor-main-widget { + padding: 10px 0; + } + +.contacts-editor-address, +.contacts-editor-role { + padding-top: 6px; + padding-bottom: 6px; } -popover list row:hover { - background-color: @theme_selected_fg_color + +/* Widget to edit a birthday (_not_ the row itself) */ +.contacts-editor-birthday { + margin: 12px; } diff --git a/debian/changelog b/debian/changelog index f970a2e8566bd472c1dbd6f8f30853bc682130cf..f016ee3a3fa6ba2e66d1302a697d4a5a26fd7d19 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,89 @@ +gnome-contacts (43~beta-1pureos2) byzantium; urgency=medium + + * Move to byzantium + + -- Alexander Mikhaylenko Thu, 08 Sep 2022 20:36:11 +0400 + +gnome-contacts (43~beta-1pureos1) octarine; urgency=medium + + * Release to octarine + * Update patches + + -- Alexander Mikhaylenko Fri, 12 Aug 2022 15:57:00 +0400 + +gnome-contacts (43~beta-1) unstable; urgency=medium + + * New upstream release + * debian/control.in: Bump minimum libadwaita, libportal, vala + * debian/rules: Drop obsolete configure option + + -- Jeremy Bicha Mon, 08 Aug 2022 13:26:50 -0400 + +gnome-contacts (42.0-3pureos1) octarine; urgency=medium + + * Add Librem 5 CI + * d/gbp.conf: Adjust for octarine + * Add patches + * d/control: Update deps + + -- Alexander Mikhaylenko Wed, 13 Jul 2022 21:49:08 +0400 + +gnome-contacts (42.0-2) unstable; urgency=medium + + * Revert "Add patch to revert dependency on gnome-control-center 42" + * Add Breaks: evolution-ews << 3.44.1-2~ (Closes: #1009660) + * Release to unstable + + -- Jeremy Bicha Fri, 29 Apr 2022 15:41:17 -0400 + +gnome-contacts (42.0-1) experimental; urgency=medium + + * New upstream release + * Switch to GTK4 and libadwaita + * debian/control.in: Drop unused Build-Depends: cheese, libedataserverui + * debian/control.in: Build-Depend on libportal for camera access + * Drop patch: applied in new release + * Add patch to revert dependency on gnome-control-center 42 + * Release to experimental since there are some issues with the new version + + -- Jeremy Bicha Wed, 23 Mar 2022 15:43:18 -0400 + +gnome-contacts (41.0-2) unstable; urgency=medium + + * Add patch to support GNOME 42 dark theme preference + * debian/control.in: Bump minimum libhandy to 1.5.90 for that change + + -- Jeremy Bicha Tue, 15 Feb 2022 10:10:56 -0500 + +gnome-contacts (41.0-1) unstable; urgency=medium + + * New upstream release + * debian/rules: update build flags + * Bump Standards-Version to 4.6.0 + + -- Jeremy Bicha Sun, 03 Oct 2021 16:41:04 -0400 + +gnome-contacts (40.0-3) unstable; urgency=medium + + * Bump debhelper-compat to 13 + * debian/rules: minor cleanup + * Release to unstable + + -- Jeremy Bicha Sun, 22 Aug 2021 08:00:01 -0400 + +gnome-contacts (40.0-2) experimental; urgency=medium + + * debian/control: Bump dependency on libhandy-1 1.1.0 + + -- Marco Trevisan (Treviño) Wed, 02 Jun 2021 22:35:28 +0200 + +gnome-contacts (40.0-1) experimental; urgency=medium + + * New upstream release + * debian/docs: Remove AUTHORS + + -- Marco Trevisan (Treviño) Tue, 01 Jun 2021 03:46:47 +0200 + gnome-contacts (3.38.1-1+pureos2) byzantium; urgency=medium * gbp.conf: Drop 'v' from version numbers. diff --git a/debian/control b/debian/control index bc0ea59c282aa1a941b3b10fd7183a7393d9ab8b..1e0ad30746ebefec251853d260cc31cc47db45f1 100644 --- a/debian/control +++ b/debian/control @@ -6,17 +6,16 @@ Source: gnome-contacts Section: gnome Priority: optional Maintainer: Debian GNOME Maintainers -Uploaders: Iain Lane , Jeremy Bicha , Laurent Bigonville +Uploaders: Iain Lane , Jeremy Bicha , Laurent Bigonville , Tim Lunn Build-Depends: appstream-util, - debhelper-compat (= 12), - desktop-file-utils , + debhelper-compat (= 13), + desktop-file-utils, dh-sequence-gir, dh-sequence-gnome, docbook-xsl, - libcheese-gtk-dev, + libadwaita-1-dev (>= 1.2~alpha), libebook1.2-dev (>= 3.30), libedataserver1.2-dev (>= 3.30), - libedataserverui1.2-dev (>= 3.30), libfolks-dev (>= 0.14), libfolks-eds-dev (>= 0.14), libgee-0.8-dev, @@ -24,14 +23,13 @@ Build-Depends: appstream-util, libglib2.0-dev (>= 2.58), libgnome-desktop-3-dev (>= 3.33), libgoa-1.0-dev, - libgtk-3-dev (>= 3.22.0), - libhandy-1-dev (>= 1.0.0), + libgtk-4-dev (>= 4.6), libxml2-utils, meson (>= 0.50), valac (>= 0.48), xsltproc Rules-Requires-Root: no -Standards-Version: 4.5.0 +Standards-Version: 4.6.0 X-Ubuntu-Use-Langpack: yes Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-contacts Vcs-Git: https://salsa.debian.org/gnome-team/gnome-contacts.git @@ -41,6 +39,7 @@ Package: gnome-contacts Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends} +Breaks: evolution-ews (<< 3.44.1-2~) Description: Contacts manager for GNOME GNOME Contacts is a standalone application to view and manage contacts provided by all available contacts sources (Evolution, Empathy, etc). diff --git a/debian/control.in b/debian/control.in index 9fb84e597aec034f200f2937e96a24bac6283fe6..2421acb294b372530ce3d3d7c9b4ba593b359ed3 100644 --- a/debian/control.in +++ b/debian/control.in @@ -4,15 +4,14 @@ Priority: optional Maintainer: Debian GNOME Maintainers Uploaders: @GNOME_TEAM@ Build-Depends: appstream-util, - debhelper-compat (= 12), - desktop-file-utils , + debhelper-compat (= 13), + desktop-file-utils, dh-sequence-gir, dh-sequence-gnome, docbook-xsl, - libcheese-gtk-dev, + libadwaita-1-dev (>= 1.2~alpha), libebook1.2-dev (>= 3.30), libedataserver1.2-dev (>= 3.30), - libedataserverui1.2-dev (>= 3.30), libfolks-dev (>= 0.14), libfolks-eds-dev (>= 0.14), libgee-0.8-dev, @@ -20,14 +19,13 @@ Build-Depends: appstream-util, libglib2.0-dev (>= 2.58), libgnome-desktop-3-dev (>= 3.33), libgoa-1.0-dev, - libgtk-3-dev (>= 3.22.0), - libhandy-1-dev (>= 1.0.0), + libgtk-4-dev (>= 4.6), libxml2-utils, meson (>= 0.50), valac (>= 0.48), xsltproc Rules-Requires-Root: no -Standards-Version: 4.5.0 +Standards-Version: 4.6.0 X-Ubuntu-Use-Langpack: yes Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-contacts Vcs-Git: https://salsa.debian.org/gnome-team/gnome-contacts.git @@ -37,6 +35,7 @@ Package: gnome-contacts Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends} +Breaks: evolution-ews (<< 3.44.1-2~) Description: Contacts manager for GNOME GNOME Contacts is a standalone application to view and manage contacts provided by all available contacts sources (Evolution, Empathy, etc). diff --git a/debian/gbp.conf b/debian/gbp.conf index 96be3f126e5fb1b1064480e8c3a1e7830faafd7b..f4d31f1061e83730a111543845c7d5b12762fb32 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -5,17 +5,18 @@ debian-tag = pureos/%(version)s debian-tag-msg = %(pkg)s %(version)s upstream-branch = upstream/latest -[tag] -sign-tags = True - [buildpackage] sign-tags = True +[tag] +sign-tags = true + [dch] multimaint-merge = True [import-orig] postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit +upstream-vcs-tag = %(version%~%.)s [pq] patch-numbers = False diff --git a/debian/librem5-ci.yml b/debian/librem5-ci.yml index a9f06a69bbc26a596170f2c261a4333accf1ed9b..39e646da097c3eafa1544228c0c01c52a8226534 100644 --- a/debian/librem5-ci.yml +++ b/debian/librem5-ci.yml @@ -1,34 +1,16 @@ include: - 'https://source.puri.sm/Librem5/librem5-ci/raw/master/librem5-pipeline-definitions.yml' + - 'https://source.puri.sm/Librem5/librem5-ci/raw/master/librem5-pipeline-byzantium-jobs.yml' + - 'https://source.puri.sm/Librem5/librem5-ci/raw/master/librem5-pipeline-common-jobs.yml' -variables: - L5_DOCKER_IMAGE: "debian:bullseye" - L5_ADD_SCRATCH_CI: "false" +before_script: + - echo "deb http://repo.pureos.net/pureos landing main" > /etc/apt/sources.list.d/landing.list + - apt-get update + +check-tarball: + before_script: [] + extends: .l5-check-tarball stages: - package - test-package - -package:deb-debian-bullseye: - extends: .l5-build-debian-package - -package:deb-debian-bullseye:arm64: - tags: - - librem5:arm64 - extends: .l5-build-debian-package - -autopkgtest-debian-bullseye-package: - dependencies: - - package:deb-debian-bullseye - extends: .l5-autopkgtest-debian-package - -lintian-debian-bullseye-package: - dependencies: - - package:deb-debian-bullseye - extends: .l5-lintian-debian-package - -check-tarball: - extends: .l5-check-tarball - only: - changes: - - "debian/changelog" diff --git a/debian/patches/0001-ContactSheet-Add-make-call-and-send-sms-button.patch b/debian/patches/0001-ContactSheet-Add-make-call-and-send-sms-button.patch deleted file mode 100644 index eabe9b05a96a2507ee2f4bbcde1e63bdfb79e585..0000000000000000000000000000000000000000 --- a/debian/patches/0001-ContactSheet-Add-make-call-and-send-sms-button.patch +++ /dev/null @@ -1,80 +0,0 @@ -From: Julian Sparber -Date: Fri, 2 Aug 2019 18:32:31 +0200 -Subject: [PATCH] ContactSheet: Add make call and send sms button - -This adds a button to make calls via the default handler for tel: -and a button to send sms via the default handler for sms: - -The buttons are hidden when no handler is available ---- - src/contacts-contact-sheet.vala | 20 ++++++++++++++++++-- - src/contacts-utils.vala | 18 ++++++++++++++++++ - 2 files changed, 36 insertions(+), 2 deletions(-) - -diff --git a/src/contacts-contact-sheet.vala b/src/contacts-contact-sheet.vala -index 813d26c..f2a8111 100644 ---- a/src/contacts-contact-sheet.vala -+++ b/src/contacts-contact-sheet.vala -@@ -217,7 +217,7 @@ public class Contacts.ContactSheet : Gtk.Grid { - if (this.store.caller_account != null) { - var call_button = create_button ("call-start-symbolic"); - call_button.clicked.connect (() => { -- Utils.start_call (phone.value, this.store.caller_account); -+ Utils.start_call (phone.get_normalised (), this.store.caller_account); - }); - - add_row_with_label (TypeSet.phone.format_type (phone), phone.value, call_button); -@@ -225,7 +225,23 @@ public class Contacts.ContactSheet : Gtk.Grid { - add_row_with_label (TypeSet.phone.format_type (phone), phone.value); - } - #else -- add_row_with_label (TypeSet.phone.format_type (phone), phone.value); -+ // Show a call button when we have a hanlder for it -+ Gtk.Button call_button = null; -+ Gtk.Button sms_button = null; -+ if (AppInfo.get_all_for_type ("x-scheme-handler/tel").length () > 0) { -+ call_button = create_button ("call-start-symbolic"); -+ call_button.clicked.connect (() => { -+ Utils.start_call (phone.get_normalised ()); -+ }); -+ } -+ if (AppInfo.get_all_for_type ("x-scheme-handler/sms").length () > 0) { -+ sms_button = create_button ("user-available-symbolic"); -+ sms_button.clicked.connect (() => { -+ Utils.send_sms (phone.get_normalised ()); -+ }); -+ } -+ -+ add_row_with_label (TypeSet.phone.format_type (phone), phone.value, call_button, sms_button); - #endif - } - } -diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala -index 4838876..367efbf 100644 ---- a/src/contacts-utils.vala -+++ b/src/contacts-utils.vala -@@ -107,6 +107,24 @@ namespace Contacts.Utils { - var request = new TelepathyGLib.AccountChannelRequest(account, request_dict, int64.MAX); - request.ensure_channel_async.begin ("org.freedesktop.Telepathy.Client.Empathy.Call", null); - } -+#else -+ public void start_call (string number) { -+ var uri = "tel:" + Uri.escape_string (number, "+" , false); -+ try { -+ Gtk.show_uri_on_window (null, uri, 0); -+ } catch (Error e) { -+ debug ("Couldn't launch URI \"%s\": %s", uri, e.message); -+ } -+ } -+ -+ public void send_sms (string number) { -+ var uri = "sms:" + Uri.escape_string (number, "+" , false); -+ try { -+ Gtk.show_uri_on_window (null, uri, 0); -+ } catch (Error e) { -+ debug ("Couldn't launch URI \"%s\": %s", uri, e.message); -+ } -+ } - #endif - - public T? get_first (Gee.Collection collection) { diff --git a/debian/patches/0001-avatar-selector-move-selector-to-a-dialog.patch b/debian/patches/0001-avatar-selector-move-selector-to-a-dialog.patch deleted file mode 100644 index dabe65535429c88e42a8783a60ec1a0ceafb62d2..0000000000000000000000000000000000000000 --- a/debian/patches/0001-avatar-selector-move-selector-to-a-dialog.patch +++ /dev/null @@ -1,501 +0,0 @@ -From: Julian Sparber -Date: Thu, 17 Dec 2020 13:37:00 +0100 -Subject: [PATCH] avatar-selector: move selector to a dialog - -The previously used popover was to big and causes issues on -small screens and on X11. - -This also merges the two FlowBoxes into one. ---- - data/ui/contacts-avatar-selector.ui | 120 +++++++++++++-------- - data/ui/style.css | 5 + - src/contacts-avatar-selector.vala | 209 ++++++++++++++++++++---------------- - src/contacts-contact-editor.vala | 2 +- - 4 files changed, 200 insertions(+), 136 deletions(-) - -diff --git a/data/ui/contacts-avatar-selector.ui b/data/ui/contacts-avatar-selector.ui -index 895805a..336b6ba 100644 ---- a/data/ui/contacts-avatar-selector.ui -+++ b/data/ui/contacts-avatar-selector.ui -@@ -1,54 +1,102 @@ - - - -- -+ - False -- -- -+ True -+ 400 -+ 400 -+ True -+ True -+ -+ -+ - True - False -- 10 -- 10 -- 10 -- 10 -- vertical -- 10 -+ False - -- -+ -+ Cancel - True -- False -- 5 -- 5 -- none -+ True -+ True -+ -+ -+ -+ -+ -+ Done -+ True -+ True -+ True -+ -+ - - -- False -- True -- 0 -+ end - - -+ -+ -+ -+ -+ True -+ False -+ vertical - -- -+ - True - False -- 5 -- 5 -- 5 -- 8 -- none -+ never -+ True -+ True -+ -+ -+ True -+ False -+ 10 -+ 10 -+ 10 -+ 10 -+ vertical -+ 10 -+ -+ -+ True -+ False -+ 5 -+ 5 -+ 8 -+ single -+ False -+ -+ -+ True -+ True -+ 1 -+ -+ -+ -+ - -- -- True -- True -- 1 -- -+ -+ -+ -+ True -+ > - - - - True - False -- center -+ 10 -+ 10 -+ 10 -+ 10 - 10 -+ center - - - Take a Picture… -@@ -57,11 +105,6 @@ - True - - -- -- False -- True -- 0 -- - - - -@@ -71,17 +114,10 @@ - True - - -- -- False -- True -- 1 -- - - - -- False -- True -- 2 -+ end - - - -diff --git a/data/ui/style.css b/data/ui/style.css -index de2f0f6..67bd2ad 100644 ---- a/data/ui/style.css -+++ b/data/ui/style.css -@@ -42,6 +42,11 @@ - .contacts-avatar-popover .contact-display-name { - font-size: 20px; - } -+flowboxchild.circular { -+ padding: 4px; -+ border-radius: 9999px; -+ -gtk-outline-radius: 9999px; -+} - - .avatar-button { - border-radius: 50%; -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index fb83e37..fdfdb62 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -17,6 +17,44 @@ - - using Folks; - -+const int MAIN_SIZE = 128; -+const int ICONS_SIZE = 64; -+ -+private class Contacts.Thumbnail : Gtk.FlowBoxChild { -+ public Gdk.Pixbuf? source_pixbuf { get; construct set; } -+ private Thumbnail (Gdk.Pixbuf? source_pixbuf = null) { -+ Object (visible: true, halign : Gtk.Align.CENTER, source_pixbuf: source_pixbuf); -+ this.get_style_context ().add_class ("circular"); -+ var avatar = new Avatar (ICONS_SIZE); -+ avatar.set_pixbuf (source_pixbuf); -+ add (avatar); -+ } -+ -+ public Thumbnail.for_persona (Persona persona) { -+ Gdk.Pixbuf? pixbuf = null; -+ var details = persona as AvatarDetails; -+ if (details != null && details.avatar != null) { -+ try { -+ var stream = details.avatar.load (MAIN_SIZE, null); -+ pixbuf = new Gdk.Pixbuf.from_stream (stream); -+ } catch (Error e) { -+ debug ("Couldn't create frame for persona '%s': %s", persona.display_id, e.message); -+ } -+ } -+ this (pixbuf); -+ } -+ -+ public Thumbnail.for_filename (string filename) { -+ Gdk.Pixbuf? pixbuf = null; -+ try { -+ pixbuf = new Gdk.Pixbuf.from_file (filename); -+ } catch (Error e) { -+ debug ("Couldn't create frame for file '%s': %s", filename, e.message); -+ } -+ this (pixbuf); -+ } -+} -+ - /** - * The AvatarSelector can be used to choose the avatar for a contact. - * This can be done by either choosing a stock thumbnail, an image file -@@ -25,9 +63,7 @@ using Folks; - * After a user has initially chosen an avatar, we provide a cropping tool. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-avatar-selector.ui")] --public class Contacts.AvatarSelector : Gtk.Popover { -- const int ICONS_SIZE = 64; -- const int MAIN_SIZE = 128; -+public class Contacts.AvatarSelector : Gtk.Window { - const string AVATAR_BUTTON_CSS_NAME = "avatar-button"; - - // This will provide the default thumbnails -@@ -35,9 +71,7 @@ public class Contacts.AvatarSelector : Gtk.Popover { - private Individual individual; - - [GtkChild] -- private Gtk.FlowBox personas_thumbnail_grid; -- [GtkChild] -- private Gtk.FlowBox stock_thumbnail_grid; -+ private Gtk.FlowBox thumbnail_grid; - - #if HAVE_CHEESE - [GtkChild] -@@ -46,12 +80,19 @@ public class Contacts.AvatarSelector : Gtk.Popover { - private Cheese.CameraDeviceMonitor camera_monitor; - #endif - -- public AvatarSelector (Gtk.Widget relative, Individual? individual) { -- this.set_relative_to(relative); -+ public AvatarSelector (Individual? individual, Gtk.Window? window = null) { -+ Object (transient_for: window); - this.thumbnail_factory = new Gnome.DesktopThumbnailFactory (Gnome.ThumbnailSize.NORMAL); - this.individual = individual; - -- update_thumbnail_grids (); -+ unowned Gtk.BindingSet binding_set = Gtk.BindingSet.by_class (get_class ()); -+ Gtk.BindingEntry.add_signal (binding_set, -+ Gdk.Key.Escape, -+ 0, -+ "close", -+ 0); -+ -+ update_thumbnail_grid (); - - #if HAVE_CHEESE - this.cheese_button.visible = true; -@@ -75,6 +116,16 @@ public class Contacts.AvatarSelector : Gtk.Popover { - #endif - } - -+ [Signal (action = true)] -+ public new virtual signal void close () { -+ base.close (); -+ } -+ -+ [GtkCallback] -+ public bool on_delete_event () { -+ return hide_on_delete (); -+ } -+ - private Gdk.Pixbuf scale_pixbuf_for_avatar_use (Gdk.Pixbuf pixbuf) { - int w = pixbuf.get_width (); - int h = pixbuf.get_height (); -@@ -114,85 +165,57 @@ public class Contacts.AvatarSelector : Gtk.Popover { - this.get_toplevel() as Gtk.Window); - } - } -- -- private Gtk.FlowBoxChild create_thumbnail (Gdk.Pixbuf source_pixbuf) { -- var avatar = new Avatar (ICONS_SIZE); -- avatar.set_pixbuf (source_pixbuf); -- -- var button = new Gtk.Button (); -- button.get_style_context ().add_class (AVATAR_BUTTON_CSS_NAME); -- button.image = avatar; -- button.clicked.connect ( () => { -- selected_pixbuf (scale_pixbuf_for_avatar_use (source_pixbuf)); -- this.popdown (); -- }); -- var child = new Gtk.FlowBoxChild (); -- child.add (button); -- child.set_halign (Gtk.Align.START); -- -- return child; -- } -- -- private Gtk.FlowBoxChild? thumbnail_for_persona (Persona persona) { -- var details = persona as AvatarDetails; -- if (details == null || details.avatar == null) -- return null; -- -- try { -- var stream = details.avatar.load (MAIN_SIZE, null); -- return create_thumbnail (new Gdk.Pixbuf.from_stream (stream)); -- } catch (Error e) { -- debug ("Couldn't create frame for persona '%s': %s", persona.display_id, e.message); -- } -- -- return null; -- } -- -- private Gtk.FlowBoxChild? thumbnail_for_filename (string filename) { -- try { -- return create_thumbnail (new Gdk.Pixbuf.from_file (filename)); -- } catch (Error e) { -- debug ("Couldn't create frame for file '%s': %s", filename, e.message); -- } -- -- return null; -- } -- -- private void update_thumbnail_grids () { -+ private void update_thumbnail_grid () { - if (this.individual != null) { - foreach (var p in individual.personas) { -- var button = thumbnail_for_persona (p); -- if (button != null) -- this.personas_thumbnail_grid.add (button); -+ var widget = new Thumbnail.for_persona (p); -+ if (widget.source_pixbuf != null) -+ this.thumbnail_grid.add (widget); - } - } -- this.personas_thumbnail_grid.show_all (); - - var stock_files = Utils.get_stock_avatars (); - foreach (var file_name in stock_files) { -- var button = thumbnail_for_filename (file_name); -- if (button != null) -- this.stock_thumbnail_grid.add (button); -+ var widget = new Thumbnail.for_filename (file_name); -+ if (widget.source_pixbuf != null) -+ this.thumbnail_grid.add (widget); - } -- this.stock_thumbnail_grid.show_all (); -+ this.thumbnail_grid.show_all (); - } - - [GtkCallback] - private void on_cheese_clicked (Gtk.Button button) { -- var dialog = new CropCheeseDialog.for_cheese ((Window) this.get_toplevel()); -+ var dialog = new CropCheeseDialog.for_cheese (this.transient_for); - dialog.show_all (); - dialog.picture_selected.connect ( (pix) => { - selected_pixbuf (scale_pixbuf_for_avatar_use (pix)); -+ this.close (); - }); -- this.popdown (); -+ } -+ -+ [GtkCallback] -+ private void on_cancel_clicked (Gtk.Button button) { -+ this.close (); -+ } -+ -+ [GtkCallback] -+ private void on_done_clicked (Gtk.Button button) { -+ var selected_children = thumbnail_grid.get_selected_children (); -+ if (selected_children != null) { -+ var thumbnail = (selected_children.data as Thumbnail); -+ if (thumbnail != null) -+ selected_pixbuf (scale_pixbuf_for_avatar_use (thumbnail.source_pixbuf)); -+ } -+ -+ this.close (); - } - - [GtkCallback] - private void on_file_clicked (Gtk.Button button) { - var chooser = new Gtk.FileChooserNative (_("Browse for more pictures"), -- (Gtk.Window) this.get_toplevel (), -- Gtk.FileChooserAction.OPEN, -- _("_Open"), _("_Cancel")); -+ (Gtk.Window) this.get_toplevel (), -+ Gtk.FileChooserAction.OPEN, -+ _("_Open"), _("_Cancel")); - chooser.set_modal (true); - chooser.set_local_only (false); - var preview = new Gtk.Image (); -@@ -208,36 +231,36 @@ public class Contacts.AvatarSelector : Gtk.Popover { - chooser.set_current_folder (folder); - - chooser.response.connect ( (response) => { -- if (response != Gtk.ResponseType.ACCEPT) { -- chooser.destroy (); -- return; -- } -- try { -- var file = File.new_for_uri (chooser.get_uri ()); -- var in_stream = file.read (); -- var pixbuf = new Gdk.Pixbuf.from_stream (in_stream, null); -- in_stream.close (); -- if (pixbuf.get_width () > MAIN_SIZE || pixbuf.get_height () > MAIN_SIZE) { -- var dialog = new CropCheeseDialog.for_crop ((Window) this.get_toplevel(), -- pixbuf); -- dialog.picture_selected.connect ( (pix) => { -- selected_pixbuf (scale_pixbuf_for_avatar_use (pix)); -- }); -- dialog.show_all(); -- } else { -- selected_pixbuf (scale_pixbuf_for_avatar_use (pixbuf)); -- } -- } catch (GLib.Error e) { -- warning ("Failed to set avatar: %s", e.message); -- Utils.show_error_dialog (_("Failed to set avatar."), -- this.get_toplevel() as Gtk.Window); -+ if (response != Gtk.ResponseType.ACCEPT) { -+ chooser.destroy (); -+ return; -+ } -+ try { -+ var file = File.new_for_uri (chooser.get_uri ()); -+ var in_stream = file.read (); -+ var pixbuf = new Gdk.Pixbuf.from_stream (in_stream, null); -+ in_stream.close (); -+ if (pixbuf.get_width () > MAIN_SIZE || pixbuf.get_height () > MAIN_SIZE) { -+ var dialog = new CropCheeseDialog.for_crop (this.transient_for, pixbuf); -+ dialog.picture_selected.connect ( (pix) => { -+ selected_pixbuf (scale_pixbuf_for_avatar_use (pix)); -+ this.close (); -+ }); -+ dialog.show_all(); -+ } else { -+ selected_pixbuf (scale_pixbuf_for_avatar_use (pixbuf)); - } -+ } catch (GLib.Error e) { -+ warning ("Failed to set avatar: %s", e.message); -+ Utils.show_error_dialog (_("Failed to set avatar."), -+ this.get_toplevel() as Gtk.Window); -+ } - -- chooser.destroy (); -- }); -+ chooser.destroy (); -+ }); - - chooser.run (); -- this.popdown(); -+ this.close (); - } - - private void update_preview (Gtk.FileChooser chooser) { -diff --git a/src/contacts-contact-editor.vala b/src/contacts-contact-editor.vala -index 09753c9..df08bab 100644 ---- a/src/contacts-contact-editor.vala -+++ b/src/contacts-contact-editor.vala -@@ -57,7 +57,7 @@ public class Contacts.ContactEditor : Gtk.Box { - // Show the avatar popover when the avatar is clicked - private void on_avatar_button_clicked (Gtk.Button avatar_button) { - if (this.avatar_selector == null) -- this.avatar_selector = new AvatarSelector (avatar_button, this.individual); -+ this.avatar_selector = new AvatarSelector (this.individual, (Window) this.get_toplevel()); - this.avatar_selector.show(); - } - diff --git a/debian/patches/0001-contact-list-Add-longpress-gesture-for-selecting-con.patch b/debian/patches/0001-contact-list-Add-longpress-gesture-for-selecting-con.patch deleted file mode 100644 index a35c9af02e2194d2b3063af833da3dd617c765f7..0000000000000000000000000000000000000000 --- a/debian/patches/0001-contact-list-Add-longpress-gesture-for-selecting-con.patch +++ /dev/null @@ -1,80 +0,0 @@ -From: Julian Sparber -Date: Wed, 24 Jul 2019 11:25:31 +0200 -Subject: [PATCH 1/2] contact-list: Add longpress gesture for selecting - contacts - ---- - src/contacts-contact-list.vala | 36 ++++++++++++++++++++++++++++++------ - 1 file changed, 30 insertions(+), 6 deletions(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index 07103af..86b355d 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -103,6 +103,9 @@ public class Contacts.ContactList : Gtk.ListBox { - - private bool sort_on_surname = false; // keep in sync with the setting - -+ private Gtk.GestureLongPress long_press; -+ private bool got_long_press = false; -+ - public UiState state { get; set; } - - public ContactList (Settings settings, Store store, Query query) { -@@ -114,6 +117,16 @@ public class Contacts.ContactList : Gtk.ListBox { - - this.notify["state"].connect (on_ui_state_changed); - -+ // Connect long press gesture -+ this.long_press = new Gtk.GestureLongPress (this); -+ this.long_press.pressed.connect ((g, x, y) => { -+ this.got_long_press = true; -+ var row = (ContactDataRow) get_row_at_y ((int) Math.round (y)); -+ if (row != null) { -+ row.selector_button.active = this.state != UiState.SELECTING || !row.selector_button.active; -+ } -+ }); -+ - this.sort_on_surname = settings.sort_on_surname; - settings.changed["sort-on-surname"].connect(() => { - this.sort_on_surname = settings.sort_on_surname; -@@ -235,14 +248,26 @@ public class Contacts.ContactList : Gtk.ListBox { - row.destroy (); - } - -+ public override void row_activated (Gtk.ListBoxRow row) { -+ if (!this.got_long_press) { -+ var data = (ContactDataRow?) row as ContactDataRow; -+ if (data != null && this.state == UiState.SELECTING) -+ data.selector_button.active = !data.selector_button.active; -+ } else { -+ this.got_long_press = false; -+ } -+ } -+ - public override void row_selected (Gtk.ListBoxRow? row) { -- var data = (ContactDataRow?) row as ContactDataRow; -- var individual = data != null ? data.individual : null; -- selection_changed (individual); -+ if (this.state != UiState.SELECTING) { -+ var data = (ContactDataRow?) row as ContactDataRow; -+ var individual = data != null ? data.individual : null; -+ selection_changed (individual); - #if HAVE_TELEPATHY -- if (individual != null) -- Utils.fetch_contact_info (individual); -+ if (individual != null) -+ Contact.fetch_contact_info (individual); - #endif -+ } - } - - private bool filter_row (Gtk.ListBoxRow row) { -@@ -306,7 +331,6 @@ public class Contacts.ContactList : Gtk.ListBox { - if (event.button == Gdk.BUTTON_SECONDARY) { - unowned var row = (ContactDataRow) get_row_at_y ((int) Math.round (event.y)); - if (row != null) { -- select_row (row); - row.selector_button.active = this.state != UiState.SELECTING || !row.selector_button.active; - } - } diff --git a/debian/patches/0002-contact-list-Don-t-highlight-contacts-while-selectin.patch b/debian/patches/0002-contact-list-Don-t-highlight-contacts-while-selectin.patch deleted file mode 100644 index 8fda45c2d49ae0574297333ab2e3153e2376f0aa..0000000000000000000000000000000000000000 --- a/debian/patches/0002-contact-list-Don-t-highlight-contacts-while-selectin.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Julian Sparber -Date: Wed, 16 Dec 2020 16:08:24 +0100 -Subject: [PATCH 2/2] contact-list: Don't highlight contacts while selecting - ---- - src/contacts-contact-list.vala | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index 86b355d..89a0848 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -154,8 +154,12 @@ public class Contacts.ContactList : Gtk.ListBox { - row.selector_button.active = false; - } - -- if (this.state != UiState.SELECTING) -+ if (this.state == UiState.SELECTING) { -+ this.selection_mode = Gtk.SelectionMode.NONE; -+ } else { -+ this.selection_mode = Gtk.SelectionMode.BROWSE; - this.nr_contacts_marked = 0; -+ } - } - - private int compare_rows (Gtk.ListBoxRow row_a, Gtk.ListBoxRow row_b) { diff --git a/debian/patches/0003-avatar-Use-HdyAvatar.patch b/debian/patches/0003-avatar-Use-HdyAvatar.patch deleted file mode 100644 index 50e7e3e2cc816c3e2a8130d15cb8b75728d4b72d..0000000000000000000000000000000000000000 --- a/debian/patches/0003-avatar-Use-HdyAvatar.patch +++ /dev/null @@ -1,369 +0,0 @@ -From: Christopher Davis -Date: Sat, 3 Oct 2020 15:30:13 -0700 -Subject: [PATCH 03/42] avatar: Use HdyAvatar - -Makes Contacts.Avatar a wrapper around HdyAvatar. -This allows us to drop our custom fallback and -circular avatar code in favor of HdyAvatar. - -Fixes https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/183 - -Related to https://gitlab.gnome.org/GNOME/Initiatives/-/issues/20 ---- - src/contacts-avatar-selector.vala | 3 +- - src/contacts-avatar-utils.vala | 183 -------------------------------------- - src/contacts-avatar.vala | 106 +++++++--------------- - src/meson.build | 1 - - 4 files changed, 32 insertions(+), 261 deletions(-) - delete mode 100644 src/contacts-avatar-utils.vala - -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index e2e9c1c..5e6a160 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -119,8 +119,7 @@ public class Contacts.AvatarSelector : Popover { - - private FlowBoxChild create_thumbnail (Gdk.Pixbuf source_pixbuf) { - var avatar = new Avatar (ICONS_SIZE); -- var pixbuf = source_pixbuf.scale_simple (ICONS_SIZE, ICONS_SIZE, Gdk.InterpType.HYPER); -- avatar.set_pixbuf (pixbuf); -+ avatar.set_pixbuf (source_pixbuf); - - var button = new Button (); - button.get_style_context ().add_class (AVATAR_BUTTON_CSS_NAME); -diff --git a/src/contacts-avatar-utils.vala b/src/contacts-avatar-utils.vala -deleted file mode 100644 -index c5c6d61..0000000 ---- a/src/contacts-avatar-utils.vala -+++ /dev/null -@@ -1,183 +0,0 @@ --/* -- * Copyright 2019 Michael Gratton -- * -- * This software is licensed under the GNU Lesser General Public License -- * (version 2.1 or later). See the COPYING file in this distribution. -- */ -- --namespace Contacts.AvatarUtils { -- -- // The following was based on code written by Felipe Borges for -- // gnome-control-enter in panels/user-accounts/user-utils.c commit -- // 02c288ab6f069a0c106323a93400f192a63cb67e. The copyright in that -- // file is: "Copyright 2009-2010 Red Hat, Inc," -- -- public Gdk.Pixbuf generate_user_picture(string name, int size, bool label = true) { -- Cairo.Surface surface = new Cairo.ImageSurface( -- Cairo.Format.ARGB32, size, size -- ); -- Cairo.Context cr = new Cairo.Context(surface); -- cr.rectangle(0, 0, size, size); -- -- /* Fill the background with a colour for the name */ -- Gdk.RGBA color = get_color_for_name(name); -- cr.set_source_rgb( -- color.red / 255.0, color.green / 255.0, color.blue / 255.0 -- ); -- cr.fill(); -- -- /* Draw the initials on top */ -- if (label) { -- string? initials = extract_initials_from_name(name); -- if (initials != null) { -- string font = "Cantarell Ultra-Bold %d".printf((int) GLib.Math.ceil(size / 3)); -- -- cr.set_source_rgb(1.0, 1.0, 1.0); -- Pango.Layout layout = Pango.cairo_create_layout(cr); -- layout.set_text(initials, -1); -- layout.set_font_description(Pango.FontDescription.from_string(font)); -- -- int width, height; -- layout.get_size(out width, out height); -- cr.translate(size / 2, size / 2); -- cr.move_to( -- -((double) width / Pango.SCALE) / 2, -- -((double) height / Pango.SCALE) / 2 -- ); -- Pango.cairo_show_layout(cr, layout); -- } -- } else { -- try { -- var theme = Gtk.IconTheme.get_default (); -- var fallback_avatar = theme.lookup_icon ("avatar-default", -- size * 1/2, -- Gtk.IconLookupFlags.FORCE_SYMBOLIC); -- Gdk.RGBA fg_color = { 1, 1, 1, 1 }; -- var icon_pixbuf = fallback_avatar.load_symbolic (fg_color); -- var x = (double) size / 2.0 - (double) icon_pixbuf.width / 2.0; -- // We also add a offset to the height to visually center the icon -- var y = (double) size / 2.0 - (double) icon_pixbuf.height / 2.0 - (2 * size / 100.0); -- Gdk.cairo_set_source_pixbuf (cr, icon_pixbuf, x, y); -- cr.paint (); -- } catch (Error e) { -- warning ("Couldn't get default avatar icon: %s", e.message); -- } -- } -- -- return Gdk.pixbuf_get_from_surface( -- surface, 0, 0, size, size -- ); -- } -- -- public Gdk.Pixbuf round_image(Gdk.Pixbuf source) { -- int size = source.width; -- Cairo.Surface surface = new Cairo.ImageSurface( -- Cairo.Format.ARGB32, size, size -- ); -- Cairo.Context cr = new Cairo.Context(surface); -- -- /* Clip a circle */ -- cr.arc(size / 2, size / 2, size / 2, 0, 2 * GLib.Math.PI); -- cr.clip(); -- cr.new_path(); -- -- Gdk.cairo_set_source_pixbuf(cr, source, 0, 0); -- cr.paint(); -- -- return Gdk.pixbuf_get_from_surface( -- surface, 0, 0, size, size -- ); -- } -- -- public string? extract_initials_from_name(string name) { -- string normalized = name.strip().up().normalize(); -- string? initials = null; -- if (normalized != "") { -- GLib.StringBuilder buf = new GLib.StringBuilder(); -- unichar c = 0; -- int index = 0; -- -- // Get the first alphanumeric char of the string -- for (int i = 0; normalized.get_next_char(ref index, out c); i++) { -- if (c.isalnum()) { -- buf.append_unichar(c); -- break; -- } -- } -- -- // Get the first alphanumeric char of the last word of the string -- index = normalized.last_index_of_char(' '); -- if (index >= 0) { -- for (int i = 0; normalized.get_next_char(ref index, out c); i++) { -- if (c.isalnum()) { -- buf.append_unichar(c); -- break; -- } -- } -- } -- -- if (buf.data.length > 0) { -- initials = (string) buf.data; -- } -- } -- return initials; -- } -- -- -- public Gdk.RGBA get_color_for_name(string name) { -- // https://gitlab.gnome.org/Community/Design/HIG-app-icons/blob/master/GNOME%20HIG.gpl -- const double[,] GNOME_COLOR_PALETTE = { -- { 98, 160, 234 }, -- { 53, 132, 228 }, -- { 28, 113, 216 }, -- { 26, 95, 180 }, -- { 87, 227, 137 }, -- { 51, 209, 122 }, -- { 46, 194, 126 }, -- { 38, 162, 105 }, -- { 248, 228, 92 }, -- { 246, 211, 45 }, -- { 245, 194, 17 }, -- { 229, 165, 10 }, -- { 255, 163, 72 }, -- { 255, 120, 0 }, -- { 230, 97, 0 }, -- { 198, 70, 0 }, -- { 237, 51, 59 }, -- { 224, 27, 36 }, -- { 192, 28, 40 }, -- { 165, 29, 45 }, -- { 192, 97, 203 }, -- { 163, 71, 186 }, -- { 129, 61, 156 }, -- { 97, 53, 131 }, -- { 181, 131, 90 }, -- { 152, 106, 68 }, -- { 134, 94, 60 }, -- { 99, 69, 44 } -- }; -- -- Gdk.RGBA color = { 255, 255, 255, 1.0 }; -- uint hash; -- uint number_of_colors = GNOME_COLOR_PALETTE.length[0]; -- uint idx; -- -- if (name == "") { -- // Return a random color if we don't have a name -- idx = Random.int_range (0, (int32) number_of_colors); -- color.red = GNOME_COLOR_PALETTE[idx,0]; -- color.green = GNOME_COLOR_PALETTE[idx,1]; -- color.blue = GNOME_COLOR_PALETTE[idx,2]; -- return color; -- } -- -- hash = name.hash(); -- idx = hash % number_of_colors; -- -- color.red = GNOME_COLOR_PALETTE[idx,0]; -- color.green = GNOME_COLOR_PALETTE[idx,1]; -- color.blue = GNOME_COLOR_PALETTE[idx,2]; -- -- return color; -- } --} -diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala -index 9f54217..fb758df 100644 ---- a/src/contacts-avatar.vala -+++ b/src/contacts-avatar.vala -@@ -23,29 +23,31 @@ using Gee; - * The Avatar of a Contact is responsible for showing an {@link Folks.Individual}'s - * avatar, or a fallback if it's not available. - */ --public class Contacts.Avatar : DrawingArea { -- private int size; -- private Gdk.Pixbuf? pixbuf = null; -- private Gdk.Pixbuf? cache = null; -+public class Contacts.Avatar : Bin { -+ private Hdy.Avatar widget; - - private Individual? individual = null; -- // We want to lazily load the Pixbuf to make sure we don't draw all contact avatars at once. -- // As long as there is no need for it to be drawn, keep this to false. -- private bool avatar_loaded = false; - - public Avatar (int size, Individual? individual = null) { - this.individual = individual; -- if (individual != null) { -- individual.notify["avatar"].connect ( (s, p) => { -- load_avatar.begin (); -- }); -+ string name = ""; -+ bool show_initials = false; -+ if (this.individual != null) { -+ name = find_display_name (); -+ /* If we don't have a usable name use the display_name -+ * to generate the color but don't show any label -+ */ -+ if (name == "") { -+ name = this.individual.display_name; -+ } else { -+ show_initials = true; -+ } - } - -- this.size = size; -- set_size_request (size, size); -- -- // If we don't have an avatar, don't try to load it later -- this.avatar_loaded = (individual == null || individual.avatar == null); -+ this.widget = new Hdy.Avatar (size, name, show_initials); -+ this.widget.set_image_load_func (size => load_avatar (size)); -+ this.widget.show (); -+ add(this.widget); - - show (); - } -@@ -54,69 +56,23 @@ public class Contacts.Avatar : DrawingArea { - * Manually set the avatar to the given pixbuf, even if the contact has an avatar. - */ - public void set_pixbuf (Gdk.Pixbuf? a_pixbuf) { -- this.cache = null; -- this.pixbuf = a_pixbuf; -- queue_draw (); -- } -- -- private async void load_avatar () { -- assert (this.individual != null); -- -- this.avatar_loaded = true; -- try { -- var stream = yield this.individual.avatar.load_async (this.size); -- this.cache = null; -- this.pixbuf = yield new Gdk.Pixbuf.from_stream_at_scale_async (stream, this.size, this.size, true); -- queue_draw (); -- } catch (Error e) { -- debug ("Couldn't load avatar of contact %s. Reason: %s", this.individual.display_name, e.message); -- } -- } -- -- public override bool draw (Cairo.Context cr) { -- // This exists to implement lazy loading: i.e. only load the avatar on the first draw() -- if (!this.avatar_loaded) -- load_avatar.begin (); -- -- if (this.cache != null) { -- // Don't do anything if we have already a cached avatar -- } else if (this.pixbuf != null) -- this.cache = create_contact_avatar (); -- else // No avatar or cache available, create the fallback -- this.cache = create_fallback (); -- -- draw_cached_avatar (cr); -- -- return true; -- } -- -- private void draw_cached_avatar (Cairo.Context cr) { -- Gdk.cairo_set_source_pixbuf (cr, this.cache, 0, 0); -- cr.paint (); -+ this.widget.set_image_load_func (size => load_avatar (size, a_pixbuf)); - } - -- private Gdk.Pixbuf create_contact_avatar () { -- return AvatarUtils.round_image(this.pixbuf); -- } -- -- private Gdk.Pixbuf create_fallback () { -- string name = ""; -- bool show_label = false; -- if (this.individual != null) { -- name = find_display_name (); -- /* If we don't have a usable name use the display_name -- * to generate the color but don't show any label -- */ -- if (name == "") { -- name = this.individual.display_name; -- } else { -- show_label = true; -+ private Gdk.Pixbuf? load_avatar (int size, Gdk.Pixbuf? pixbuf = null) { -+ if (pixbuf != null) { -+ return pixbuf.scale_simple (size, size, Gdk.InterpType.HYPER); -+ } else { -+ if (this.individual != null && this.individual.avatar != null) { -+ try { -+ var stream = this.individual.avatar.load (size, null); -+ return new Gdk.Pixbuf.from_stream_at_scale (stream, size, size, true); -+ } catch (Error e) { -+ debug ("Couldn't load avatar of contact %s. Reason: %s", this.individual.display_name, e.message); -+ } - } - } -- var pixbuf = AvatarUtils.generate_user_picture(name, this.size, show_label); -- pixbuf = AvatarUtils.round_image(pixbuf); -- -- return pixbuf; -+ return null; - } - - /* Find a nice name to generate the label and color for the fallback avatar -diff --git a/src/meson.build b/src/meson.build -index 63b2847..a38b262 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -13,7 +13,6 @@ libcontacts_sources = files( - 'contacts-typeset.vala', - 'contacts-type-descriptor.vala', - 'contacts-utils.vala', -- 'contacts-avatar-utils.vala', - 'contacts-vcard-type-mapping.vala', - ) - diff --git a/debian/patches/0006-window-Use-HdyWindow.patch b/debian/patches/0006-window-Use-HdyWindow.patch deleted file mode 100644 index 7a3e73dc445116d06a6d37a1ca05568bb384cab6..0000000000000000000000000000000000000000 --- a/debian/patches/0006-window-Use-HdyWindow.patch +++ /dev/null @@ -1,264 +0,0 @@ -From: Christopher Davis -Date: Sat, 3 Oct 2020 16:12:11 -0700 -Subject: [PATCH 06/42] window: Use HdyWindow - -Allows us to drop the use of HdyTitleBar. ---- - data/ui/contacts-window.ui | 131 +++++++++++++++++++++++---------------------- - src/contacts-window.vala | 25 +++++++-- - 2 files changed, 86 insertions(+), 70 deletions(-) - -diff --git a/data/ui/contacts-window.ui b/data/ui/contacts-window.ui -index 0c2d3d5..aa858e8 100644 ---- a/data/ui/contacts-window.ui -+++ b/data/ui/contacts-window.ui -@@ -136,7 +136,7 @@ - - - -- -+ - False - 800 - 600 -@@ -144,9 +144,10 @@ - Contacts - - -- -- -+ -+ - True -+ vertical - - - True -@@ -155,7 +156,7 @@ - - - -- -+ - True - False - False -@@ -193,7 +194,7 @@ - True - False - hamburger_menu_popover -- -+ - - - True -@@ -235,7 +236,7 @@ - - - -- -+ - True - True - True -@@ -350,82 +351,82 @@ - - - -- -- -- -- -- True -- False - -- -+ - True - False -- True -- -- - -- -+ - True - False -- False -+ True -+ -+ - -- -+ - True - False -- vertical -- 300 -- True -+ False - -- -+ - True - False -- True -- end -- center -- -- -- -- -- -- True -- False -- start -- center -- Loading -- -+ vertical -+ 300 -+ True -+ -+ -+ True -+ False -+ True -+ end -+ center -+ -+ -+ -+ -+ -+ True -+ False -+ start -+ center -+ Loading -+ -+ -+ - - - -+ -+ list-pane -+ -+ -+ -+ -+ True -+ -+ -+ -+ False -+ -+ -+ -+ -+ True -+ False -+ True -+ -+ -+ contact-pane -+ - - -- -- list-pane -- -- -- -- -- True -- -- -- -- False -- -- -- -- -- True -- False -- True -- -- -- contact-pane -- - - - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 5349456..759832b 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -18,7 +18,7 @@ - using Folks; - - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-window.ui")] --public class Contacts.Window : Gtk.ApplicationWindow { -+public class Contacts.Window : Hdy.ApplicationWindow { - - private const GLib.ActionEntry[] action_entries = { - { "edit-contact", edit_contact }, -@@ -38,11 +38,11 @@ public class Contacts.Window : Gtk.ApplicationWindow { - [GtkChild] - private Gtk.Container contact_pane_container; - [GtkChild] -- private Hdy.TitleBar titlebar; -+ private Hdy.HeaderBar left_header; - [GtkChild] -- private Gtk.HeaderBar left_header; -+ private Gtk.Separator header_separator; - [GtkChild] -- private Gtk.HeaderBar right_header; -+ private Hdy.HeaderBar right_header; - [GtkChild] - private Gtk.Overlay notification_overlay; - [GtkChild] -@@ -240,7 +240,7 @@ public class Contacts.Window : Gtk.ApplicationWindow { - ((Gtk.Widget) this.done_button).set_focus_on_click (true); - } - // When selecting or editing, we get special headerbars -- this.titlebar.selection_mode = this.state == UiState.SELECTING || this.state.editing (); -+ set_selection_mode (this.state == UiState.SELECTING || this.state.editing ()); - - // Allow the back gesture when not browsing - this.content_box.can_swipe_back = this.state == UiState.NORMAL || -@@ -248,6 +248,21 @@ public class Contacts.Window : Gtk.ApplicationWindow { - this.state == UiState.SELECTING; - } - -+ private void set_selection_mode (bool selection_mode) { -+ var left_ctx = this.left_header.get_style_context (); -+ var separator_ctx = this.header_separator.get_style_context (); -+ var right_ctx = this.right_header.get_style_context (); -+ if (selection_mode) { -+ left_ctx.add_class ("selection-mode"); -+ separator_ctx.add_class ("selection-mode"); -+ right_ctx.add_class ("selection-mode"); -+ } else { -+ left_ctx.remove_class ("selection-mode"); -+ separator_ctx.remove_class ("selection-mode"); -+ right_ctx.remove_class ("selection-mode"); -+ } -+ } -+ - [GtkCallback] - private void on_back_clicked () { - show_list_pane (); diff --git a/debian/patches/0011-Small-flatpak-cleanup.patch b/debian/patches/0011-Small-flatpak-cleanup.patch deleted file mode 100644 index 68439495e8c6563b23503d8f92f7646b23376858..0000000000000000000000000000000000000000 --- a/debian/patches/0011-Small-flatpak-cleanup.patch +++ /dev/null @@ -1,78 +0,0 @@ -From: louib -Date: Mon, 13 Jul 2020 13:37:41 -0400 -Subject: [PATCH 11/42] Small flatpak cleanup - -* Use the gitlab.gnome.org libhandy repo -* Disable unused libhandy options -* Make GOA requirement for librest explicit -* Some formatting ---- - data/flatpak/org.gnome.Contacts.Devel.json | 35 ++++++++++++++++++------------ - 1 file changed, 21 insertions(+), 14 deletions(-) - -diff --git a/data/flatpak/org.gnome.Contacts.Devel.json b/data/flatpak/org.gnome.Contacts.Devel.json -index c7ea512..2a43680 100644 ---- a/data/flatpak/org.gnome.Contacts.Devel.json -+++ b/data/flatpak/org.gnome.Contacts.Devel.json -@@ -32,25 +32,17 @@ - ], - "cleanup": [ - "/include", -- "/lib/pkgconfig", "/share/pkgconfig", -+ "/lib/pkgconfig", -+ "/share/pkgconfig", - "/share/aclocal", -- "/man", "/share/man", -+ "/man", -+ "/share/man", - "/share/gtk-doc", - "/share/vala", -- "*.la", "*.a" -+ "*.la", -+ "*.a" - ], - "modules": [ -- { -- /* Needed by g-o-a */ -- "name": "librest", -- "sources": [ -- { -- "type": "git", -- "branch": "librest-0-7", -- "url": "https://gitlab.gnome.org/GNOME/librest.git" -- } -- ] -- }, - { - "name": "gnome-online-accounts", - "cleanup": [ "/bin", "/share/GConf" ], -@@ -60,6 +52,18 @@ - "type": "git", - "url": "https://gitlab.gnome.org/GNOME/gnome-online-accounts.git" - } -+ ], -+ "modules": [ -+ { -+ "name": "librest", -+ "sources": [ -+ { -+ "type": "git", -+ "branch": "librest-0-7", -+ "url": "https://gitlab.gnome.org/GNOME/librest.git" -+ } -+ ] -+ } - ] - }, - { -@@ -170,7 +174,10 @@ - "buildsystem": "meson", - "builddir": true, - "config-opts": [ -+ "-Dtests=false", -+ "-Dexamples=false", - "-Dglade_catalog=disabled" -+ - ], - "sources": [ - { diff --git a/debian/patches/0014-avatar-Use-unowned-references-when-casting.patch b/debian/patches/0014-avatar-Use-unowned-references-when-casting.patch deleted file mode 100644 index 9a26d0ba751feb5bafb47bbee58413c61f706826..0000000000000000000000000000000000000000 --- a/debian/patches/0014-avatar-Use-unowned-references-when-casting.patch +++ /dev/null @@ -1,52 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:31:44 +0100 -Subject: [PATCH 14/42] avatar: Use unowned references when casting - -And don't use `using Gtk;`, since some names of types can clash. ---- - src/contacts-avatar.vala | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala -index fb758df..cfb32cd 100644 ---- a/src/contacts-avatar.vala -+++ b/src/contacts-avatar.vala -@@ -15,7 +15,6 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - using Gee; - -@@ -23,10 +22,10 @@ using Gee; - * The Avatar of a Contact is responsible for showing an {@link Folks.Individual}'s - * avatar, or a fallback if it's not available. - */ --public class Contacts.Avatar : Bin { -+public class Contacts.Avatar : Gtk.Bin { - private Hdy.Avatar widget; - -- private Individual? individual = null; -+ private unowned Individual? individual = null; - - public Avatar (int size, Individual? individual = null) { - this.individual = individual; -@@ -103,7 +102,7 @@ public class Contacts.Avatar : Bin { - } - - private string look_up_alias_for_display_name (Persona? p) { -- var a = p as AliasDetails; -+ unowned var a = p as AliasDetails; - if (a != null && a.alias != null) - return a.alias; - -@@ -111,7 +110,7 @@ public class Contacts.Avatar : Bin { - } - - private string look_up_name_details_for_display_name (Persona? p) { -- var n = p as NameDetails; -+ unowned var n = p as NameDetails; - if (n != null) { - if (n.full_name != null && n.full_name != "") - return n.full_name; diff --git a/debian/patches/0015-contact-list-Fix-Valadoc-comment.patch b/debian/patches/0015-contact-list-Fix-Valadoc-comment.patch deleted file mode 100644 index 08cfb540bd89e461b9147db13f3af80803039b16..0000000000000000000000000000000000000000 --- a/debian/patches/0015-contact-list-Fix-Valadoc-comment.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:33:10 +0100 -Subject: [PATCH 15/42] contact-list: Fix Valadoc comment - -We don't have our own `Contact` class anymore, only `Folks.Individual` -is used now. ---- - src/contacts-contact-list.vala | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index b371644..c849896 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -20,7 +20,7 @@ using Folks; - using Gee; - - /** -- * The ContactList is the actual list of {@link Contact}s that the user sees on -+ * The ContactList is the actual list of {@link Individual}s that the user sees on - * the left. It is contained by the {@link ListPane}, which also provides other - * functionality, such as an action bar. - */ diff --git a/debian/patches/0016-contact-list-Don-t-omit-Gtk-namespace.patch b/debian/patches/0016-contact-list-Don-t-omit-Gtk-namespace.patch deleted file mode 100644 index b1014d47154f82226450acead4ce6b097abd2da5..0000000000000000000000000000000000000000 --- a/debian/patches/0016-contact-list-Don-t-omit-Gtk-namespace.patch +++ /dev/null @@ -1,141 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:36:20 +0100 -Subject: [PATCH 16/42] contact-list: Don't omit Gtk namespace - -It's happened already that some things clash with the Handy namespace, -so don't use `using Gtk;`. ---- - src/contacts-contact-list.vala | 45 +++++++++++++++++++++--------------------- - 1 file changed, 22 insertions(+), 23 deletions(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index c849896..c12beab 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -15,7 +15,6 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - using Gee; - -@@ -24,14 +23,14 @@ using Gee; - * the left. It is contained by the {@link ListPane}, which also provides other - * functionality, such as an action bar. - */ --public class Contacts.ContactList : ListBox { -- private class ContactDataRow : ListBoxRow { -+public class Contacts.ContactList : Gtk.ListBox { -+ private class ContactDataRow : Gtk.ListBoxRow { - private const int LIST_AVATAR_SIZE = 48; - - public Individual individual; -- private Label label; -+ private Gtk.Label label; - private Avatar avatar; -- public CheckButton selector_button; -+ public Gtk.CheckButton selector_button; - // Whether the selector should always be visible (or only on hover) - private bool checkbox_exposed = false; - -@@ -41,23 +40,23 @@ public class Contacts.ContactList : ListBox { - - get_style_context (). add_class ("contact-data-row"); - -- Grid grid = new Grid (); -+ Gtk.Grid grid = new Gtk.Grid (); - grid.margin = 3; - grid.margin_start = 9; - grid.set_column_spacing (10); - this.avatar = new Avatar (LIST_AVATAR_SIZE, this.individual); - -- this.label = new Label (individual.display_name); -+ this.label = new Gtk.Label (individual.display_name); - this.label.ellipsize = Pango.EllipsizeMode.END; -- this.label.valign = Align.CENTER; -- this.label.halign = Align.START; -+ this.label.valign = Gtk.Align.CENTER; -+ this.label.halign = Gtk.Align.START; - // Make sure it doesn't "twitch" when the checkbox becomes visible - this.label.xalign = 0; - -- this.selector_button = new CheckButton (); -+ this.selector_button = new Gtk.CheckButton (); - this.selector_button.visible = false; -- this.selector_button.valign = Align.CENTER; -- this.selector_button.halign = Align.END; -+ this.selector_button.valign = Gtk.Align.CENTER; -+ this.selector_button.halign = Gtk.Align.END; - this.selector_button.hexpand = true; - // Make sure it doesn't overlap with the scrollbar - this.selector_button.margin_end = 12; -@@ -79,15 +78,15 @@ public class Contacts.ContactList : ListBox { - public void expose_checkbox (bool expose) { - this.checkbox_exposed = expose; - -- var hovering = StateFlags.PRELIGHT in get_state_flags (); -+ var hovering = Gtk.StateFlags.PRELIGHT in get_state_flags (); - this.selector_button.visible = expose || hovering; - } - - // Normally, we would use the (enter/leave)_notify_event here, but since ListBoxRow - // doesn't have its own Gdk.Window, this won't work (at least in GTK+3). -- public override void state_flags_changed (StateFlags previous_state) { -- var hovering_now = StateFlags.PRELIGHT in get_state_flags (); -- var was_hovering = StateFlags.PRELIGHT in previous_state; -+ public override void state_flags_changed (Gtk.StateFlags previous_state) { -+ var hovering_now = Gtk.StateFlags.PRELIGHT in get_state_flags (); -+ var was_hovering = Gtk.StateFlags.PRELIGHT in previous_state; - - if (hovering_now != was_hovering) // If hovering changed - this.selector_button.visible = checkbox_exposed || hovering_now; -@@ -147,7 +146,7 @@ public class Contacts.ContactList : ListBox { - this.nr_contacts_marked = 0; - } - -- private int compare_rows (ListBoxRow row_a, ListBoxRow row_b) { -+ private int compare_rows (Gtk.ListBoxRow row_a, Gtk.ListBoxRow row_b) { - var a = ((ContactDataRow) row_a).individual; - var b = ((ContactDataRow) row_b).individual; - -@@ -170,7 +169,7 @@ public class Contacts.ContactList : ListBox { - return indiv.display_name; - } - -- private void update_header (ListBoxRow row, ListBoxRow? before) { -+ private void update_header (Gtk.ListBoxRow row, Gtk.ListBoxRow? before) { - var current = ((ContactDataRow) row).individual; - - if (before == null) { -@@ -189,9 +188,9 @@ public class Contacts.ContactList : ListBox { - } - } - -- private Label create_header_label (string text) { -- var label = new Label (text); -- label.halign = Align.START; -+ private Gtk.Label create_header_label (string text) { -+ var label = new Gtk.Label (text); -+ label.halign = Gtk.Align.START; - label.margin = 3; - label.margin_start = 6; - label.margin_top = 6; -@@ -237,7 +236,7 @@ public class Contacts.ContactList : ListBox { - row.destroy (); - } - -- public override void row_selected (ListBoxRow? row) { -+ public override void row_selected (Gtk.ListBoxRow? row) { - var data = (ContactDataRow?) row as ContactDataRow; - var individual = data != null ? data.individual : null; - selection_changed (individual); -@@ -247,7 +246,7 @@ public class Contacts.ContactList : ListBox { - #endif - } - -- private bool filter_row (ListBoxRow row) { -+ private bool filter_row (Gtk.ListBoxRow row) { - var individual = ((ContactDataRow) row).individual; - return this.filter_query.is_match (individual) > 0; - } diff --git a/debian/patches/0017-Reduce-the-amount-of-unnecessary-refcounting.patch b/debian/patches/0017-Reduce-the-amount-of-unnecessary-refcounting.patch deleted file mode 100644 index 3d82dffa383b68e8136d0f147711bbe3cccb1d96..0000000000000000000000000000000000000000 --- a/debian/patches/0017-Reduce-the-amount-of-unnecessary-refcounting.patch +++ /dev/null @@ -1,275 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:47:58 +0100 -Subject: [PATCH 17/42] Reduce the amount of unnecessary refcounting - -In a lot of places, we're accidentally taking a strong reference to a -variable, which means that internally, we'll be using a lot of -`g_object_ref()` and `g_object_unref()` for no good reason. Especially -on some hot paths (and large address books), this can make a tiny bit of -a difference in terms of performance. ---- - src/contacts-contact-list.vala | 30 +++++++++++++++--------------- - src/contacts-store.vala | 2 +- - src/contacts-type-descriptor.vala | 2 +- - src/contacts-typeset.vala | 2 +- - src/contacts-utils.vala | 16 ++++++++-------- - src/contacts-window.vala | 14 +++++++------- - 6 files changed, 33 insertions(+), 33 deletions(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index c12beab..96f49f6 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -27,7 +27,7 @@ public class Contacts.ContactList : Gtk.ListBox { - private class ContactDataRow : Gtk.ListBoxRow { - private const int LIST_AVATAR_SIZE = 48; - -- public Individual individual; -+ public unowned Individual individual; - private Gtk.Label label; - private Avatar avatar; - public Gtk.CheckButton selector_button; -@@ -147,16 +147,16 @@ public class Contacts.ContactList : Gtk.ListBox { - } - - private int compare_rows (Gtk.ListBoxRow row_a, Gtk.ListBoxRow row_b) { -- var a = ((ContactDataRow) row_a).individual; -- var b = ((ContactDataRow) row_b).individual; -+ unowned var a = ((ContactDataRow) row_a).individual; -+ unowned var b = ((ContactDataRow) row_b).individual; - - // Always prefer favourites over non-favourites. - if (a.is_favourite != b.is_favourite) - return a.is_favourite? -1 : 1; - - // Both are (non-)favourites: sort by either first name or surname (user preference) -- unowned string? a_name = this.sort_on_surname? try_get_surname(a) : a.display_name; -- unowned string? b_name = this.sort_on_surname? try_get_surname(b) : b.display_name; -+ unowned var a_name = this.sort_on_surname? try_get_surname (a) : a.display_name; -+ unowned var b_name = this.sort_on_surname? try_get_surname (b) : b.display_name; - - return a_name.collate (b_name); - } -@@ -170,7 +170,7 @@ public class Contacts.ContactList : Gtk.ListBox { - } - - private void update_header (Gtk.ListBoxRow row, Gtk.ListBoxRow? before) { -- var current = ((ContactDataRow) row).individual; -+ unowned var current = ((ContactDataRow) row).individual; - - if (before == null) { - if (current.is_favourite) -@@ -180,7 +180,7 @@ public class Contacts.ContactList : Gtk.ListBox { - return; - } - -- var previous = ((ContactDataRow) before).individual; -+ unowned var previous = ((ContactDataRow) before).individual; - if (!current.is_favourite && previous.is_favourite) { - row.set_header (create_header_label (_("All Contacts"))); - } else { -@@ -268,9 +268,9 @@ public class Contacts.ContactList : Gtk.ListBox { - } - - -- private ContactDataRow? find_row_for_contact (Individual individual) { -- foreach (var widget in get_children ()) { -- var row = ((ContactDataRow) widget); -+ private unowned ContactDataRow? find_row_for_contact (Individual individual) { -+ foreach (weak Gtk.Widget widget in get_children ()) { -+ unowned var row = ((ContactDataRow) widget); - if (row.individual == individual) - return row; - } -@@ -280,8 +280,8 @@ public class Contacts.ContactList : Gtk.ListBox { - - public LinkedList get_marked_contacts () { - var cs = new LinkedList (); -- foreach (var widget in get_children ()) { -- var row = widget as ContactDataRow; -+ foreach (weak Gtk.Widget widget in get_children ()) { -+ unowned var row = widget as ContactDataRow; - if (row.selector_button.active) - cs.add (row.individual); - } -@@ -290,8 +290,8 @@ public class Contacts.ContactList : Gtk.ListBox { - - public LinkedList get_marked_contacts_and_hide () { - var cs = new LinkedList (); -- foreach (var widget in get_children ()) { -- var row = widget as ContactDataRow; -+ foreach (weak Gtk.Widget widget in get_children ()) { -+ unowned var row = widget as ContactDataRow; - if (row.selector_button.active) { - row.visible = false; - cs.add (row.individual); -@@ -305,7 +305,7 @@ public class Contacts.ContactList : Gtk.ListBox { - base.button_press_event (event); - - if (event.button == Gdk.BUTTON_SECONDARY) { -- var row = (ContactDataRow) get_row_at_y ((int) Math.round (event.y)); -+ unowned var row = (ContactDataRow) get_row_at_y ((int) Math.round (event.y)); - if (row != null) { - select_row (row); - row.selector_button.active = this.state != UiState.SELECTING || !row.selector_button.active; -diff --git a/src/contacts-store.vala b/src/contacts-store.vala -index daadd19..a9c6a57 100644 ---- a/src/contacts-store.vala -+++ b/src/contacts-store.vala -@@ -49,7 +49,7 @@ public class Contacts.Store : GLib.Object { - FileUtils.get_contents (path, out contents); - - var rows = contents.split ("\n"); -- foreach (var r in rows) { -+ foreach (unowned string r in rows) { - var ids = r.split (" "); - if (ids.length == 2) { - dont_suggest_link.set (ids[0], ids[1]); -diff --git a/src/contacts-type-descriptor.vala b/src/contacts-type-descriptor.vala -index efc96ce..90f0489 100644 ---- a/src/contacts-type-descriptor.vala -+++ b/src/contacts-type-descriptor.vala -@@ -31,7 +31,7 @@ public class Contacts.TypeDescriptor : Object { - OTHER, - CUSTOM; - -- public string to_string () { -+ public unowned string to_string () { - switch (this) { - case VCARD: - return "vcard"; -diff --git a/src/contacts-typeset.vala b/src/contacts-typeset.vala -index f771436..63b4518 100644 ---- a/src/contacts-typeset.vala -+++ b/src/contacts-typeset.vala -@@ -82,7 +82,7 @@ public class Contacts.TypeSet : Object { - /** - * Returns the display name for the type of the given AbstractFieldDetails. - */ -- public string format_type (AbstractFieldDetails detail) { -+ public unowned string format_type (AbstractFieldDetails detail) { - var d = lookup_descriptor_for_field_details (detail); - return d.display_name; - } -diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala -index 8f3b8c1..1540b0c 100644 ---- a/src/contacts-utils.vala -+++ b/src/contacts-utils.vala -@@ -334,7 +334,7 @@ namespace Contacts.Utils { - public Tpf.Persona? find_im_persona (Individual individual, string protocol, string im_address) { - var iid = protocol + ":" + im_address; - foreach (var p in individual.personas) { -- var tp = p as Tpf.Persona; -+ unowned var tp = p as Tpf.Persona; - if (tp != null && tp.iid == iid) { - return tp; - } -@@ -355,8 +355,8 @@ namespace Contacts.Utils { - - public Gee.List get_personas_for_display (Individual individual) { - CompareDataFunc compare_persona_by_store = (a, b) => { -- var store_a = a.store; -- var store_b = b.store; -+ unowned var store_a = a.store; -+ unowned var store_b = b.store; - - // In the same store, sort Google 'other' contacts last - if (store_a == store_b) { -@@ -470,7 +470,7 @@ namespace Contacts.Utils { - if (!persona_is_google (persona)) - return false; - -- var p = persona as Edsf.Persona; -+ unowned var p = persona as Edsf.Persona; - return p != null && !p.in_google_personal_group; - } - -@@ -478,7 +478,7 @@ namespace Contacts.Utils { - if (!persona_is_google_other (persona)) - return false; - -- var u = persona as UrlDetails; -+ unowned var u = persona as UrlDetails; - if (u != null && u.urls.size == 1) { - foreach (var url in u.urls) { - if (/https?:\/\/www.google.com\/profiles\/[0-9]+$/.match(url.value)) -@@ -489,7 +489,7 @@ namespace Contacts.Utils { - } - - public string format_persona_store_name_for_contact (Persona persona) { -- var store = persona.store; -+ unowned var store = persona.store; - if (store.type_id == "eds") { - if (persona_is_google_profile (persona)) - return _("Google Circles"); -@@ -502,7 +502,7 @@ namespace Contacts.Utils { - } - #if HAVE_TELEPATHY - if (store.type_id == "telepathy") { -- var account = (store as Tpf.PersonaStore).account; -+ unowned var account = (store as Tpf.PersonaStore).account; - return Contacts.ImService.get_display_name (account.service); - } - #endif -@@ -595,7 +595,7 @@ namespace Contacts.Utils { - public void fetch_contact_info (Individual individual) { - /* TODO: Ideally Folks should have API for this (#675131) */ - foreach (var p in individual.personas) { -- var tp = p as Tpf.Persona; -+ unowned var tp = p as Tpf.Persona; - if (tp != null) { - tp.contact.request_contact_info_async.begin (null); - } -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 759832b..10ee929 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -126,7 +126,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - } - - private void restore_window_size_and_position_from_settings () { -- var screen = get_screen(); -+ unowned var screen = get_screen (); - if (screen != null && this.window_width <= screen.get_width () && this.window_height <= screen.get_height ()) { - set_default_size (this.window_width, this.window_height); - } -@@ -150,7 +150,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - public override void size_allocate (Gtk.Allocation allocation) { - base.size_allocate (allocation); - -- var screen = get_screen (); -+ unowned var screen = get_screen (); - if (screen != null && !this.window_maximized) { - // Get the size via ::get_size instead of the allocation - // so that the window isn't ever-expanding. -@@ -249,9 +249,9 @@ public class Contacts.Window : Hdy.ApplicationWindow { - } - - private void set_selection_mode (bool selection_mode) { -- var left_ctx = this.left_header.get_style_context (); -- var separator_ctx = this.header_separator.get_style_context (); -- var right_ctx = this.right_header.get_style_context (); -+ unowned var left_ctx = this.left_header.get_style_context (); -+ unowned var separator_ctx = this.header_separator.get_style_context (); -+ unowned var right_ctx = this.right_header.get_style_context (); - if (selection_mode) { - left_ctx.add_class ("selection-mode"); - separator_ctx.add_class ("selection-mode"); -@@ -278,7 +278,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - - this.state = UiState.UPDATING; - -- var name = this.contact_pane.individual.display_name; -+ unowned var name = this.contact_pane.individual.display_name; - this.right_header.title = _("Editing %s").printf (name); - this.contact_pane.edit_contact (); - } -@@ -431,7 +431,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - this.cancel_button.clicked.connect (() => stop_editing (true)); - - this.contact_pane.notify["individual"].connect (() => { -- var individual = this.contact_pane.individual; -+ unowned var individual = this.contact_pane.individual; - if (individual == null) - return; - this.unlink_button.set_visible (individual.personas.size > 1); diff --git a/debian/patches/0018-data-List-compatible-form-factors.patch b/debian/patches/0018-data-List-compatible-form-factors.patch deleted file mode 100644 index fba2b4e072e8f0ab7837d75c2843271a2f944573..0000000000000000000000000000000000000000 --- a/debian/patches/0018-data-List-compatible-form-factors.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: Adrien Plazas -Date: Fri, 6 Nov 2020 08:20:27 +0100 -Subject: [PATCH 18/42] data: List compatible form-factors - -This will allow the app to be available in Phosh and PureOS Store. ---- - data/org.gnome.Contacts.appdata.xml.in.in | 4 ++++ - data/org.gnome.Contacts.desktop.in.in | 2 ++ - 2 files changed, 6 insertions(+) - -diff --git a/data/org.gnome.Contacts.appdata.xml.in.in b/data/org.gnome.Contacts.appdata.xml.in.in -index ed075b2..de07d04 100644 ---- a/data/org.gnome.Contacts.appdata.xml.in.in -+++ b/data/org.gnome.Contacts.appdata.xml.in.in -@@ -529,4 +529,8 @@ - none - none - -+ -+ workstation -+ mobile -+ - -diff --git a/data/org.gnome.Contacts.desktop.in.in b/data/org.gnome.Contacts.desktop.in.in -index 81238eb..db7c13a 100644 ---- a/data/org.gnome.Contacts.desktop.in.in -+++ b/data/org.gnome.Contacts.desktop.in.in -@@ -12,3 +12,5 @@ StartupNotify=true - Categories=GNOME;GTK;Office;ContactManagement; - OnlyShowIn=GNOME;Unity; - DBusActivatable=true -+# Translators: Do NOT translate or transliterate this text (these are enum types)! -+X-Purism-FormFactor=Workstation;Mobile; diff --git a/debian/patches/0019-window-Add-null-check-for-list_pane-on-startup.patch b/debian/patches/0019-window-Add-null-check-for-list_pane-on-startup.patch deleted file mode 100644 index f395b7b0d9b874e734784e3801e02bb5cb747564..0000000000000000000000000000000000000000 --- a/debian/patches/0019-window-Add-null-check-for-list_pane-on-startup.patch +++ /dev/null @@ -1,45 +0,0 @@ -From: Niels De Graef -Date: Sun, 15 Nov 2020 15:14:29 +0100 -Subject: [PATCH 19/42] window: Add null-check for list_pane on startup - -To implement search-as-you-type, we make sure to focus the search field -if that wasn't the case already. However, if a user types something wile -Contacts is still starting up, the UI hasn't finished by that time -already, so that will lead us to dereferencing a NULL-pointer. - -To fix this nice and easy, let's to do a quick NULL-check before we try -to focus anything. - -Fixes: https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/155 ---- - src/contacts-window.vala | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 10ee929..fc3f44e 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -448,7 +448,10 @@ public class Contacts.Window : Hdy.ApplicationWindow { - } else if (((event.keyval == Gdk.Key.s) || - (event.keyval == Gdk.Key.f)) && - ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0)) { -- Utils.grab_entry_focus_no_select (list_pane.filter_entry); -+ // Explicitly check if this.list_pane is already initialized, -+ // or we might crash at startup -+ if (this.list_pane != null && this.list_pane.filter_entry != null) -+ Utils.grab_entry_focus_no_select (this.list_pane.filter_entry); - } else if (event.length >= 1 && - Gdk.keyval_to_unicode (event.keyval) != 0 && - (event.state & Gdk.ModifierType.CONTROL_MASK) == 0 && -@@ -456,7 +459,10 @@ public class Contacts.Window : Hdy.ApplicationWindow { - (event.keyval != Gdk.Key.Escape) && - (event.keyval != Gdk.Key.Tab) && - (event.keyval != Gdk.Key.BackSpace) ) { -- Utils.grab_entry_focus_no_select (list_pane.filter_entry); -+ // Explicitly check if this.list_pane is already initialized, -+ // or we might crash at startup -+ if (this.list_pane != null && this.list_pane.filter_entry != null) -+ Utils.grab_entry_focus_no_select (this.list_pane.filter_entry); - propagate_key_event (event); - } - diff --git a/debian/patches/0020-Add-GitLab-issue-templates.patch b/debian/patches/0020-Add-GitLab-issue-templates.patch deleted file mode 100644 index ba03b254abddea10d90fdbcfeee2af06f9c44a04..0000000000000000000000000000000000000000 --- a/debian/patches/0020-Add-GitLab-issue-templates.patch +++ /dev/null @@ -1,83 +0,0 @@ -From: Niels De Graef -Date: Sun, 22 Nov 2020 18:09:55 +0100 -Subject: [PATCH 20/42] Add GitLab issue templates - ---- - .gitlab/issue_templates/Bug.md | 38 ++++++++++++++++++++++++++++++++++++++ - .gitlab/issue_templates/Feature.md | 22 ++++++++++++++++++++++ - 2 files changed, 60 insertions(+) - create mode 100644 .gitlab/issue_templates/Bug.md - create mode 100644 .gitlab/issue_templates/Feature.md - -diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md -new file mode 100644 -index 0000000..8b01231 ---- /dev/null -+++ b/.gitlab/issue_templates/Bug.md -@@ -0,0 +1,38 @@ -+ -+ -+# Affected version -+- GNOME Contacts version: -+- Application provider: distribution / built from git / flatpak -+- Related info: -+ -+ -+# Steps to reproduce -+ -+1. -+2. -+3. -+ -+# Current behavior -+ -+ -+ -+# Expected behavior -+ -+ -+ -+# Additional information -+ -+ -+ -+ -+/label ~"1. Bug" -diff --git a/.gitlab/issue_templates/Feature.md b/.gitlab/issue_templates/Feature.md -new file mode 100644 -index 0000000..2fa6f03 ---- /dev/null -+++ b/.gitlab/issue_templates/Feature.md -@@ -0,0 +1,22 @@ -+### Use cases -+ -+ -+ -+### Desired behavior -+ -+ -+ -+### Benefits of the solution -+ -+ -+ -+### Possible drawbacks -+ -+ -+ -+/label ~"1. Feature" diff --git a/debian/patches/0021-window-Add-mnemonics-when-creating-a-new-contact.patch b/debian/patches/0021-window-Add-mnemonics-when-creating-a-new-contact.patch deleted file mode 100644 index 9825fe4a4e894143890467ecd6c22fb7ba209536..0000000000000000000000000000000000000000 --- a/debian/patches/0021-window-Add-mnemonics-when-creating-a-new-contact.patch +++ /dev/null @@ -1,38 +0,0 @@ -From: Niels De Graef -Date: Sun, 29 Nov 2020 17:30:59 +0100 -Subject: [PATCH 21/42] window: Add mnemonics when creating a new contact - -Fixes https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/129 ---- - data/ui/contacts-window.ui | 3 ++- - src/contacts-window.vala | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/data/ui/contacts-window.ui b/data/ui/contacts-window.ui -index aa858e8..137fe68 100644 ---- a/data/ui/contacts-window.ui -+++ b/data/ui/contacts-window.ui -@@ -276,7 +276,8 @@ - False - True - False -- Cancel -+ _Cancel -+ True - 70 - center - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index fc3f44e..274baef 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -234,7 +234,8 @@ public class Contacts.Window : Hdy.ApplicationWindow { - = this.done_button.visible - = this.state.editing (); - if (this.state.editing ()) { -- this.done_button.label = (this.state == UiState.CREATING)? _("Add") : _("Done"); -+ this.done_button.use_underline = true; -+ this.done_button.label = (this.state == UiState.CREATING)? _("_Add") : _("Done"); - // Cast is required because Gtk.Button.set_focus_on_click is deprecated and - // we have to use Gtk.Widget.set_focus_on_click instead - ((Gtk.Widget) this.done_button).set_focus_on_click (true); diff --git a/debian/patches/0022-Don-t-use-do-as-identifier.patch b/debian/patches/0022-Don-t-use-do-as-identifier.patch deleted file mode 100644 index becaf01dd00e2a76f362e34ef92fb17d0335da60..0000000000000000000000000000000000000000 --- a/debian/patches/0022-Don-t-use-do-as-identifier.patch +++ /dev/null @@ -1,68 +0,0 @@ -From: Niels De Graef -Date: Sun, 29 Nov 2020 18:12:14 +0100 -Subject: [PATCH 22/42] Don't use "do" as identifier - -`do` is a keyword, so it confuses some tooling. ---- - src/contacts-contact-pane.vala | 2 +- - src/contacts-linking.vala | 4 ++-- - src/contacts-window.vala | 4 ++-- - 3 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/contacts-contact-pane.vala b/src/contacts-contact-pane.vala -index 44db168..7b3a6e6 100644 ---- a/src/contacts-contact-pane.vala -+++ b/src/contacts-contact-pane.vala -@@ -78,7 +78,7 @@ public class Contacts.ContactPane : ScrolledWindow { - var to_link = new LinkedList (); - to_link.add (this.individual); - to_link.add (i); -- operation.do.begin (to_link); -+ operation.execute.begin (to_link); - this.contacts_linked (null, linked_contact, operation); - remove_suggestion_grid (); - }); -diff --git a/src/contacts-linking.vala b/src/contacts-linking.vala -index 4917a99..4b8f7fc 100644 ---- a/src/contacts-linking.vala -+++ b/src/contacts-linking.vala -@@ -30,7 +30,7 @@ namespace Contacts { - } - - // Link individuals -- public async void do (LinkedList individuals) { -+ public async void execute (LinkedList individuals) { - var personas_to_link = new HashSet (); - foreach (var i in individuals) { - var saved_personas = new HashSet (); -@@ -81,7 +81,7 @@ namespace Contacts { - } - - /* Remove a personas from individual */ -- public async void do (Individual main) { -+ public async void execute (Individual main) { - foreach (var persona in main.personas) - personas.add (persona); - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 274baef..2386eea 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -305,7 +305,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - this.state = UiState.NORMAL; - - var operation = new UnLinkOperation (this.store); -- operation.do.begin (individual); -+ operation.execute.begin (individual); - - var b = new Gtk.Button.with_mnemonic (_("_Undo")); - var notification = new InAppNotification (_("Contacts unlinked"), b); -@@ -491,7 +491,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - this.state = UiState.NORMAL; - - var operation = new LinkOperation (this.store); -- operation.do.begin (contact_list); -+ operation.execute.begin (contact_list); - - string msg = ngettext ("%d contacts linked", - "%d contacts linked", diff --git a/debian/patches/0023-Update-Ukrainian-translation.patch b/debian/patches/0023-Update-Ukrainian-translation.patch deleted file mode 100644 index e4890809e7979604c073923ce60e61fee31babab..0000000000000000000000000000000000000000 --- a/debian/patches/0023-Update-Ukrainian-translation.patch +++ /dev/null @@ -1,370 +0,0 @@ -From: Yuri Chornoivan -Date: Sun, 29 Nov 2020 18:15:27 +0000 -Subject: [PATCH 23/42] Update Ukrainian translation - ---- - po/uk.po | 129 +++++++++++++++++++++++++++++++-------------------------------- - 1 file changed, 64 insertions(+), 65 deletions(-) - -diff --git a/po/uk.po b/po/uk.po -index dbc3710..5aba367 100644 ---- a/po/uk.po -+++ b/po/uk.po -@@ -8,8 +8,8 @@ msgid "" - msgstr "" - "Project-Id-Version: 1.0\n" - "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-contacts/issues\n" --"POT-Creation-Date: 2020-06-05 13:39+0000\n" --"PO-Revision-Date: 2020-06-05 22:14+0300\n" -+"POT-Creation-Date: 2020-11-29 16:45+0000\n" -+"PO-Revision-Date: 2020-11-29 20:14+0200\n" - "Last-Translator: Yuri Chornoivan \n" - "Language-Team: Ukrainian \n" - "Language: uk\n" -@@ -18,12 +18,12 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" - "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" --"X-Generator: Lokalize 20.07.70\n" -+"X-Generator: Lokalize 20.11.70\n" - "X-Project-Style: gnome\n" - - #: data/org.gnome.Contacts.appdata.xml.in.in:6 - #: data/org.gnome.Contacts.desktop.in.in:3 data/ui/contacts-window.ui:144 --#: data/ui/contacts-window.ui:162 src/contacts-window.vala:240 -+#: data/ui/contacts-window.ui:163 src/contacts-window.vala:230 - msgid "Contacts" - msgstr "Контакти" - -@@ -52,7 +52,7 @@ msgstr "" - "Контакти також інтегровані з мережевими адресними книгами і автоматично " - "сполучать контакти з різних джерел." - --#: data/org.gnome.Contacts.appdata.xml.in.in:433 -+#: data/org.gnome.Contacts.appdata.xml.in.in:482 - msgid "The GNOME Project" - msgstr "Проєкт GNOME" - -@@ -104,13 +104,12 @@ msgstr "Вибрати фото…" - msgid "Select a File…" - msgstr "Вибрати адресу пошти" - --#: data/ui/contacts-contact-pane.ui:47 -+#: data/ui/contacts-contact-pane.ui:45 - msgid "Select a contact" - msgstr "Виберіть контакт" - --#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:214 --#: data/ui/contacts-window.ui:278 src/contacts-addressbook-dialog.vala:32 --#: src/contacts-editor-property.vala:86 -+#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:215 -+#: src/contacts-addressbook-dialog.vala:32 src/contacts-editor-property.vala:86 - msgid "Cancel" - msgstr "Скасувати" - -@@ -118,8 +117,8 @@ msgstr "Скасувати" - msgid "Take Another…" - msgstr "Виберіть інший…" - --#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:335 --#: src/contacts-window.vala:247 -+#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:337 -+#: src/contacts-window.vala:238 - msgid "Done" - msgstr "Завершено" - -@@ -152,31 +151,31 @@ msgstr "Посилання" - msgid "Remove" - msgstr "Вилучити" - --#: data/ui/contacts-setup-window.ui:12 -+#: data/ui/contacts-setup-window.ui:11 - msgid "Contacts Setup" - msgstr "Налаштування контактів" - --#: data/ui/contacts-setup-window.ui:21 -+#: data/ui/contacts-setup-window.ui:20 - msgid "_Quit" - msgstr "Ви_йти" - --#: data/ui/contacts-setup-window.ui:26 -+#: data/ui/contacts-setup-window.ui:25 - msgid "Cancel setup and quit" - msgstr "Скасувати налаштування" - --#: data/ui/contacts-setup-window.ui:40 -+#: data/ui/contacts-setup-window.ui:39 - msgid "_Done" - msgstr "Завершено" - --#: data/ui/contacts-setup-window.ui:44 -+#: data/ui/contacts-setup-window.ui:43 - msgid "Setup complete" - msgstr "Налаштування завершено" - --#: data/ui/contacts-setup-window.ui:85 -+#: data/ui/contacts-setup-window.ui:82 - msgid "Welcome" - msgstr "Ласкаво просимо" - --#: data/ui/contacts-setup-window.ui:97 -+#: data/ui/contacts-setup-window.ui:94 - msgid "" - "Please select your main address book: this is where new contacts will be " - "added. If you keep your contacts in an online account, you can add them " -@@ -234,27 +233,31 @@ msgstr "Розлучити" - msgid "Delete" - msgstr "Вилучити" - --#: data/ui/contacts-window.ui:170 -+#: data/ui/contacts-window.ui:171 - msgid "Create new contact" - msgstr "Створити контакт" - --#: data/ui/contacts-window.ui:174 -+#: data/ui/contacts-window.ui:175 - msgid "Add contact" - msgstr "Додати контакт" - --#: data/ui/contacts-window.ui:215 -+#: data/ui/contacts-window.ui:216 - msgid "Cancel selection" - msgstr "Скасувати налаштування" - --#: data/ui/contacts-window.ui:259 -+#: data/ui/contacts-window.ui:260 - msgid "Back" - msgstr "Назад" - --#: data/ui/contacts-window.ui:397 -+#: data/ui/contacts-window.ui:279 src/contacts-avatar-selector.vala:197 -+msgid "_Cancel" -+msgstr "_Скасувати" -+ -+#: data/ui/contacts-window.ui:396 - msgid "Loading" - msgstr "Завантаження" - --#: src/contacts-accounts-list.vala:125 src/contacts-addressbook-list.vala:105 -+#: src/contacts-accounts-list.vala:126 src/contacts-addressbook-list.vala:105 - #: src/contacts-esd-setup.vala:149 - msgid "Local Address Book" - msgstr "Локальна адресна книга" -@@ -267,7 +270,7 @@ msgstr "Змінити адресну книгу" - msgid "Change" - msgstr "Змінити" - --#: src/contacts-addressbook-dialog.vala:61 -+#: src/contacts-addressbook-dialog.vala:60 - msgid "" - "New contacts will be added to the selected address book.\n" - "You are able to view and edit contacts from other address books." -@@ -291,35 +294,32 @@ msgstr "Показати контакт з цим окремим ідентиф - msgid "Show the current version of Contacts" - msgstr "Показати поточну версію Контактів" - --#: src/contacts-app.vala:102 -+#: src/contacts-app.vala:112 - #, c-format - msgid "No contact with id %s found" - msgstr "Не знайдено жодного контакту з ідентифікатором %s" - --#: src/contacts-app.vala:103 src/contacts-app.vala:185 -+#: src/contacts-app.vala:113 src/contacts-app.vala:193 - msgid "Contact not found" - msgstr "Не знайдено контакт" - --#: src/contacts-app.vala:164 -+#: src/contacts-app.vala:172 - msgid "translator-credits" - msgstr "Daniel Korostil " - --#: src/contacts-app.vala:165 -+#: src/contacts-app.vala:173 - msgid "GNOME Contacts" - msgstr "Контакти GNOME" - --#: src/contacts-app.vala:166 -+#: src/contacts-app.vala:174 - msgid "About GNOME Contacts" - msgstr "Про контакти GNOME" - --#: src/contacts-app.vala:167 -+#: src/contacts-app.vala:175 - msgid "Contact Management Application" - msgstr "Програма для керування контактами" - --#: src/contacts-app.vala:168 --#| msgid "" --#| "© 2011 Red Hat, Inc.\n" --#| "© 2011-2018 The Contacts Developers" -+#: src/contacts-app.vala:176 - msgid "" - "© 2011 Red Hat, Inc.\n" - "© 2011-2020 The Contacts Developers" -@@ -327,28 +327,24 @@ msgstr "" - "© Red Hat, Inc., 2011\n" - "© Розробники «Контактів», 2011-2020" - --#: src/contacts-app.vala:184 -+#: src/contacts-app.vala:192 - #, c-format - msgid "No contact with email address %s found" - msgstr "Не знайдено жодного контакту з електронною адресою %s" - - #: src/contacts-avatar-selector.vala:109 src/contacts-avatar-selector.vala:115 --#: src/contacts-avatar-selector.vala:235 -+#: src/contacts-avatar-selector.vala:234 - msgid "Failed to set avatar." - msgstr "Не вдалося встановити фотографію" - --#: src/contacts-avatar-selector.vala:195 -+#: src/contacts-avatar-selector.vala:194 - msgid "Browse for more pictures" - msgstr "Переглянути інші фото" - --#: src/contacts-avatar-selector.vala:198 -+#: src/contacts-avatar-selector.vala:197 - msgid "_Open" - msgstr "_Відкрити" - --#: src/contacts-avatar-selector.vala:198 --msgid "_Cancel" --msgstr "_Скасувати" -- - #: src/contacts-contact-editor.vala:50 - msgid "Change avatar" - msgstr "Змінити аватар" -@@ -357,11 +353,11 @@ msgstr "Змінити аватар" - msgid "Add name" - msgstr "Додати ім'я" - --#: src/contacts-contact-list.vala:178 -+#: src/contacts-contact-list.vala:177 - msgid "Favorites" - msgstr "Улюблені" - --#: src/contacts-contact-list.vala:180 src/contacts-contact-list.vala:186 -+#: src/contacts-contact-list.vala:179 src/contacts-contact-list.vala:185 - msgid "All Contacts" - msgstr "Усі контакти" - -@@ -378,19 +374,19 @@ msgstr "Неможливо створити нові контакти: %s" - msgid "Unable to find newly created contact" - msgstr "Неможливо знайти новостворений контакт" - --#: src/contacts-contact-sheet.vala:278 src/contacts-editor-property.vala:488 -+#: src/contacts-contact-sheet.vala:280 src/contacts-editor-property.vala:488 - msgid "Website" - msgstr "Сайт" - --#: src/contacts-contact-sheet.vala:295 src/contacts-editor-property.vala:498 -+#: src/contacts-contact-sheet.vala:297 src/contacts-editor-property.vala:498 - msgid "Nickname" - msgstr "Прізвисько" - --#: src/contacts-contact-sheet.vala:301 src/contacts-editor-property.vala:563 -+#: src/contacts-contact-sheet.vala:303 src/contacts-editor-property.vala:563 - msgid "Birthday" - msgstr "День народження" - --#: src/contacts-contact-sheet.vala:308 src/contacts-editor-property.vala:526 -+#: src/contacts-contact-sheet.vala:310 src/contacts-editor-property.vala:526 - msgid "Note" - msgstr "Примітка" - -@@ -667,7 +663,7 @@ msgstr "TTY" - msgid "Google Circles" - msgstr "Кола Google" - --#: src/contacts-window.vala:210 -+#: src/contacts-window.vala:202 - #, c-format - msgid "%d Selected" - msgid_plural "%d Selected" -@@ -676,37 +672,37 @@ msgstr[1] "%d вибрано" - msgstr[2] "%d вибрано" - msgstr[3] "%d вибрано" - --#: src/contacts-window.vala:247 --msgid "Add" --msgstr "Додати" -+#: src/contacts-window.vala:238 -+msgid "_Add" -+msgstr "_Додати" - --#: src/contacts-window.vala:277 -+#: src/contacts-window.vala:283 - #, c-format - msgid "Editing %s" - msgstr "Редагування %s" - --#: src/contacts-window.vala:304 src/contacts-window.vala:486 --#: src/contacts-window.vala:510 src/contacts-window.vala:556 -+#: src/contacts-window.vala:310 src/contacts-window.vala:500 -+#: src/contacts-window.vala:524 src/contacts-window.vala:570 - msgid "_Undo" - msgstr "_Повернути" - --#: src/contacts-window.vala:305 -+#: src/contacts-window.vala:311 - msgid "Contacts unlinked" - msgstr "Контакти роз'єднано" - --#: src/contacts-window.vala:364 -+#: src/contacts-window.vala:370 - msgid "Unmark as favorite" - msgstr "Вилучити з улюблених" - --#: src/contacts-window.vala:365 -+#: src/contacts-window.vala:371 - msgid "Mark as favorite" - msgstr "Додати до улюблених" - --#: src/contacts-window.vala:379 -+#: src/contacts-window.vala:385 - msgid "New Contact" - msgstr "Створити контакт" - --#: src/contacts-window.vala:482 -+#: src/contacts-window.vala:496 - #, c-format - msgid "%d contacts linked" - msgid_plural "%d contacts linked" -@@ -715,12 +711,12 @@ msgstr[1] "%d контакти сполучено" - msgstr[2] "%d контактів сполучено" - msgstr[3] "%d контакт сполучено" - --#: src/contacts-window.vala:505 -+#: src/contacts-window.vala:519 - #, c-format - msgid "Deleted contact %s" - msgstr "Вилучений контакт %s" - --#: src/contacts-window.vala:507 -+#: src/contacts-window.vala:521 - #, c-format - msgid "%d contact deleted" - msgid_plural "%d contacts deleted" -@@ -729,12 +725,12 @@ msgstr[1] "%d контакти вилучено" - msgstr[2] "%d контактів вилучено" - msgstr[3] "%d контакт вилучено" - --#: src/contacts-window.vala:552 -+#: src/contacts-window.vala:566 - #, c-format - msgid "%s linked to %s" - msgstr "%s сполучений з %s" - --#: src/contacts-window.vala:554 -+#: src/contacts-window.vala:568 - #, c-format - msgid "%s linked to the contact" - msgstr "%s сполучений з контактом" -@@ -790,3 +786,6 @@ msgstr "Вікно розгорнуте?" - #: src/org.gnome.Contacts.gschema.xml:33 - msgid "Stores if the window is currently maximized." - msgstr "Запам'ятовує, чи вікно розгорнуто." -+ -+#~ msgid "Add" -+#~ msgstr "Додати" diff --git a/debian/patches/0024-Update-Swedish-translation.patch b/debian/patches/0024-Update-Swedish-translation.patch deleted file mode 100644 index 0d1aac9d168aa92d34f9d46b8cbc3d1faeda110b..0000000000000000000000000000000000000000 --- a/debian/patches/0024-Update-Swedish-translation.patch +++ /dev/null @@ -1,370 +0,0 @@ -From: Anders Jonsson -Date: Mon, 30 Nov 2020 00:31:40 +0000 -Subject: [PATCH 24/42] Update Swedish translation - ---- - po/sv.po | 126 ++++++++++++++++++++++++++++++++------------------------------- - 1 file changed, 64 insertions(+), 62 deletions(-) - -diff --git a/po/sv.po b/po/sv.po -index 2c50b3d..407c174 100644 ---- a/po/sv.po -+++ b/po/sv.po -@@ -10,8 +10,8 @@ msgid "" - msgstr "" - "Project-Id-Version: gnome-contacts\n" - "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-contacts/issues\n" --"POT-Creation-Date: 2020-06-05 13:39+0000\n" --"PO-Revision-Date: 2020-07-31 16:11+0200\n" -+"POT-Creation-Date: 2020-11-29 16:45+0000\n" -+"PO-Revision-Date: 2020-11-30 01:31+0100\n" - "Last-Translator: Anders Jonsson \n" - "Language-Team: Swedish \n" - "Language: sv\n" -@@ -19,11 +19,11 @@ msgstr "" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" --"X-Generator: Poedit 2.3.1\n" -+"X-Generator: Poedit 2.4.2\n" - - #: data/org.gnome.Contacts.appdata.xml.in.in:6 - #: data/org.gnome.Contacts.desktop.in.in:3 data/ui/contacts-window.ui:144 --#: data/ui/contacts-window.ui:162 src/contacts-window.vala:240 -+#: data/ui/contacts-window.ui:163 src/contacts-window.vala:230 - msgid "Contacts" - msgstr "Kontakter" - -@@ -52,7 +52,7 @@ msgstr "" - "Kontakter integrerar med adressböcker på nätet och länkar automatiskt " - "kontakter från olika källor." - --#: data/org.gnome.Contacts.appdata.xml.in.in:433 -+#: data/org.gnome.Contacts.appdata.xml.in.in:482 - msgid "The GNOME Project" - msgstr "GNOME-projektet" - -@@ -104,13 +104,12 @@ msgstr "Ta en bild…" - msgid "Select a File…" - msgstr "Välj en fil…" - --#: data/ui/contacts-contact-pane.ui:47 -+#: data/ui/contacts-contact-pane.ui:45 - msgid "Select a contact" - msgstr "Välj en kontakt" - --#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:214 --#: data/ui/contacts-window.ui:278 src/contacts-addressbook-dialog.vala:32 --#: src/contacts-editor-property.vala:86 -+#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:215 -+#: src/contacts-addressbook-dialog.vala:32 src/contacts-editor-property.vala:86 - msgid "Cancel" - msgstr "Avbryt" - -@@ -118,8 +117,8 @@ msgstr "Avbryt" - msgid "Take Another…" - msgstr "Ta en till…" - --#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:335 --#: src/contacts-window.vala:247 -+#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:337 -+#: src/contacts-window.vala:238 - msgid "Done" - msgstr "Färdig" - -@@ -152,31 +151,31 @@ msgstr "Länka" - msgid "Remove" - msgstr "Ta bort" - --#: data/ui/contacts-setup-window.ui:12 -+#: data/ui/contacts-setup-window.ui:11 - msgid "Contacts Setup" - msgstr "Kontaktkonfiguration" - --#: data/ui/contacts-setup-window.ui:21 -+#: data/ui/contacts-setup-window.ui:20 - msgid "_Quit" - msgstr "A_vsluta" - --#: data/ui/contacts-setup-window.ui:26 -+#: data/ui/contacts-setup-window.ui:25 - msgid "Cancel setup and quit" - msgstr "Avbryt konfiguration och avsluta" - --#: data/ui/contacts-setup-window.ui:40 -+#: data/ui/contacts-setup-window.ui:39 - msgid "_Done" - msgstr "_Färdig" - --#: data/ui/contacts-setup-window.ui:44 -+#: data/ui/contacts-setup-window.ui:43 - msgid "Setup complete" - msgstr "Konfiguration klar" - --#: data/ui/contacts-setup-window.ui:85 -+#: data/ui/contacts-setup-window.ui:82 - msgid "Welcome" - msgstr "Välkommen" - --#: data/ui/contacts-setup-window.ui:97 -+#: data/ui/contacts-setup-window.ui:94 - msgid "" - "Please select your main address book: this is where new contacts will be " - "added. If you keep your contacts in an online account, you can add them " -@@ -234,27 +233,31 @@ msgstr "Avlänka" - msgid "Delete" - msgstr "Ta bort" - --#: data/ui/contacts-window.ui:170 -+#: data/ui/contacts-window.ui:171 - msgid "Create new contact" - msgstr "Skapa ny kontakt" - --#: data/ui/contacts-window.ui:174 -+#: data/ui/contacts-window.ui:175 - msgid "Add contact" - msgstr "Lägg till kontakt" - --#: data/ui/contacts-window.ui:215 -+#: data/ui/contacts-window.ui:216 - msgid "Cancel selection" - msgstr "Avbryt markering" - --#: data/ui/contacts-window.ui:259 -+#: data/ui/contacts-window.ui:260 - msgid "Back" - msgstr "Bakåt" - --#: data/ui/contacts-window.ui:397 -+#: data/ui/contacts-window.ui:279 src/contacts-avatar-selector.vala:197 -+msgid "_Cancel" -+msgstr "_Avbryt" -+ -+#: data/ui/contacts-window.ui:396 - msgid "Loading" - msgstr "Läser in" - --#: src/contacts-accounts-list.vala:125 src/contacts-addressbook-list.vala:105 -+#: src/contacts-accounts-list.vala:126 src/contacts-addressbook-list.vala:105 - #: src/contacts-esd-setup.vala:149 - msgid "Local Address Book" - msgstr "Lokal adressbok" -@@ -267,7 +270,7 @@ msgstr "Byt adressbok" - msgid "Change" - msgstr "Ändra" - --#: src/contacts-addressbook-dialog.vala:61 -+#: src/contacts-addressbook-dialog.vala:60 - msgid "" - "New contacts will be added to the selected address book.\n" - "You are able to view and edit contacts from other address books." -@@ -291,16 +294,16 @@ msgstr "Visa kontakter med det angivna filtret" - msgid "Show the current version of Contacts" - msgstr "Visa aktuell version av Kontakter" - --#: src/contacts-app.vala:102 -+#: src/contacts-app.vala:112 - #, c-format - msgid "No contact with id %s found" - msgstr "Ingen kontakt med id %s hittades" - --#: src/contacts-app.vala:103 src/contacts-app.vala:185 -+#: src/contacts-app.vala:113 src/contacts-app.vala:193 - msgid "Contact not found" - msgstr "Kontakten hittades inte" - --#: src/contacts-app.vala:164 -+#: src/contacts-app.vala:172 - msgid "translator-credits" - msgstr "" - "Daniel Nylander \n" -@@ -310,19 +313,19 @@ msgstr "" - "Skicka synpunkter på översättningen till\n" - "." - --#: src/contacts-app.vala:165 -+#: src/contacts-app.vala:173 - msgid "GNOME Contacts" - msgstr "GNOME-kontakter" - --#: src/contacts-app.vala:166 -+#: src/contacts-app.vala:174 - msgid "About GNOME Contacts" - msgstr "Om GNOME-kontakter" - --#: src/contacts-app.vala:167 -+#: src/contacts-app.vala:175 - msgid "Contact Management Application" - msgstr "Program för kontakthantering" - --#: src/contacts-app.vala:168 -+#: src/contacts-app.vala:176 - msgid "" - "© 2011 Red Hat, Inc.\n" - "© 2011-2020 The Contacts Developers" -@@ -330,28 +333,24 @@ msgstr "" - "© 2011 Red Hat, Inc.\n" - "© 2011-2020 Utvecklarna av Kontakter" - --#: src/contacts-app.vala:184 -+#: src/contacts-app.vala:192 - #, c-format - msgid "No contact with email address %s found" - msgstr "Ingen kontakt med e-postadressen %s hittades" - - #: src/contacts-avatar-selector.vala:109 src/contacts-avatar-selector.vala:115 --#: src/contacts-avatar-selector.vala:235 -+#: src/contacts-avatar-selector.vala:234 - msgid "Failed to set avatar." - msgstr "Misslyckades med att ställa in profilbild." - --#: src/contacts-avatar-selector.vala:195 -+#: src/contacts-avatar-selector.vala:194 - msgid "Browse for more pictures" - msgstr "Bläddra efter fler bilder" - --#: src/contacts-avatar-selector.vala:198 -+#: src/contacts-avatar-selector.vala:197 - msgid "_Open" - msgstr "_Öppna" - --#: src/contacts-avatar-selector.vala:198 --msgid "_Cancel" --msgstr "_Avbryt" -- - #: src/contacts-contact-editor.vala:50 - msgid "Change avatar" - msgstr "Byt profilbild" -@@ -360,11 +359,11 @@ msgstr "Byt profilbild" - msgid "Add name" - msgstr "Lägg till namn" - --#: src/contacts-contact-list.vala:178 -+#: src/contacts-contact-list.vala:177 - msgid "Favorites" - msgstr "Favoriter" - --#: src/contacts-contact-list.vala:180 src/contacts-contact-list.vala:186 -+#: src/contacts-contact-list.vala:179 src/contacts-contact-list.vala:185 - msgid "All Contacts" - msgstr "Alla kontakter" - -@@ -381,19 +380,19 @@ msgstr "Kunde inte skapa nya kontakter: %s" - msgid "Unable to find newly created contact" - msgstr "Kunde inte hitta nyligen skapad kontakt" - --#: src/contacts-contact-sheet.vala:278 src/contacts-editor-property.vala:488 -+#: src/contacts-contact-sheet.vala:280 src/contacts-editor-property.vala:488 - msgid "Website" - msgstr "Webbplats" - --#: src/contacts-contact-sheet.vala:295 src/contacts-editor-property.vala:498 -+#: src/contacts-contact-sheet.vala:297 src/contacts-editor-property.vala:498 - msgid "Nickname" - msgstr "Smeknamn" - --#: src/contacts-contact-sheet.vala:301 src/contacts-editor-property.vala:563 -+#: src/contacts-contact-sheet.vala:303 src/contacts-editor-property.vala:563 - msgid "Birthday" - msgstr "Födelsedag" - --#: src/contacts-contact-sheet.vala:308 src/contacts-editor-property.vala:526 -+#: src/contacts-contact-sheet.vala:310 src/contacts-editor-property.vala:526 - msgid "Note" - msgstr "Anteckning" - -@@ -670,68 +669,68 @@ msgstr "TTY" - msgid "Google Circles" - msgstr "Google-cirklar" - --#: src/contacts-window.vala:210 -+#: src/contacts-window.vala:202 - #, c-format - msgid "%d Selected" - msgid_plural "%d Selected" - msgstr[0] "%d vald" - msgstr[1] "%d valda" - --#: src/contacts-window.vala:247 --msgid "Add" --msgstr "Lägg till" -+#: src/contacts-window.vala:238 -+msgid "_Add" -+msgstr "_Lägg till" - --#: src/contacts-window.vala:277 -+#: src/contacts-window.vala:283 - #, c-format - msgid "Editing %s" - msgstr "Redigerar %s" - --#: src/contacts-window.vala:304 src/contacts-window.vala:486 --#: src/contacts-window.vala:510 src/contacts-window.vala:556 -+#: src/contacts-window.vala:310 src/contacts-window.vala:500 -+#: src/contacts-window.vala:524 src/contacts-window.vala:570 - msgid "_Undo" - msgstr "_Ångra" - --#: src/contacts-window.vala:305 -+#: src/contacts-window.vala:311 - msgid "Contacts unlinked" - msgstr "Kontakter avlänkade" - --#: src/contacts-window.vala:364 -+#: src/contacts-window.vala:370 - msgid "Unmark as favorite" - msgstr "Avmarkera som favorit" - --#: src/contacts-window.vala:365 -+#: src/contacts-window.vala:371 - msgid "Mark as favorite" - msgstr "Markera som favorit" - --#: src/contacts-window.vala:379 -+#: src/contacts-window.vala:385 - msgid "New Contact" - msgstr "Ny kontakt" - --#: src/contacts-window.vala:482 -+#: src/contacts-window.vala:496 - #, c-format - msgid "%d contacts linked" - msgid_plural "%d contacts linked" - msgstr[0] "%d kontakter länkade" - msgstr[1] "%d kontakter länkade" - --#: src/contacts-window.vala:505 -+#: src/contacts-window.vala:519 - #, c-format - msgid "Deleted contact %s" - msgstr "Tog bort kontakten %s" - --#: src/contacts-window.vala:507 -+#: src/contacts-window.vala:521 - #, c-format - msgid "%d contact deleted" - msgid_plural "%d contacts deleted" - msgstr[0] "%d kontakt borttagen" - msgstr[1] "%d kontakter borttagna" - --#: src/contacts-window.vala:552 -+#: src/contacts-window.vala:566 - #, c-format - msgid "%s linked to %s" - msgstr "%s länkad till %s" - --#: src/contacts-window.vala:554 -+#: src/contacts-window.vala:568 - #, c-format - msgid "%s linked to the contact" - msgstr "%s länkad till kontakten" -@@ -790,6 +789,9 @@ msgstr "Är fönstret maximerat?" - msgid "Stores if the window is currently maximized." - msgstr "Lagrar om fönstret för närvarande är maximerat." - -+#~ msgid "Add" -+#~ msgstr "Lägg till" -+ - #~ msgid "Home email" - #~ msgstr "E-post hem" - diff --git a/debian/patches/0025-Remove-vim-modelines.patch b/debian/patches/0025-Remove-vim-modelines.patch deleted file mode 100644 index b2133cf7cbf00eeb93dfe92d1fecb8b52d18d7c4..0000000000000000000000000000000000000000 --- a/debian/patches/0025-Remove-vim-modelines.patch +++ /dev/null @@ -1,59 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 13:11:36 +0100 -Subject: [PATCH 25/42] Remove vim modelines - ---- - src/cc-crop-area.c | 3 +-- - src/contacts-avatar-selector.vala | 1 - - src/contacts-crop-cheese-dialog.vala | 1 - - src/contacts-list-pane.vala | 1 - - src/main.vala | 1 - - 5 files changed, 1 insertion(+), 6 deletions(-) - -diff --git a/src/cc-crop-area.c b/src/cc-crop-area.c -index ef7ca36..799d55c 100644 ---- a/src/cc-crop-area.c -+++ b/src/cc-crop-area.c -@@ -1,5 +1,4 @@ --/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- -- * -+/* - * Copyright 2009 Red Hat, Inc, - * - * This program is free software; you can redistribute it and/or modify -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index 5e6a160..e44ddcd 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2011 Alexander Larsson - * -diff --git a/src/contacts-crop-cheese-dialog.vala b/src/contacts-crop-cheese-dialog.vala -index cc912c2..5c8fdaf 100644 ---- a/src/contacts-crop-cheese-dialog.vala -+++ b/src/contacts-crop-cheese-dialog.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2018 Elias Entrup - * -diff --git a/src/contacts-list-pane.vala b/src/contacts-list-pane.vala -index 7aeced5..a886afa 100644 ---- a/src/contacts-list-pane.vala -+++ b/src/contacts-list-pane.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2011 Alexander Larsson - * -diff --git a/src/main.vala b/src/main.vala -index 271542a..4d80021 100644 ---- a/src/main.vala -+++ b/src/main.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2011 Alexander Larsson - * diff --git a/debian/patches/0026-avatar-selector-Always-log-messages-on-error.patch b/debian/patches/0026-avatar-selector-Always-log-messages-on-error.patch deleted file mode 100644 index b855350e00aa2c0f987ff53744d7e40cc74b9744..0000000000000000000000000000000000000000 --- a/debian/patches/0026-avatar-selector-Always-log-messages-on-error.patch +++ /dev/null @@ -1,47 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 13:15:05 +0100 -Subject: [PATCH 26/42] avatar-selector: Always log messages on error - ---- - src/contacts-avatar-selector.vala | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index e44ddcd..34dc412 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -142,8 +142,8 @@ public class Contacts.AvatarSelector : Popover { - try { - var stream = details.avatar.load (MAIN_SIZE, null); - return create_thumbnail (new Gdk.Pixbuf.from_stream (stream)); -- } catch { -- debug ("Couldn't create frame for persona \"%s\".", persona.display_id); -+ } catch (Error e) { -+ debug ("Couldn't create frame for persona '%s': %s", persona.display_id, e.message); - } - - return null; -@@ -152,8 +152,8 @@ public class Contacts.AvatarSelector : Popover { - private FlowBoxChild? thumbnail_for_filename (string filename) { - try { - return create_thumbnail (new Gdk.Pixbuf.from_file (filename)); -- } catch { -- debug ("Couldn't create frame for file \"%s\".", filename); -+ } catch (Error e) { -+ debug ("Couldn't create frame for file '%s': %s", filename, e.message); - } - - return null; -@@ -256,9 +256,10 @@ public class Contacts.AvatarSelector : Popover { - var mime_type = file_info.get_content_type (); - - if (mime_type != null) -- pixbuf = thumbnail_factory.generate_thumbnail (uri, mime_type); -+ pixbuf = this.thumbnail_factory.generate_thumbnail (uri, mime_type); - } -- } catch { -+ } catch (Error e) { -+ debug ("Couldn't generate thumbnail for file '%s': %s", uri, e.message); - } - - if (chooser is Dialog) diff --git a/debian/patches/0027-addressbook-list-Remove-commented-out-code.patch b/debian/patches/0027-addressbook-list-Remove-commented-out-code.patch deleted file mode 100644 index 546fcc4774463c001e463fb9d53dc1b6a9fa8dc6..0000000000000000000000000000000000000000 --- a/debian/patches/0027-addressbook-list-Remove-commented-out-code.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 13:17:42 +0100 -Subject: [PATCH 27/42] addressbook-list: Remove commented out code - ---- - src/contacts-addressbook-list.vala | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/src/contacts-addressbook-list.vala b/src/contacts-addressbook-list.vala -index 6c8f2a9..a7b2616 100644 ---- a/src/contacts-addressbook-list.vala -+++ b/src/contacts-addressbook-list.vala -@@ -106,13 +106,6 @@ public class Contacts.AddressbookList : Gtk.ListBox { - add (local_row); - } - -- /* -- if (select_active && -- local_store == this.contacts_store.aggregator.primary_store) { -- row_activated (local_row); -- } -- */ -- - show_all (); - } - } diff --git a/debian/patches/0028-Remove-AUTHORS.patch b/debian/patches/0028-Remove-AUTHORS.patch deleted file mode 100644 index 6d7604b38b6f266e141262f73166f0a4037c92d9..0000000000000000000000000000000000000000 --- a/debian/patches/0028-Remove-AUTHORS.patch +++ /dev/null @@ -1,20 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 18:12:33 +0100 -Subject: [PATCH 28/42] Remove AUTHORS - -It's outdated, and in general something we couldn't remove while we -still had an autotools-based build. But we're 2020 now, so let's get rid -of it. ---- - AUTHORS | 2 -- - 1 file changed, 2 deletions(-) - delete mode 100644 AUTHORS - -diff --git a/AUTHORS b/AUTHORS -deleted file mode 100644 -index 528e728..0000000 ---- a/AUTHORS -+++ /dev/null -@@ -1,2 +0,0 @@ --Alexander Larsson -- diff --git a/debian/patches/0029-README-Remove-Flathub-reference.patch b/debian/patches/0029-README-Remove-Flathub-reference.patch deleted file mode 100644 index aade7e1bb73b24cc33d8eba27de367e35fb58aab..0000000000000000000000000000000000000000 --- a/debian/patches/0029-README-Remove-Flathub-reference.patch +++ /dev/null @@ -1,27 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 18:14:20 +0100 -Subject: [PATCH 29/42] README: Remove Flathub reference - -The Flatpak build has several issues when there is a version mismatch -between the build E-D-S and the host E-D-S, so we have a recurrent wave -of people saying Contacts is broken everytime we release a new version. - -I'm not sure what to do with the flatpak build yet, but let's not -advertise it in our README. ---- - README.md | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/README.md b/README.md -index d7fe853..ac6fa3d 100644 ---- a/README.md -+++ b/README.md -@@ -3,8 +3,6 @@ - Contacts organizes your contacts information from all your online and offline - sources, providing a centralized place for managing your contacts. - --[](https://flathub.org/apps/details/org.gnome.Contacts) -- - ## Building - - You can build and install Contacts using [Meson](http://mesonbuild.com/): diff --git a/debian/patches/0030-utils-Remove-code-that-checks-for-Google.patch b/debian/patches/0030-utils-Remove-code-that-checks-for-Google.patch deleted file mode 100644 index ea27143da033a5ed7e148767dc46dc63e3f01234..0000000000000000000000000000000000000000 --- a/debian/patches/0030-utils-Remove-code-that-checks-for-Google.patch +++ /dev/null @@ -1,51 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 18:33:26 +0100 -Subject: [PATCH 30/42] utils: Remove code that checks for Google+ - -Google+ is dead, so let's not waste maintenance and performance on it. ---- - src/contacts-utils.vala | 21 ++------------------- - 1 file changed, 2 insertions(+), 19 deletions(-) - -diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala -index 1540b0c..b63efeb 100644 ---- a/src/contacts-utils.vala -+++ b/src/contacts-utils.vala -@@ -450,8 +450,7 @@ namespace Contacts.Utils { - bool all_unlinkable = true; - - foreach (var p in individual.personas) { -- if (!persona_is_google_other (p) || -- persona_is_google_profile (p)) -+ if (!persona_is_google_other (p)) - all_unlinkable = false; - } - -@@ -474,26 +473,10 @@ namespace Contacts.Utils { - return p != null && !p.in_google_personal_group; - } - -- public bool persona_is_google_profile (Persona persona) { -- if (!persona_is_google_other (persona)) -- return false; -- -- unowned var u = persona as UrlDetails; -- if (u != null && u.urls.size == 1) { -- foreach (var url in u.urls) { -- if (/https?:\/\/www.google.com\/profiles\/[0-9]+$/.match(url.value)) -- return true; -- } -- } -- return false; -- } -- - public string format_persona_store_name_for_contact (Persona persona) { - unowned var store = persona.store; - if (store.type_id == "eds") { -- if (persona_is_google_profile (persona)) -- return _("Google Circles"); -- else if (persona_is_google_other (persona)) -+ if (persona_is_google_other (persona)) - return _("Google"); - - string? eds_name = lookup_esource_name_by_uid_for_contact (store.id); diff --git a/debian/patches/0031-Import-only-the-Folks-namspace.patch b/debian/patches/0031-Import-only-the-Folks-namspace.patch deleted file mode 100644 index 17471504f51c9af7175e5bba2e4f51ec09cc1ed1..0000000000000000000000000000000000000000 --- a/debian/patches/0031-Import-only-the-Folks-namspace.patch +++ /dev/null @@ -1,1994 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 21:22:08 +0100 -Subject: [PATCH 31/42] Import only the Folks namspace - -This commit removes all remaining occurrences `using Gtk;`, `using Gee;` -and `using Hdy;`. There's a number of reasons why we're doing this, but -to list a few: - -* The `Gtk` and `Hdy` namespaces have had issues before with types - having the same name (ie HdyHeaderBar and GtkHeaderBar) which could - suddenly break the build. -* By omitting namespaces, it's harder to see for new contributors what - the actual type is of a certain variable when they want to look up the - API -* In the long term, we want to get rid of Gee, as it's clear that it's - not really maintained, and has some serious performance drawbacks. ---- - src/contacts-accounts-list.vala | 35 +++---- - src/contacts-avatar-selector.vala | 48 ++++----- - src/contacts-avatar.vala | 1 - - src/contacts-contact-list.vala | 9 +- - src/contacts-contact-pane.vala | 32 +++--- - src/contacts-contact-sheet.vala | 49 +++++----- - src/contacts-crop-cheese-dialog.vala | 16 ++- - src/contacts-editor-property.vala | 163 ++++++++++++++++--------------- - src/contacts-fake-persona-store.vala | 103 ++++++++++--------- - src/contacts-im-service.vala | 6 +- - src/contacts-in-app-notification.vala | 14 ++- - src/contacts-link-suggestion-grid.vala | 4 +- - src/contacts-linked-personas-dialog.vala | 25 +++-- - src/contacts-linking.vala | 15 ++- - src/contacts-list-pane.vala | 18 ++-- - src/contacts-setup-window.vala | 7 +- - src/contacts-shell-search-provider.vala | 5 +- - src/contacts-type-combo.vala | 16 ++- - src/contacts-type-descriptor.vala | 6 +- - src/contacts-typeset.vala | 22 +++-- - src/contacts-utils.vala | 45 ++++----- - src/contacts-vcard-type-mapping.vala | 4 +- - src/main.vala | 1 - - tests/basic-test.vala | 4 +- - 24 files changed, 310 insertions(+), 338 deletions(-) - -diff --git a/src/contacts-accounts-list.vala b/src/contacts-accounts-list.vala -index 7e96657..4c9a0f6 100644 ---- a/src/contacts-accounts-list.vala -+++ b/src/contacts-accounts-list.vala -@@ -15,13 +15,11 @@ - * along with this program. If not, see . - */ - --using Gtk; --using Hdy; - using Folks; - - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-accounts-list.ui")] --public class Contacts.AccountsList : ListBox { -- private ListBoxRow last_selected_row; -+public class Contacts.AccountsList : Gtk.ListBox { -+ private Gtk.ListBoxRow last_selected_row; - - private Store contacts_store; - -@@ -36,7 +34,7 @@ public class Contacts.AccountsList : ListBox { - this.set_header_func (add_separator); - } - -- public override void row_activated (ListBoxRow row) { -+ public override void row_activated (Gtk.ListBoxRow row) { - if (row == null) - return; - -@@ -45,11 +43,11 @@ public class Contacts.AccountsList : ListBox { - return; - } - -- var checkmark = row.get_data ("checkmark"); -+ var checkmark = row.get_data ("checkmark"); - checkmark.show (); - - if (last_selected_row != null) { -- checkmark = last_selected_row.get_data ("checkmark"); -+ checkmark = last_selected_row.get_data ("checkmark"); - if (checkmark != null) - checkmark.hide (); - } -@@ -89,23 +87,25 @@ public class Contacts.AccountsList : ListBox { - source_account_id = goa_source_ext.account_id; - } - -- var row = new ActionRow (); -+ var row = new Hdy.ActionRow (); - row.set_data ("store", persona_store); - - Gtk.Image provider_image; - if (source_account_id != "") - provider_image = Contacts.get_icon_for_goa_account (source_account_id); - else -- provider_image = new Image.from_icon_name (Config.APP_ID, IconSize.DIALOG); -+ provider_image = new Gtk.Image.from_icon_name (Config.APP_ID, -+ Gtk.IconSize.DIALOG); - row.add_prefix (provider_image); - row.title = provider_name; - row.subtitle = parent_source.display_name; - row.show_all (); - row.no_show_all = true; -- var checkmark = new Image.from_icon_name ("object-select-symbolic", IconSize.MENU); -+ var checkmark = new Gtk.Image.from_icon_name ("object-select-symbolic", -+ Gtk.IconSize.MENU); - checkmark.set ("margin-end", 6, -- "valign", Align.CENTER, -- "halign", Align.END, -+ "valign", Gtk.Align.CENTER, -+ "halign", Gtk.Align.END, - "vexpand", true, - "hexpand", true); - row.add (checkmark); -@@ -120,16 +120,17 @@ public class Contacts.AccountsList : ListBox { - } - - if (local_store != null) { -- var local_row = new ActionRow (); -- var provider_image = new Image.from_icon_name (Config.APP_ID, IconSize.DIALOG); -+ var local_row = new Hdy.ActionRow (); -+ var provider_image = new Gtk.Image.from_icon_name (Config.APP_ID, -+ Gtk.IconSize.DIALOG); - local_row.add_prefix (provider_image); - local_row.title = _("Local Address Book"); - local_row.show_all (); - local_row.no_show_all = true; -- var checkmark = new Image.from_icon_name ("object-select-symbolic", IconSize.MENU); -+ var checkmark = new Gtk.Image.from_icon_name ("object-select-symbolic", Gtk.IconSize.MENU); - checkmark.set ("margin-end", 6, -- "valign", Align.CENTER, -- "halign", Align.END, -+ "valign", Gtk.Align.CENTER, -+ "halign", Gtk.Align.END, - "vexpand", true, - "hexpand", true); - local_row.add (checkmark); -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index 34dc412..fb83e37 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -15,7 +15,6 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - - /** -@@ -26,7 +25,7 @@ using Folks; - * After a user has initially chosen an avatar, we provide a cropping tool. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-avatar-selector.ui")] --public class Contacts.AvatarSelector : Popover { -+public class Contacts.AvatarSelector : Gtk.Popover { - const int ICONS_SIZE = 64; - const int MAIN_SIZE = 128; - const string AVATAR_BUTTON_CSS_NAME = "avatar-button"; -@@ -36,13 +35,13 @@ public class Contacts.AvatarSelector : Popover { - private Individual individual; - - [GtkChild] -- private FlowBox personas_thumbnail_grid; -+ private Gtk.FlowBox personas_thumbnail_grid; - [GtkChild] -- private FlowBox stock_thumbnail_grid; -+ private Gtk.FlowBox stock_thumbnail_grid; - - #if HAVE_CHEESE - [GtkChild] -- private Button cheese_button; -+ private Gtk.Button cheese_button; - private int num_cameras; - private Cheese.CameraDeviceMonitor camera_monitor; - #endif -@@ -116,25 +115,25 @@ public class Contacts.AvatarSelector : Popover { - } - } - -- private FlowBoxChild create_thumbnail (Gdk.Pixbuf source_pixbuf) { -+ private Gtk.FlowBoxChild create_thumbnail (Gdk.Pixbuf source_pixbuf) { - var avatar = new Avatar (ICONS_SIZE); - avatar.set_pixbuf (source_pixbuf); - -- var button = new Button (); -+ var button = new Gtk.Button (); - button.get_style_context ().add_class (AVATAR_BUTTON_CSS_NAME); - button.image = avatar; - button.clicked.connect ( () => { - selected_pixbuf (scale_pixbuf_for_avatar_use (source_pixbuf)); - this.popdown (); - }); -- var child = new FlowBoxChild (); -+ var child = new Gtk.FlowBoxChild (); - child.add (button); -- child.set_halign (Align.START); -+ child.set_halign (Gtk.Align.START); - - return child; - } - -- private FlowBoxChild? thumbnail_for_persona (Persona persona) { -+ private Gtk.FlowBoxChild? thumbnail_for_persona (Persona persona) { - var details = persona as AvatarDetails; - if (details == null || details.avatar == null) - return null; -@@ -149,7 +148,7 @@ public class Contacts.AvatarSelector : Popover { - return null; - } - -- private FlowBoxChild? thumbnail_for_filename (string filename) { -+ private Gtk.FlowBoxChild? thumbnail_for_filename (string filename) { - try { - return create_thumbnail (new Gdk.Pixbuf.from_file (filename)); - } catch (Error e) { -@@ -179,7 +178,7 @@ public class Contacts.AvatarSelector : Popover { - } - - [GtkCallback] -- private void on_cheese_clicked (Button button) { -+ private void on_cheese_clicked (Gtk.Button button) { - var dialog = new CropCheeseDialog.for_cheese ((Window) this.get_toplevel()); - dialog.show_all (); - dialog.picture_selected.connect ( (pix) => { -@@ -189,14 +188,14 @@ public class Contacts.AvatarSelector : Popover { - } - - [GtkCallback] -- private void on_file_clicked (Button button) { -- var chooser = new FileChooserNative (_("Browse for more pictures"), -- (Gtk.Window)this.get_toplevel (), -- FileChooserAction.OPEN, -- _("_Open"), _("_Cancel")); -+ private void on_file_clicked (Gtk.Button button) { -+ var chooser = new Gtk.FileChooserNative (_("Browse for more pictures"), -+ (Gtk.Window) this.get_toplevel (), -+ Gtk.FileChooserAction.OPEN, -+ _("_Open"), _("_Cancel")); - chooser.set_modal (true); - chooser.set_local_only (false); -- var preview = new Image (); -+ var preview = new Gtk.Image (); - preview.set_size_request (MAIN_SIZE, -1); - chooser.set_preview_widget (preview); - chooser.set_use_preview_label (false); -@@ -209,7 +208,7 @@ public class Contacts.AvatarSelector : Popover { - chooser.set_current_folder (folder); - - chooser.response.connect ( (response) => { -- if (response != ResponseType.ACCEPT) { -+ if (response != Gtk.ResponseType.ACCEPT) { - chooser.destroy (); - return; - } -@@ -241,12 +240,12 @@ public class Contacts.AvatarSelector : Popover { - this.popdown(); - } - -- private void update_preview (FileChooser chooser) { -+ private void update_preview (Gtk.FileChooser chooser) { - var uri = chooser.get_preview_uri (); - if (uri != null) { - Gdk.Pixbuf? pixbuf = null; - -- var preview = chooser.get_preview_widget () as Image; -+ var preview = chooser.get_preview_widget () as Gtk.Image; - - var file = File.new_for_uri (uri); - try { -@@ -262,13 +261,14 @@ public class Contacts.AvatarSelector : Popover { - debug ("Couldn't generate thumbnail for file '%s': %s", uri, e.message); - } - -- if (chooser is Dialog) -- ((Dialog) chooser).set_response_sensitive (ResponseType.ACCEPT, (pixbuf != null)); -+ if (chooser is Gtk.Dialog) -+ ((Gtk.Dialog) chooser).set_response_sensitive (Gtk.ResponseType.ACCEPT, -+ (pixbuf != null)); - - if (pixbuf != null) - preview.set_from_pixbuf (pixbuf); - else -- preview.set_from_icon_name ("dialog-question", IconSize.DIALOG); -+ preview.set_from_icon_name ("dialog-question", Gtk.IconSize.DIALOG); - } - - chooser.set_preview_widget_active (true); -diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala -index cfb32cd..3365306 100644 ---- a/src/contacts-avatar.vala -+++ b/src/contacts-avatar.vala -@@ -16,7 +16,6 @@ - */ - - using Folks; --using Gee; - - /** - * The Avatar of a Contact is responsible for showing an {@link Folks.Individual}'s -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index 96f49f6..07103af 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -16,7 +16,6 @@ - */ - - using Folks; --using Gee; - - /** - * The ContactList is the actual list of {@link Individual}s that the user sees on -@@ -278,8 +277,8 @@ public class Contacts.ContactList : Gtk.ListBox { - return null; - } - -- public LinkedList get_marked_contacts () { -- var cs = new LinkedList (); -+ public Gee.LinkedList get_marked_contacts () { -+ var cs = new Gee.LinkedList (); - foreach (weak Gtk.Widget widget in get_children ()) { - unowned var row = widget as ContactDataRow; - if (row.selector_button.active) -@@ -288,8 +287,8 @@ public class Contacts.ContactList : Gtk.ListBox { - return cs; - } - -- public LinkedList get_marked_contacts_and_hide () { -- var cs = new LinkedList (); -+ public Gee.LinkedList get_marked_contacts_and_hide () { -+ var cs = new Gee.LinkedList (); - foreach (weak Gtk.Widget widget in get_children ()) { - unowned var row = widget as ContactDataRow; - if (row.selector_button.active) { -diff --git a/src/contacts-contact-pane.vala b/src/contacts-contact-pane.vala -index 7b3a6e6..6ab9c2c 100644 ---- a/src/contacts-contact-pane.vala -+++ b/src/contacts-contact-pane.vala -@@ -15,9 +15,7 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - const int PROFILE_SIZE = 128; - -@@ -27,26 +25,26 @@ const int PROFILE_SIZE = 128; - * and a ContactEditor to edit contact information. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-contact-pane.ui")] --public class Contacts.ContactPane : ScrolledWindow { -+public class Contacts.ContactPane : Gtk.ScrolledWindow { - -- private Window parent_window; -+ private Contacts.Window parent_window; - - private Store store; - - public Individual? individual { get; set; default = null; } - - [GtkChild] -- private Stack stack; -+ private Gtk.Stack stack; - - [GtkChild] -- private Grid none_selected_page; -+ private Gtk.Grid none_selected_page; - - [GtkChild] -- private Container contact_sheet_page; -+ private Gtk.Container contact_sheet_page; - private ContactSheet? sheet = null; - - [GtkChild] -- private Box contact_editor_page; -+ private Gtk.Box contact_editor_page; - private ContactEditor? editor = null; - - public bool on_edit_mode = false; -@@ -60,13 +58,13 @@ public class Contacts.ContactPane : ScrolledWindow { - public signal void display_name_changed (string new_display_name); - - -- public ContactPane (Window parent_window, Store contacts_store) { -+ public ContactPane (Contacts.Window parent_window, Store contacts_store) { - this.parent_window = parent_window; - this.store = contacts_store; - } - - public void add_suggestion (Individual i) { -- var parent_overlay = this.get_parent () as Overlay; -+ var parent_overlay = this.get_parent () as Gtk.Overlay; - - remove_suggestion_grid (); - this.suggestion_grid = new LinkSuggestionGrid (i); -@@ -75,7 +73,7 @@ public class Contacts.ContactPane : ScrolledWindow { - this.suggestion_grid.suggestion_accepted.connect ( () => { - var linked_contact = this.individual.display_name; - var operation = new LinkOperation (this.store); -- var to_link = new LinkedList (); -+ var to_link = new Gee.LinkedList (); - to_link.add (this.individual); - to_link.add (i); - operation.execute.begin (to_link); -@@ -217,7 +215,7 @@ public class Contacts.ContactPane : ScrolledWindow { - } - - var fake_persona = new FakePersona (FakePersonaStore.the_store(), writeable_properties, details); -- var fake_personas = new HashSet (); -+ var fake_personas = new Gee.HashSet (); - fake_personas.add (fake_persona); - this.individual = new FakeIndividual(fake_personas); - -@@ -258,11 +256,11 @@ public class Contacts.ContactPane : ScrolledWindow { - - private void show_message_dialog (string message) { - var dialog = -- new MessageDialog (this.parent_window, -- DialogFlags.DESTROY_WITH_PARENT | DialogFlags.MODAL, -- MessageType.ERROR, -- ButtonsType.OK, -- "%s", message); -+ new Gtk.MessageDialog (this.parent_window, -+ Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.MODAL, -+ Gtk.MessageType.ERROR, -+ Gtk.ButtonsType.OK, -+ "%s", message); - dialog.run (); - dialog.destroy (); - } -diff --git a/src/contacts-contact-sheet.vala b/src/contacts-contact-sheet.vala -index 669e771..813d26c 100644 ---- a/src/contacts-contact-sheet.vala -+++ b/src/contacts-contact-sheet.vala -@@ -15,16 +15,14 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - /** - * The contact sheet displays the actual information of a contact. - * - * (Note: to edit a contact, use the {@link ContactEditor} instead. - */ --public class Contacts.ContactSheet : Grid { -+public class Contacts.ContactSheet : Gtk.Grid { - private int last_row = 0; - private Individual individual; - private unowned Store store; -@@ -53,51 +51,54 @@ public class Contacts.ContactSheet : Grid { - update (); - } - -- private Label create_persona_store_label (Persona p) { -- var store_name = new Label (Utils.format_persona_store_name_for_contact (p)); -+ private Gtk.Label create_persona_store_label (Persona p) { -+ var store_name = new Gtk.Label (Utils.format_persona_store_name_for_contact (p)); - var attrList = new Pango.AttrList (); - attrList.insert (Pango.attr_weight_new (Pango.Weight.BOLD)); - store_name.set_attributes (attrList); -- store_name.set_halign (Align.START); -+ store_name.set_halign (Gtk.Align.START); - store_name.set_ellipsize (Pango.EllipsizeMode.MIDDLE); - - return store_name; - } - -- private Button create_button (string icon) { -- var button = new Button.from_icon_name (icon, IconSize.BUTTON); -- button.set_halign (Align.END); -+ private Gtk.Button create_button (string icon) { -+ var button = new Gtk.Button.from_icon_name (icon, Gtk.IconSize.BUTTON); -+ button.set_halign (Gtk.Align.END); - button.get_style_context ().add_class ("flatten"); - - return button; - } - -- void add_row_with_label (string label_value, string value, Widget? btn1 = null, Widget? btn2 =null) { -+ void add_row_with_label (string label_value, -+ string value, -+ Gtk.Widget? btn1 = null, -+ Gtk.Widget? btn2 =null) { - if (value == "" || value == null) - return; -- var type_label = new Label (label_value); -+ var type_label = new Gtk.Label (label_value); - type_label.xalign = 1.0f; -- type_label.set_halign (Align.END); -- type_label.set_valign (Align.CENTER); -+ type_label.set_halign (Gtk.Align.END); -+ type_label.set_valign (Gtk.Align.CENTER); - type_label.get_style_context ().add_class ("dim-label"); - this.attach (type_label, 0, this.last_row, 1, 1); - -- var value_label = new Label (value); -+ var value_label = new Gtk.Label (value); - value_label.set_line_wrap (true); - value_label.xalign = 0.0f; -- value_label.set_halign (Align.START); -+ value_label.set_halign (Gtk.Align.START); - value_label.set_ellipsize (Pango.EllipsizeMode.END); - value_label.wrap_mode = Pango.WrapMode.CHAR; - value_label.set_selectable (true); - - if (btn1 != null || btn2 !=null) { -- var value_box = new Box(Orientation.HORIZONTAL, 12); -- value_box.pack_start(value_label, false, false, 0); -+ var value_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12); -+ value_box.pack_start (value_label, false, false, 0); - - if (btn1 != null) -- value_box.pack_end(btn1, false, false, 0); -+ value_box.pack_end (btn1, false, false, 0); - if (btn2 != null) -- value_box.pack_end(btn2, false, false, 0); -+ value_box.pack_end (btn2, false, false, 0); - this.attach (value_box, 1, this.last_row, 1, 1); - } else { - this.attach (value_label, 1, this.last_row, 1, 1); -@@ -111,7 +112,7 @@ public class Contacts.ContactSheet : Grid { - - var image_frame = new Avatar (PROFILE_SIZE, this.individual); - image_frame.set_vexpand (false); -- image_frame.set_valign (Align.START); -+ image_frame.set_valign (Gtk.Align.START); - - this.attach (image_frame, 0, 0, 1, 3); - -@@ -150,7 +151,7 @@ public class Contacts.ContactSheet : Grid { - } - - private void create_name_label () { -- var name_label = new Label (""); -+ var name_label = new Gtk.Label (""); - name_label.ellipsize = Pango.EllipsizeMode.END; - name_label.xalign = 0f; - name_label.selectable = true; -@@ -262,9 +263,11 @@ public class Contacts.ContactSheet : Grid { - foreach (var url in url_details.urls) { - var button = create_button ("web-browser-symbolic"); - button.clicked.connect (() => { -- var window = (Window) button.get_toplevel (); -+ var window = (Contacts.Window) button.get_toplevel (); - try { -- show_uri_on_window (window, fallback_to_https (url.value), Gdk.CURRENT_TIME); -+ Gtk.show_uri_on_window (window, -+ fallback_to_https (url.value), -+ Gdk.CURRENT_TIME); - } catch (Error e) { - var message = "Failed to open url '%s'".printf(url.value); - -diff --git a/src/contacts-crop-cheese-dialog.vala b/src/contacts-crop-cheese-dialog.vala -index 5c8fdaf..e0c9439 100644 ---- a/src/contacts-crop-cheese-dialog.vala -+++ b/src/contacts-crop-cheese-dialog.vala -@@ -15,14 +15,12 @@ - * along with this program. If not, see . - */ - --using Gtk; -- - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-crop-cheese-dialog.ui")] - public class Contacts.CropCheeseDialog : Gtk.Window { - [GtkChild] -- private Stack stack; -+ private Gtk.Stack stack; - [GtkChild] -- private Button take_another_button; -+ private Gtk.Button take_another_button; - - private Cc.CropArea crop_area; - private const string STACK_NAME_CROP = "crop"; -@@ -65,19 +63,19 @@ public class Contacts.CropCheeseDialog : Gtk.Window { - } - - [GtkCallback] -- private void on_cancel_clicked (Button button) { -+ private void on_cancel_clicked (Gtk.Button button) { - this.destroy (); - } - - [GtkCallback] -- private void on_take_another_clicked (Button button) { -+ private void on_take_another_clicked (Gtk.Button button) { - #if HAVE_CHEESE - this.stack.set_visible_child_name (STACK_NAME_CHEESE); - #endif - } - - [GtkCallback] -- private void on_take_pic_clicked (Button button) { -+ private void on_take_pic_clicked (Gtk.Button button) { - #if HAVE_CHEESE - var camera = this.cheese.get_camera () as Cheese.Camera; - this.flash.fire (); -@@ -94,11 +92,11 @@ public class Contacts.CropCheeseDialog : Gtk.Window { - } - - [GtkCallback] -- private void on_done_clicked (Button button) { -+ private void on_done_clicked (Gtk.Button button) { - picture_selected (this.crop_area.get_picture ()); - destroy(); - } -- -+ - [GtkCallback] - private void on_destroy () { - #if HAVE_CHEESE -diff --git a/src/contacts-editor-property.vala b/src/contacts-editor-property.vala -index 0a908ca..e80e54e 100644 ---- a/src/contacts-editor-property.vala -+++ b/src/contacts-editor-property.vala -@@ -16,35 +16,32 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; -- - - public class Contacts.BirthdayEditor : Gtk.Dialog { -- private SpinButton day_spin; -- private ComboBoxText month_combo; -- private SpinButton year_spin; -+ private Gtk.SpinButton day_spin; -+ private Gtk.ComboBoxText month_combo; -+ private Gtk.SpinButton year_spin; - public bool is_set { get; set; default = false; } - - public signal void changed (); - delegate void AdjustingDateFn (); - -- public DateTime get_birthday () { -- return new DateTime.local (year_spin.get_value_as_int (), -- month_combo.get_active () + 1, -- day_spin.get_value_as_int (), -- 0, 0, 0).to_utc (); -+ public GLib.DateTime get_birthday () { -+ return new GLib.DateTime.local (year_spin.get_value_as_int (), -+ month_combo.get_active () + 1, -+ day_spin.get_value_as_int (), -+ 0, 0, 0).to_utc (); - } - -- public BirthdayEditor (Window window, DateTime birthday) { -+ public BirthdayEditor (Gtk.Window window, DateTime birthday) { - Object (transient_for: window, use_header_bar: 1); -- day_spin = new SpinButton.with_range (1.0, 31.0, 1.0); -+ day_spin = new Gtk.SpinButton.with_range (1.0, 31.0, 1.0); - day_spin.set_digits (0); - day_spin.numeric = true; - day_spin.set_value ((double)birthday.to_local ().get_day_of_month ()); - -- month_combo = new ComboBoxText (); -+ month_combo = new Gtk.ComboBoxText (); - var january = new DateTime.local (1, 1, 1, 1, 1, 1); - for (int i = 0; i < 12; i++) { - var month = january.add_months (i); -@@ -53,47 +50,47 @@ public class Contacts.BirthdayEditor : Gtk.Dialog { - month_combo.set_active (birthday.to_local ().get_month () - 1); - month_combo.hexpand = true; - -- year_spin = new SpinButton.with_range (1800, 3000, 1); -+ year_spin = new Gtk.SpinButton.with_range (1800, 3000, 1); - year_spin.set_digits (0); - year_spin.numeric = true; - year_spin.set_value ((double)birthday.to_local ().get_year ()); - - // Create grid and labels -- Box box = new Box (Orientation.VERTICAL, 12); -- Grid grid = new Grid (); -+ var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 12); -+ var grid = new Gtk.Grid (); - grid.set_column_spacing (12); - grid.set_row_spacing (12); -- Label day = new Label(_("Day")); -- day.set_halign (Align.END); -+ Gtk.Label day = new Gtk.Label(_("Day")); -+ day.set_halign (Gtk.Align.END); - grid.attach (day, 0, 0); - grid.attach (day_spin, 1, 0); -- Label month = new Label(_("Month")); -- month.set_halign (Align.END); -+ Gtk.Label month = new Gtk.Label(_("Month")); -+ month.set_halign (Gtk.Align.END); - grid.attach (month, 0, 1); - grid.attach (month_combo, 1, 1); -- Label year = new Label(_("Year")); -- year.set_halign (Align.END); -+ Gtk.Label year = new Gtk.Label(_("Year")); -+ year.set_halign (Gtk.Align.END); - grid.attach (year, 0, 2); - grid.attach (year_spin, 1, 2); - box.pack_start (grid); - - var content = this.get_content_area (); -- content.set_valign (Align.CENTER); -+ content.set_valign (Gtk.Align.CENTER); - content.add (box); - - this.title = _("Change Address Book"); -- add_buttons (_("Set"), ResponseType.OK, -- _("Cancel"), ResponseType.CANCEL, -- null); -- var ok_button = this.get_widget_for_response (ResponseType.OK); -+ add_buttons (_("Set"), Gtk.ResponseType.OK, -+ _("Cancel"), Gtk.ResponseType.CANCEL, -+ null); -+ var ok_button = this.get_widget_for_response (Gtk.ResponseType.OK); - ok_button.get_style_context ().add_class ("suggested-action"); - this.response.connect ((id) => { - switch (id) { -- case ResponseType.OK: -+ case Gtk.ResponseType.OK: - this.is_set = true; - changed (); - break; -- case ResponseType.CANCEL: -+ case Gtk.ResponseType.CANCEL: - break; - } - this.destroy (); -@@ -130,8 +127,8 @@ public class Contacts.BirthdayEditor : Gtk.Dialog { - } - } - --public class Contacts.AddressEditor : Box { -- private Entry? entries[7]; /* must be the number of elements in postal_element_props */ -+public class Contacts.AddressEditor : Gtk.Box { -+ private Gtk.Entry? entries[7]; /* must be the number of elements in postal_element_props */ - - private const string[] postal_element_props = {"street", "extension", "locality", "region", "postal_code", "po_box", "country"}; - private static string[] postal_element_names = {_("Street"), _("Extension"), _("City"), _("State/Province"), _("Zip/Postal Code"), _("PO box"), _("Country")}; -@@ -140,13 +137,13 @@ public class Contacts.AddressEditor : Box { - - public AddressEditor (PostalAddressFieldDetails details) { - set_hexpand (true); -- set_orientation (Orientation.VERTICAL); -+ set_orientation (Gtk.Orientation.VERTICAL); - - for (int i = 0; i < entries.length; i++) { - string postal_part; - details.value.get (AddressEditor.postal_element_props[i], out postal_part); - -- entries[i] = new Entry (); -+ entries[i] = new Gtk.Entry (); - entries[i].set_hexpand (true); - entries[i].set ("placeholder-text", AddressEditor.postal_element_names[i]); - -@@ -179,23 +176,23 @@ public class Contacts.AddressEditor : Box { - } - } - --public class Contacts.EditorPropertyRow : ListBoxRow { -+public class Contacts.EditorPropertyRow : Gtk.ListBoxRow { - public bool is_empty { get; set; default = true; } - public bool is_removed { get; set; default = false; } - public string ptype { get; private set; } -- public Box container; -- public Box header; -- public Revealer revealer; -+ public Gtk.Box container; -+ public Gtk.Box header; -+ public Gtk.Revealer revealer; - - construct { -- this.revealer = new Revealer (); -+ this.revealer = new Gtk.Revealer (); - //TODO: bind orientation property to available space -- var box = new Box (Orientation.VERTICAL, 6); -- box.set_valign (Align.START); -+ var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 6); -+ box.set_valign (Gtk.Align.START); - box.set_can_focus (false); -- this.container = new Box (Orientation.HORIZONTAL, 6); -+ this.container = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); - this.container.set_can_focus (false); -- this.header = new Box (Orientation.HORIZONTAL, 6); -+ this.header = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); - this.header.set_can_focus (false); - box.pack_start (this.header); - box.pack_end (this.container); -@@ -240,16 +237,19 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - } - - public void add_base_label (string label) { -- var title_label = new Label (label); -+ var title_label = new Gtk.Label (label); - title_label.set_hexpand (false); -- title_label.set_halign (Align.START); -+ title_label.set_halign (Gtk.Align.START); - title_label.margin_end = 6; - this.header.pack_start (title_label); - } - -- public void add_base_combo (Set details_set, string label, TypeSet combo_type, AbstractFieldDetails details) { -- var title_label = new Label (label); -- title_label.set_halign (Align.START); -+ public void add_base_combo (Gee.Set details_set, -+ string label, -+ TypeSet combo_type, -+ AbstractFieldDetails details) { -+ var title_label = new Gtk.Label (label); -+ title_label.set_halign (Gtk.Align.START); - this.header.pack_start (title_label); - TypeCombo combo = new TypeCombo (combo_type); - combo.set_hexpand (false); -@@ -265,11 +265,11 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - } - - //FIXME: create only one add_base_entry -- public void add_base_entry_email (Set details_set, -+ public void add_base_entry_email (Gee.Set details_set, - EmailFieldDetails details, - string placeholder) { -- var value_entry = new Entry (); -- value_entry.set_input_purpose (InputPurpose.EMAIL); -+ var value_entry = new Gtk.Entry (); -+ value_entry.set_input_purpose (Gtk.InputPurpose.EMAIL); - value_entry.placeholder_text = placeholder; - value_entry.set_text (details.value); - value_entry.set_hexpand (true); -@@ -286,11 +286,11 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - }); - } - -- public void add_base_entry_phone (Set details_set, -+ public void add_base_entry_phone (Gee.Set details_set, - PhoneFieldDetails details, - string placeholder) { -- var value_entry = new Entry (); -- value_entry.set_input_purpose (InputPurpose.PHONE); -+ var value_entry = new Gtk.Entry (); -+ value_entry.set_input_purpose (Gtk.InputPurpose.PHONE); - value_entry.placeholder_text = placeholder; - value_entry.set_text (details.value); - value_entry.set_hexpand (true); -@@ -308,12 +308,12 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - }); - } - -- public void add_base_entry_url (Set details_set, -+ public void add_base_entry_url (Gee.Set details_set, - UrlFieldDetails details, - string placeholder) { -- var value_entry = new Entry (); -+ var value_entry = new Gtk.Entry (); - value_entry.placeholder_text = placeholder; -- value_entry.set_input_purpose (InputPurpose.URL); -+ value_entry.set_input_purpose (Gtk.InputPurpose.URL); - value_entry.set_text (details.value); - value_entry.set_hexpand (true); - this.container.pack_start (value_entry); -@@ -330,11 +330,11 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - }); - } - -- public void add_base_delete (Set details_set, -+ public void add_base_delete (Gee.Set details_set, - AbstractFieldDetails details) { -- var delete_button = new Button.from_icon_name ("user-trash-symbolic"); -+ var delete_button = new Gtk.Button.from_icon_name ("user-trash-symbolic"); - delete_button.get_accessible ().set_name (_("Delete field")); -- delete_button.set_valign (Align.START); -+ delete_button.set_valign (Gtk.Align.START); - this.bind_property ("is-empty", delete_button, "sensitive", BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN); - this.container.pack_end (delete_button, false); - -@@ -351,7 +351,7 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - * A widget representing a property of a persona in the editor {@link Contact}. - * We can have more then one property in one properity e.g. Emails therefore we need to return a List - */ --public class Contacts.EditorProperty : ArrayList { -+public class Contacts.EditorProperty : Gee.ArrayList { - public bool writeable { get; private set; default = false; } - - public EditorProperty (Persona persona, string property_name, bool only_new = false) { -@@ -439,9 +439,10 @@ public class Contacts.EditorProperty : ArrayList { - } - } - -- private EditorPropertyRow create_for_email (Set set, EmailFieldDetails? details = null) { -+ private EditorPropertyRow create_for_email (Gee.Set set, -+ EmailFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "PERSONAL"; - var new_details = new EmailFieldDetails ("", parameters); - set.add(new_details); -@@ -456,9 +457,10 @@ public class Contacts.EditorProperty : ArrayList { - return box; - } - -- private EditorPropertyRow create_for_phone (Set set, PhoneFieldDetails? details = null) { -+ private EditorPropertyRow create_for_phone (Gee.Set set, -+ PhoneFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "CELL"; - var new_details = new PhoneFieldDetails ("", parameters); - set.add(new_details); -@@ -475,9 +477,10 @@ public class Contacts.EditorProperty : ArrayList { - } - - // TODO: add support for different types of urls -- private EditorPropertyRow create_for_url (Set set, UrlFieldDetails? details = null) { -+ private EditorPropertyRow create_for_url (Gee.Set set, -+ UrlFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "PERSONAL"; - var new_details = new UrlFieldDetails ("", parameters); - set.add(new_details); -@@ -497,7 +500,7 @@ public class Contacts.EditorProperty : ArrayList { - var box = new EditorPropertyRow ("nickname"); - box.add_base_label (_("Nickname")); - -- var value_entry = new Entry (); -+ var value_entry = new Gtk.Entry (); - value_entry.set_text (details.nickname); - value_entry.set_hexpand (true); - box.container.pack_start (value_entry); -@@ -513,10 +516,10 @@ public class Contacts.EditorProperty : ArrayList { - } - - // TODO: support different types of nodes -- private EditorPropertyRow create_for_note (Set details_set, -+ private EditorPropertyRow create_for_note (Gee.Set details_set, - NoteFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "PERSONAL"; - var new_details = new NoteFieldDetails ("", parameters); - details_set.add(new_details); -@@ -525,10 +528,10 @@ public class Contacts.EditorProperty : ArrayList { - var box = new EditorPropertyRow ("notes"); - box.add_base_label (_("Note")); - -- var sw = new ScrolledWindow (null, null); -- sw.set_shadow_type (ShadowType.OUT); -+ var sw = new Gtk.ScrolledWindow (null, null); -+ sw.set_shadow_type (Gtk.ShadowType.OUT); - sw.set_size_request (-1, 100); -- var value_text = new TextView (); -+ var value_text = new Gtk.TextView (); - value_text.get_buffer ().set_text (details.value); - value_text.set_hexpand (true); - sw.add (value_text); -@@ -537,7 +540,7 @@ public class Contacts.EditorProperty : ArrayList { - box.add_base_delete (details_set, details); - - value_text.get_buffer ().changed.connect (() => { -- TextIter start, end; -+ Gtk.TextIter start, end; - value_text.get_buffer ().get_start_iter (out start); - value_text.get_buffer ().get_end_iter (out end); - details.value = value_text.get_buffer ().get_text (start, end, true); -@@ -562,11 +565,11 @@ public class Contacts.EditorProperty : ArrayList { - var box = new EditorPropertyRow ("birthday"); - box.add_base_label (_("Birthday")); - -- var button = new Button.with_label (_("Set Birthday")); -+ var button = new Gtk.Button.with_label (_("Set Birthday")); - box.container.pack_start (button); - - button.clicked.connect (() => { -- Window parent_window = button.get_toplevel () as Window; -+ var parent_window = button.get_toplevel () as Gtk.Window; - if (parent_window != null) { - var dialog = new BirthdayEditor (parent_window, date); - -@@ -583,9 +586,9 @@ public class Contacts.EditorProperty : ArrayList { - - box.is_empty = details.birthday == null; - -- var delete_button = new Button.from_icon_name ("user-trash-symbolic"); -+ var delete_button = new Gtk.Button.from_icon_name ("user-trash-symbolic"); - delete_button.get_accessible ().set_name (_("Delete field")); -- delete_button.set_valign (Align.START); -+ delete_button.set_valign (Gtk.Align.START); - box.bind_property ("is-empty", delete_button, "sensitive", BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN); - box.container.pack_end (delete_button, false); - -@@ -600,10 +603,10 @@ public class Contacts.EditorProperty : ArrayList { - return box; - } - -- private EditorPropertyRow create_for_address (Set details_set, -+ private EditorPropertyRow create_for_address (Gee.Set details_set, - PostalAddressFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "HOME"; - var address = new PostalAddress(null, null, null, null, null, null, null, null, null); - var new_details = new PostalAddressFieldDetails (address, parameters); -diff --git a/src/contacts-fake-persona-store.vala b/src/contacts-fake-persona-store.vala -index 7a5d458..b7127bc 100644 ---- a/src/contacts-fake-persona-store.vala -+++ b/src/contacts-fake-persona-store.vala -@@ -16,7 +16,6 @@ - */ - - using Folks; --using Gee; - - /** - * A "dummy" store which is used to have an equivalent of a PersonaStore for a -@@ -29,18 +28,18 @@ public class Contacts.FakePersonaStore : PersonaStore { - _the_store = new FakePersonaStore (); - return _the_store; - } -- private HashMap _personas; -- private Map _personas_ro; -+ private Gee.HashMap _personas; -+ private Gee.Map _personas_ro; - - public override string type_id { get { return "fake"; } } - - public FakePersonaStore () { - Object (id: "uri", display_name: "fake store"); -- this._personas = new HashMap (); -+ this._personas = new Gee.HashMap (); - this._personas_ro = this._personas.read_only_view; - } - -- public override Map personas { -+ public override Gee.Map personas { - get { return this._personas_ro; } - } - -@@ -71,16 +70,16 @@ public class Contacts.FakePersonaStore : PersonaStore { - const string BACKEND_NAME = "fake-store"; - - public class Contacts.FakePersona : Persona, --AvatarDetails, --BirthdayDetails, --EmailDetails, --ImDetails, --NameDetails, --NoteDetails, --PhoneDetails, --UrlDetails, --PostalAddressDetails --{ -+ AvatarDetails, -+ BirthdayDetails, -+ EmailDetails, -+ ImDetails, -+ NameDetails, -+ NoteDetails, -+ PhoneDetails, -+ UrlDetails, -+ PostalAddressDetails { -+ - private HashTable properties; - // Keep track of the persona in the actual store - public weak Persona real_persona { get; set; default = null; } -@@ -97,10 +96,10 @@ PostalAddressDetails - } - } - -- private ArrayList _changed_properties; -+ private Gee.ArrayList _changed_properties; - - construct { -- this._changed_properties = new ArrayList (); -+ this._changed_properties = new Gee.ArrayList (); - } - - public LoadableIcon? avatar { -@@ -149,72 +148,72 @@ PostalAddressDetails - set {} - } - -- public Set phone_numbers { -+ public Gee.Set phone_numbers { - get { - unowned Value? value = this.properties.get ("phone-numbers"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = GLib.Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("phone-numbers"); }); - this.properties.set ("phone-numbers", new_value); - value = this.properties.get ("phone-numbers"); - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("phone-numbers", value); - } - } - -- public Set urls { -+ public Gee.Set urls { - get { - unowned Value? value = this.properties.get ("urls"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("urls"); }); - this.properties.set ("urls", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("urls", value); - } - } - -- public Set postal_addresses { -+ public Gee.Set postal_addresses { - get { - unowned Value? value = this.properties.get ("postal-addresses"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("postal-addresses"); }); - this.properties.set ("postal-addresses", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("postal-addresses", value); - } - } - -- public Set notes { -+ public Gee.Set notes { - get { - unowned Value? value = this.properties.get ("notes"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("notes"); }); - this.properties.set ("notes", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("notes", value); -@@ -238,36 +237,36 @@ PostalAddressDetails - set {} - } - -- public MultiMap im_addresses { -+ public Gee.MultiMap im_addresses { - get { - unowned Value? value = this.properties.get ("im-addresses"); - if (value == null) { -- var new_value = Value (typeof (MultiMap)); -+ var new_value = Value (typeof (Gee.MultiMap)); - var set = new FakeHashMultiMap (); - new_value.set_object (set); - this.properties.set ("im-addresses", new_value); - set.changed.connect (() => { notify_property ("im-addresses"); }); - value = new_value; - } -- return (MultiMap) value; -+ return (Gee.MultiMap) value; - } - set { - this.properties.set ("im-addresses", value); - } - } - -- public Set email_addresses { -+ public Gee.Set email_addresses { - get { - unowned Value? value = this.properties.get ("email-addresses"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - set.changed.connect (() => { notify_property ("email-addresses"); }); - new_value.set_object (set); - this.properties.set ("email-addresses", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("email-addresses", value); -@@ -422,8 +421,8 @@ PostalAddressDetails - yield ((BirthdayDetails) persona).change_calendar_event_id ((string?) new_value); - break; - case "email-addresses": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new EmailFieldDetails (e.value, e.parameters)); -@@ -437,13 +436,13 @@ PostalAddressDetails - yield ((GenderDetails) persona).change_gender ((Gender) new_value); - break; - case "groups": -- yield ((GroupDetails) persona).change_groups ((Set) new_value); -+ yield ((GroupDetails) persona).change_groups ((Gee.Set) new_value); - break; - case "im-addresses": -- yield ((ImDetails) persona).change_im_addresses ((MultiMap) new_value); -+ yield ((ImDetails) persona).change_im_addresses ((Gee.MultiMap) new_value); - break; - case "local-ids": -- yield ((LocalIdDetails) persona).change_local_ids ((Set) new_value); -+ yield ((LocalIdDetails) persona).change_local_ids ((Gee.Set) new_value); - break; - case "structured-name": - yield ((NameDetails) persona).change_structured_name ((StructuredName?) new_value); -@@ -455,8 +454,8 @@ PostalAddressDetails - yield ((NameDetails) persona).change_nickname ((string) new_value); - break; - case "notes": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new NoteFieldDetails (e.value, e.parameters)); -@@ -464,8 +463,8 @@ PostalAddressDetails - yield ((NoteDetails) persona).change_notes (copy); - break; - case "phone-numbers": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new PhoneFieldDetails (e.value, e.parameters)); -@@ -473,8 +472,8 @@ PostalAddressDetails - yield ((PhoneDetails) persona).change_phone_numbers (copy); - break; - case "postal-addresses": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && !e.value.is_empty ()) - copy.add (new PostalAddressFieldDetails (e.value, e.parameters)); -@@ -482,11 +481,11 @@ PostalAddressDetails - yield ((PostalAddressDetails) persona).change_postal_addresses (copy); - break; - case "roles": -- yield ((RoleDetails) persona).change_roles ((Set) new_value); -+ yield ((RoleDetails) persona).change_roles ((Gee.Set) new_value); - break; - case "urls": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new UrlFieldDetails (e.value, e.parameters)); -@@ -494,7 +493,7 @@ PostalAddressDetails - yield ((UrlDetails) persona).change_urls (copy); - break; - case "web-service-addresses": -- yield ((WebServiceDetails) persona).change_web_service_addresses ((MultiMap) new_value); -+ yield ((WebServiceDetails) persona).change_web_service_addresses ((Gee.MultiMap) new_value); - break; - default: - critical ("Unknown property '%s' in Contact.set_persona_property().", property_name); -@@ -509,7 +508,7 @@ PostalAddressDetails - public class Contacts.FakeIndividual : Individual { - public weak Individual real_individual { get; set; default = null; } - public weak FakePersona primary_persona { get; set; default = null; } -- public FakeIndividual (Set? personas) { -+ public FakeIndividual (Gee.Set? personas) { - base (personas); - foreach (var p in personas) { - // Keep track of the main persona -@@ -519,7 +518,7 @@ public class Contacts.FakeIndividual : Individual { - } - - public FakeIndividual.from_real (Individual individual) { -- var fake_personas = new HashSet (); -+ var fake_personas = new Gee.HashSet (); - foreach (var p in individual.personas) { - var fake_p = new FakePersona.from_real (p); - // Keep track of the main persona -diff --git a/src/contacts-im-service.vala b/src/contacts-im-service.vala -index d97b7fe..aceef3f 100644 ---- a/src/contacts-im-service.vala -+++ b/src/contacts-im-service.vala -@@ -15,9 +15,7 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - /** - * ImService is a helper struct that maps a service identifier to the -@@ -59,8 +57,8 @@ public struct Contacts.ImService { - /** - * Returns the display name for the given IM service in a nicely presented way. - */ -- public static string get_display_name (string service_name) { -- foreach (var d in data) -+ public static unowned string get_display_name (string service_name) { -+ foreach (unowned ImService d in data) - if (d.service_name == service_name) - return dgettext (Config.GETTEXT_PACKAGE, d.display_name); - -diff --git a/src/contacts-in-app-notification.vala b/src/contacts-in-app-notification.vala -index dc5d035..25857e2 100644 ---- a/src/contacts-in-app-notification.vala -+++ b/src/contacts-in-app-notification.vala -@@ -15,19 +15,17 @@ - * along with this program. If not, see . - */ - --using Gtk; -- - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-in-app-notification.ui")] --public class Contacts.InAppNotification : Revealer { -+public class Contacts.InAppNotification : Gtk.Revealer { - // Close the in-app notification after 5 seconds by default. - private const uint DEFAULT_KEEPALIVE = 5; - - [GtkChild] -- private Grid grid; -+ private Gtk.Grid grid; - - [GtkChild] -- private Label label; -- public Label message_label { -+ private Gtk.Label label; -+ public Gtk.Label message_label { - get { return this.label; } - } - -@@ -39,7 +37,7 @@ public class Contacts.InAppNotification : Revealer { - /** - * Creates an in-app notification with the given message, and an accompanying button if not null. - */ -- public InAppNotification (string message, Button? button = null) { -+ public InAppNotification (string message, Gtk.Button? button = null) { - this.label.label = message; - - if (button != null) { -@@ -73,7 +71,7 @@ public class Contacts.InAppNotification : Revealer { - } - - [GtkCallback] -- private void on_close_button_clicked(Button close_button) { -+ private void on_close_button_clicked(Gtk.Button close_button) { - dismiss(); - } - } -diff --git a/src/contacts-link-suggestion-grid.vala b/src/contacts-link-suggestion-grid.vala -index 99846b1..cad38dc 100644 ---- a/src/contacts-link-suggestion-grid.vala -+++ b/src/contacts-link-suggestion-grid.vala -@@ -15,9 +15,7 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - /** - * The LinkSuggestionGrid is show at the bottom of the ContactPane. -@@ -25,7 +23,7 @@ using Gee; - * and another (hopefully) similar contact. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-link-suggestion-grid.ui")] --public class Contacts.LinkSuggestionGrid : Grid { -+public class Contacts.LinkSuggestionGrid : Gtk.Grid { - private const int AVATAR_SIZE = 54; - - [GtkChild] -diff --git a/src/contacts-linked-personas-dialog.vala b/src/contacts-linked-personas-dialog.vala -index 8ae9413..9c26b4d 100644 ---- a/src/contacts-linked-personas-dialog.vala -+++ b/src/contacts-linked-personas-dialog.vala -@@ -15,21 +15,20 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-linked-personas-dialog.ui")] --public class Contacts.LinkedPersonasDialog : Dialog { -+public class Contacts.LinkedPersonasDialog : Gtk.Dialog { - private const int AVATAR_SIZE = 54; - - [GtkChild] -- private ListBox linked_accounts_view; -+ private Gtk.ListBox linked_accounts_view; - - private Individual individual; - - public bool any_unlinked = false; - -- public LinkedPersonasDialog (Window main_win, Store store, Individual individual) { -+ public LinkedPersonasDialog (Gtk.Window main_win, Store store, Individual individual) { - Object ( - use_header_bar: 1, - transient_for: main_win, -@@ -48,7 +47,7 @@ public class Contacts.LinkedPersonasDialog : Dialog { - continue; - } - -- var row_grid = new Grid (); -+ var row_grid = new Gtk.Grid (); - - var image_frame = new Avatar (AVATAR_SIZE, individual); - image_frame.set_hexpand (false); -@@ -56,24 +55,24 @@ public class Contacts.LinkedPersonasDialog : Dialog { - image_frame.margin_end = 12; - row_grid.attach (image_frame, 0, 0, 1, 2); - -- var display_name = new Label (""); -- display_name.set_halign (Align.START); -- display_name.set_valign (Align.END); -+ var display_name = new Gtk.Label (""); -+ display_name.set_halign (Gtk.Align.START); -+ display_name.set_valign (Gtk.Align.END); - display_name.set_hexpand (true); - display_name.set_markup (Markup.printf_escaped ("%s", p.display_id)); - - row_grid.attach (display_name, 1, 0, 1, 1); - -- var store_name = new Label (Contacts.Utils.format_persona_store_name_for_contact (p)); -- store_name.set_halign (Align.START); -- store_name.set_valign (Align.START); -+ var store_name = new Gtk.Label (Contacts.Utils.format_persona_store_name_for_contact (p)); -+ store_name.set_halign (Gtk.Align.START); -+ store_name.set_valign (Gtk.Align.START); - store_name.set_hexpand (true); - store_name.get_style_context ().add_class ("dim-label"); - row_grid.attach (store_name, 1, 1, 1, 1); - -- var button = new Button.with_label (_("Unlink")); -+ var button = new Gtk.Button.with_label (_("Unlink")); - button.margin_end = 6; -- button.set_valign (Align.CENTER); -+ button.set_valign (Gtk.Align.CENTER); - button.get_child ().margin = 1; - row_grid.attach (button, 2, 0, 1, 2); - -diff --git a/src/contacts-linking.vala b/src/contacts-linking.vala -index 4b8f7fc..010cc91 100644 ---- a/src/contacts-linking.vala -+++ b/src/contacts-linking.vala -@@ -16,24 +16,23 @@ - */ - - using Folks; --using Gee; - - namespace Contacts { - public class LinkOperation : Object { - private weak Store store; -- private HashSet> personas_to_link; -+ private Gee.HashSet> personas_to_link; - private bool finished { get; set; default = false; } - - public LinkOperation(Store store) { - this.store = store; -- this.personas_to_link = new HashSet> (); -+ this.personas_to_link = new Gee.HashSet> (); - } - - // Link individuals -- public async void execute (LinkedList individuals) { -- var personas_to_link = new HashSet (); -+ public async void execute (Gee.LinkedList individuals) { -+ var personas_to_link = new Gee.HashSet (); - foreach (var i in individuals) { -- var saved_personas = new HashSet (); -+ var saved_personas = new Gee.HashSet (); - foreach (var persona in i.personas) { - personas_to_link.add (persona); - saved_personas.add (persona); -@@ -73,11 +72,11 @@ namespace Contacts { - public class UnLinkOperation : Object { - private weak Store store; - -- private HashSet personas; -+ private Gee.HashSet
- Version 3.38.1 is a stable bugfix release in the 3.38.x series, with - the following changes: + This is the beta release in the GNOME 43 unstable series, + with the following improvements: +
This release also updates translations in several languages.
+ This is the first unstable release in the GNOME 43 series, + with the following improvements: +
+ This is the first stable release in the GNOME 42 series, with the + following improvements since 41.0:
+ This is the second unstable release in the GNOME 42 series, + with the following improvements: +
+ This is the first unstable release in the GNOME 42 series, + with the following improvements: +
+ Version 41 is a stable release, with the following major + improvements since version 40: +
This release also updates translations in several languages
+ This is the first unstable release in the GNOME 41 series, + with the following improvements: +
+ Version 40 is a stable release, with the following major + improvements since 3.38: +
+ This is the second unstable release in the GNOME 40 series, + with the following improvements: +
+ This is the first unstable release in the GNOME 40 series, + with the following improvements: +
@@ -64,7 +293,7 @@
This is the beta release in the 3.37 development series, @@ -76,7 +305,7 @@
This is the first unstable release in the 3.37 development series, @@ -106,7 +335,7 @@
This is the next unstable release in the 3.35 development series, @@ -123,7 +352,7 @@
This is the first unstable release in the 3.35 development series, @@ -160,7 +389,7 @@
This is the last unstable release in the 3.33 development series, @@ -172,7 +401,7 @@
This is the next unstable release in the 3.33 development series, @@ -190,7 +419,7 @@
This is the second unstable release in the 3.33 development series, @@ -204,7 +433,7 @@
This is the first unstable release in the 3.33 development series, @@ -241,7 +470,7 @@
This is the next unstable release in the 3.31 development series, @@ -256,7 +485,7 @@
This is the next unstable release in the 3.31 development series, @@ -274,7 +503,7 @@
This is the first unstable release in the 3.31 development series, @@ -305,7 +534,7 @@
This is the last unstable release in the 3.29 development series, @@ -320,7 +549,7 @@
This is the first unstable release in the 3.29 development series, @@ -354,7 +583,7 @@
This is the fourth unstable (beta) release in the 3.27 development series, @@ -368,7 +597,7 @@
This is the third unstable release in the 3.27 development series, @@ -383,7 +612,7 @@
This is the second unstable release in the 3.27 development series, @@ -400,7 +629,7 @@
This is the first unstable release in the 3.27 development series, @@ -428,7 +657,7 @@
This is an unstable release in the 3.25 development series, @@ -436,7 +665,7 @@
This is an unstable release in the 3.25 development series, @@ -458,7 +687,7 @@
This is an unstable release in the 3.25 development series, @@ -474,7 +703,7 @@
-Date: Mon, 13 Jul 2020 13:37:41 -0400 -Subject: [PATCH 11/42] Small flatpak cleanup - -* Use the gitlab.gnome.org libhandy repo -* Disable unused libhandy options -* Make GOA requirement for librest explicit -* Some formatting ---- - data/flatpak/org.gnome.Contacts.Devel.json | 35 ++++++++++++++++++------------ - 1 file changed, 21 insertions(+), 14 deletions(-) - -diff --git a/data/flatpak/org.gnome.Contacts.Devel.json b/data/flatpak/org.gnome.Contacts.Devel.json -index c7ea512..2a43680 100644 ---- a/data/flatpak/org.gnome.Contacts.Devel.json -+++ b/data/flatpak/org.gnome.Contacts.Devel.json -@@ -32,25 +32,17 @@ - ], - "cleanup": [ - "/include", -- "/lib/pkgconfig", "/share/pkgconfig", -+ "/lib/pkgconfig", -+ "/share/pkgconfig", - "/share/aclocal", -- "/man", "/share/man", -+ "/man", -+ "/share/man", - "/share/gtk-doc", - "/share/vala", -- "*.la", "*.a" -+ "*.la", -+ "*.a" - ], - "modules": [ -- { -- /* Needed by g-o-a */ -- "name": "librest", -- "sources": [ -- { -- "type": "git", -- "branch": "librest-0-7", -- "url": "https://gitlab.gnome.org/GNOME/librest.git" -- } -- ] -- }, - { - "name": "gnome-online-accounts", - "cleanup": [ "/bin", "/share/GConf" ], -@@ -60,6 +52,18 @@ - "type": "git", - "url": "https://gitlab.gnome.org/GNOME/gnome-online-accounts.git" - } -+ ], -+ "modules": [ -+ { -+ "name": "librest", -+ "sources": [ -+ { -+ "type": "git", -+ "branch": "librest-0-7", -+ "url": "https://gitlab.gnome.org/GNOME/librest.git" -+ } -+ ] -+ } - ] - }, - { -@@ -170,7 +174,10 @@ - "buildsystem": "meson", - "builddir": true, - "config-opts": [ -+ "-Dtests=false", -+ "-Dexamples=false", - "-Dglade_catalog=disabled" -+ - ], - "sources": [ - { diff --git a/debian/patches/0014-avatar-Use-unowned-references-when-casting.patch b/debian/patches/0014-avatar-Use-unowned-references-when-casting.patch deleted file mode 100644 index 9a26d0ba751feb5bafb47bbee58413c61f706826..0000000000000000000000000000000000000000 --- a/debian/patches/0014-avatar-Use-unowned-references-when-casting.patch +++ /dev/null @@ -1,52 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:31:44 +0100 -Subject: [PATCH 14/42] avatar: Use unowned references when casting - -And don't use `using Gtk;`, since some names of types can clash. ---- - src/contacts-avatar.vala | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala -index fb758df..cfb32cd 100644 ---- a/src/contacts-avatar.vala -+++ b/src/contacts-avatar.vala -@@ -15,7 +15,6 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - using Gee; - -@@ -23,10 +22,10 @@ using Gee; - * The Avatar of a Contact is responsible for showing an {@link Folks.Individual}'s - * avatar, or a fallback if it's not available. - */ --public class Contacts.Avatar : Bin { -+public class Contacts.Avatar : Gtk.Bin { - private Hdy.Avatar widget; - -- private Individual? individual = null; -+ private unowned Individual? individual = null; - - public Avatar (int size, Individual? individual = null) { - this.individual = individual; -@@ -103,7 +102,7 @@ public class Contacts.Avatar : Bin { - } - - private string look_up_alias_for_display_name (Persona? p) { -- var a = p as AliasDetails; -+ unowned var a = p as AliasDetails; - if (a != null && a.alias != null) - return a.alias; - -@@ -111,7 +110,7 @@ public class Contacts.Avatar : Bin { - } - - private string look_up_name_details_for_display_name (Persona? p) { -- var n = p as NameDetails; -+ unowned var n = p as NameDetails; - if (n != null) { - if (n.full_name != null && n.full_name != "") - return n.full_name; diff --git a/debian/patches/0015-contact-list-Fix-Valadoc-comment.patch b/debian/patches/0015-contact-list-Fix-Valadoc-comment.patch deleted file mode 100644 index 08cfb540bd89e461b9147db13f3af80803039b16..0000000000000000000000000000000000000000 --- a/debian/patches/0015-contact-list-Fix-Valadoc-comment.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:33:10 +0100 -Subject: [PATCH 15/42] contact-list: Fix Valadoc comment - -We don't have our own `Contact` class anymore, only `Folks.Individual` -is used now. ---- - src/contacts-contact-list.vala | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index b371644..c849896 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -20,7 +20,7 @@ using Folks; - using Gee; - - /** -- * The ContactList is the actual list of {@link Contact}s that the user sees on -+ * The ContactList is the actual list of {@link Individual}s that the user sees on - * the left. It is contained by the {@link ListPane}, which also provides other - * functionality, such as an action bar. - */ diff --git a/debian/patches/0016-contact-list-Don-t-omit-Gtk-namespace.patch b/debian/patches/0016-contact-list-Don-t-omit-Gtk-namespace.patch deleted file mode 100644 index b1014d47154f82226450acead4ce6b097abd2da5..0000000000000000000000000000000000000000 --- a/debian/patches/0016-contact-list-Don-t-omit-Gtk-namespace.patch +++ /dev/null @@ -1,141 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:36:20 +0100 -Subject: [PATCH 16/42] contact-list: Don't omit Gtk namespace - -It's happened already that some things clash with the Handy namespace, -so don't use `using Gtk;`. ---- - src/contacts-contact-list.vala | 45 +++++++++++++++++++++--------------------- - 1 file changed, 22 insertions(+), 23 deletions(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index c849896..c12beab 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -15,7 +15,6 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - using Gee; - -@@ -24,14 +23,14 @@ using Gee; - * the left. It is contained by the {@link ListPane}, which also provides other - * functionality, such as an action bar. - */ --public class Contacts.ContactList : ListBox { -- private class ContactDataRow : ListBoxRow { -+public class Contacts.ContactList : Gtk.ListBox { -+ private class ContactDataRow : Gtk.ListBoxRow { - private const int LIST_AVATAR_SIZE = 48; - - public Individual individual; -- private Label label; -+ private Gtk.Label label; - private Avatar avatar; -- public CheckButton selector_button; -+ public Gtk.CheckButton selector_button; - // Whether the selector should always be visible (or only on hover) - private bool checkbox_exposed = false; - -@@ -41,23 +40,23 @@ public class Contacts.ContactList : ListBox { - - get_style_context (). add_class ("contact-data-row"); - -- Grid grid = new Grid (); -+ Gtk.Grid grid = new Gtk.Grid (); - grid.margin = 3; - grid.margin_start = 9; - grid.set_column_spacing (10); - this.avatar = new Avatar (LIST_AVATAR_SIZE, this.individual); - -- this.label = new Label (individual.display_name); -+ this.label = new Gtk.Label (individual.display_name); - this.label.ellipsize = Pango.EllipsizeMode.END; -- this.label.valign = Align.CENTER; -- this.label.halign = Align.START; -+ this.label.valign = Gtk.Align.CENTER; -+ this.label.halign = Gtk.Align.START; - // Make sure it doesn't "twitch" when the checkbox becomes visible - this.label.xalign = 0; - -- this.selector_button = new CheckButton (); -+ this.selector_button = new Gtk.CheckButton (); - this.selector_button.visible = false; -- this.selector_button.valign = Align.CENTER; -- this.selector_button.halign = Align.END; -+ this.selector_button.valign = Gtk.Align.CENTER; -+ this.selector_button.halign = Gtk.Align.END; - this.selector_button.hexpand = true; - // Make sure it doesn't overlap with the scrollbar - this.selector_button.margin_end = 12; -@@ -79,15 +78,15 @@ public class Contacts.ContactList : ListBox { - public void expose_checkbox (bool expose) { - this.checkbox_exposed = expose; - -- var hovering = StateFlags.PRELIGHT in get_state_flags (); -+ var hovering = Gtk.StateFlags.PRELIGHT in get_state_flags (); - this.selector_button.visible = expose || hovering; - } - - // Normally, we would use the (enter/leave)_notify_event here, but since ListBoxRow - // doesn't have its own Gdk.Window, this won't work (at least in GTK+3). -- public override void state_flags_changed (StateFlags previous_state) { -- var hovering_now = StateFlags.PRELIGHT in get_state_flags (); -- var was_hovering = StateFlags.PRELIGHT in previous_state; -+ public override void state_flags_changed (Gtk.StateFlags previous_state) { -+ var hovering_now = Gtk.StateFlags.PRELIGHT in get_state_flags (); -+ var was_hovering = Gtk.StateFlags.PRELIGHT in previous_state; - - if (hovering_now != was_hovering) // If hovering changed - this.selector_button.visible = checkbox_exposed || hovering_now; -@@ -147,7 +146,7 @@ public class Contacts.ContactList : ListBox { - this.nr_contacts_marked = 0; - } - -- private int compare_rows (ListBoxRow row_a, ListBoxRow row_b) { -+ private int compare_rows (Gtk.ListBoxRow row_a, Gtk.ListBoxRow row_b) { - var a = ((ContactDataRow) row_a).individual; - var b = ((ContactDataRow) row_b).individual; - -@@ -170,7 +169,7 @@ public class Contacts.ContactList : ListBox { - return indiv.display_name; - } - -- private void update_header (ListBoxRow row, ListBoxRow? before) { -+ private void update_header (Gtk.ListBoxRow row, Gtk.ListBoxRow? before) { - var current = ((ContactDataRow) row).individual; - - if (before == null) { -@@ -189,9 +188,9 @@ public class Contacts.ContactList : ListBox { - } - } - -- private Label create_header_label (string text) { -- var label = new Label (text); -- label.halign = Align.START; -+ private Gtk.Label create_header_label (string text) { -+ var label = new Gtk.Label (text); -+ label.halign = Gtk.Align.START; - label.margin = 3; - label.margin_start = 6; - label.margin_top = 6; -@@ -237,7 +236,7 @@ public class Contacts.ContactList : ListBox { - row.destroy (); - } - -- public override void row_selected (ListBoxRow? row) { -+ public override void row_selected (Gtk.ListBoxRow? row) { - var data = (ContactDataRow?) row as ContactDataRow; - var individual = data != null ? data.individual : null; - selection_changed (individual); -@@ -247,7 +246,7 @@ public class Contacts.ContactList : ListBox { - #endif - } - -- private bool filter_row (ListBoxRow row) { -+ private bool filter_row (Gtk.ListBoxRow row) { - var individual = ((ContactDataRow) row).individual; - return this.filter_query.is_match (individual) > 0; - } diff --git a/debian/patches/0017-Reduce-the-amount-of-unnecessary-refcounting.patch b/debian/patches/0017-Reduce-the-amount-of-unnecessary-refcounting.patch deleted file mode 100644 index 3d82dffa383b68e8136d0f147711bbe3cccb1d96..0000000000000000000000000000000000000000 --- a/debian/patches/0017-Reduce-the-amount-of-unnecessary-refcounting.patch +++ /dev/null @@ -1,275 +0,0 @@ -From: Niels De Graef -Date: Sat, 7 Nov 2020 12:47:58 +0100 -Subject: [PATCH 17/42] Reduce the amount of unnecessary refcounting - -In a lot of places, we're accidentally taking a strong reference to a -variable, which means that internally, we'll be using a lot of -`g_object_ref()` and `g_object_unref()` for no good reason. Especially -on some hot paths (and large address books), this can make a tiny bit of -a difference in terms of performance. ---- - src/contacts-contact-list.vala | 30 +++++++++++++++--------------- - src/contacts-store.vala | 2 +- - src/contacts-type-descriptor.vala | 2 +- - src/contacts-typeset.vala | 2 +- - src/contacts-utils.vala | 16 ++++++++-------- - src/contacts-window.vala | 14 +++++++------- - 6 files changed, 33 insertions(+), 33 deletions(-) - -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index c12beab..96f49f6 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -27,7 +27,7 @@ public class Contacts.ContactList : Gtk.ListBox { - private class ContactDataRow : Gtk.ListBoxRow { - private const int LIST_AVATAR_SIZE = 48; - -- public Individual individual; -+ public unowned Individual individual; - private Gtk.Label label; - private Avatar avatar; - public Gtk.CheckButton selector_button; -@@ -147,16 +147,16 @@ public class Contacts.ContactList : Gtk.ListBox { - } - - private int compare_rows (Gtk.ListBoxRow row_a, Gtk.ListBoxRow row_b) { -- var a = ((ContactDataRow) row_a).individual; -- var b = ((ContactDataRow) row_b).individual; -+ unowned var a = ((ContactDataRow) row_a).individual; -+ unowned var b = ((ContactDataRow) row_b).individual; - - // Always prefer favourites over non-favourites. - if (a.is_favourite != b.is_favourite) - return a.is_favourite? -1 : 1; - - // Both are (non-)favourites: sort by either first name or surname (user preference) -- unowned string? a_name = this.sort_on_surname? try_get_surname(a) : a.display_name; -- unowned string? b_name = this.sort_on_surname? try_get_surname(b) : b.display_name; -+ unowned var a_name = this.sort_on_surname? try_get_surname (a) : a.display_name; -+ unowned var b_name = this.sort_on_surname? try_get_surname (b) : b.display_name; - - return a_name.collate (b_name); - } -@@ -170,7 +170,7 @@ public class Contacts.ContactList : Gtk.ListBox { - } - - private void update_header (Gtk.ListBoxRow row, Gtk.ListBoxRow? before) { -- var current = ((ContactDataRow) row).individual; -+ unowned var current = ((ContactDataRow) row).individual; - - if (before == null) { - if (current.is_favourite) -@@ -180,7 +180,7 @@ public class Contacts.ContactList : Gtk.ListBox { - return; - } - -- var previous = ((ContactDataRow) before).individual; -+ unowned var previous = ((ContactDataRow) before).individual; - if (!current.is_favourite && previous.is_favourite) { - row.set_header (create_header_label (_("All Contacts"))); - } else { -@@ -268,9 +268,9 @@ public class Contacts.ContactList : Gtk.ListBox { - } - - -- private ContactDataRow? find_row_for_contact (Individual individual) { -- foreach (var widget in get_children ()) { -- var row = ((ContactDataRow) widget); -+ private unowned ContactDataRow? find_row_for_contact (Individual individual) { -+ foreach (weak Gtk.Widget widget in get_children ()) { -+ unowned var row = ((ContactDataRow) widget); - if (row.individual == individual) - return row; - } -@@ -280,8 +280,8 @@ public class Contacts.ContactList : Gtk.ListBox { - - public LinkedList get_marked_contacts () { - var cs = new LinkedList (); -- foreach (var widget in get_children ()) { -- var row = widget as ContactDataRow; -+ foreach (weak Gtk.Widget widget in get_children ()) { -+ unowned var row = widget as ContactDataRow; - if (row.selector_button.active) - cs.add (row.individual); - } -@@ -290,8 +290,8 @@ public class Contacts.ContactList : Gtk.ListBox { - - public LinkedList get_marked_contacts_and_hide () { - var cs = new LinkedList (); -- foreach (var widget in get_children ()) { -- var row = widget as ContactDataRow; -+ foreach (weak Gtk.Widget widget in get_children ()) { -+ unowned var row = widget as ContactDataRow; - if (row.selector_button.active) { - row.visible = false; - cs.add (row.individual); -@@ -305,7 +305,7 @@ public class Contacts.ContactList : Gtk.ListBox { - base.button_press_event (event); - - if (event.button == Gdk.BUTTON_SECONDARY) { -- var row = (ContactDataRow) get_row_at_y ((int) Math.round (event.y)); -+ unowned var row = (ContactDataRow) get_row_at_y ((int) Math.round (event.y)); - if (row != null) { - select_row (row); - row.selector_button.active = this.state != UiState.SELECTING || !row.selector_button.active; -diff --git a/src/contacts-store.vala b/src/contacts-store.vala -index daadd19..a9c6a57 100644 ---- a/src/contacts-store.vala -+++ b/src/contacts-store.vala -@@ -49,7 +49,7 @@ public class Contacts.Store : GLib.Object { - FileUtils.get_contents (path, out contents); - - var rows = contents.split ("\n"); -- foreach (var r in rows) { -+ foreach (unowned string r in rows) { - var ids = r.split (" "); - if (ids.length == 2) { - dont_suggest_link.set (ids[0], ids[1]); -diff --git a/src/contacts-type-descriptor.vala b/src/contacts-type-descriptor.vala -index efc96ce..90f0489 100644 ---- a/src/contacts-type-descriptor.vala -+++ b/src/contacts-type-descriptor.vala -@@ -31,7 +31,7 @@ public class Contacts.TypeDescriptor : Object { - OTHER, - CUSTOM; - -- public string to_string () { -+ public unowned string to_string () { - switch (this) { - case VCARD: - return "vcard"; -diff --git a/src/contacts-typeset.vala b/src/contacts-typeset.vala -index f771436..63b4518 100644 ---- a/src/contacts-typeset.vala -+++ b/src/contacts-typeset.vala -@@ -82,7 +82,7 @@ public class Contacts.TypeSet : Object { - /** - * Returns the display name for the type of the given AbstractFieldDetails. - */ -- public string format_type (AbstractFieldDetails detail) { -+ public unowned string format_type (AbstractFieldDetails detail) { - var d = lookup_descriptor_for_field_details (detail); - return d.display_name; - } -diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala -index 8f3b8c1..1540b0c 100644 ---- a/src/contacts-utils.vala -+++ b/src/contacts-utils.vala -@@ -334,7 +334,7 @@ namespace Contacts.Utils { - public Tpf.Persona? find_im_persona (Individual individual, string protocol, string im_address) { - var iid = protocol + ":" + im_address; - foreach (var p in individual.personas) { -- var tp = p as Tpf.Persona; -+ unowned var tp = p as Tpf.Persona; - if (tp != null && tp.iid == iid) { - return tp; - } -@@ -355,8 +355,8 @@ namespace Contacts.Utils { - - public Gee.List get_personas_for_display (Individual individual) { - CompareDataFunc compare_persona_by_store = (a, b) => { -- var store_a = a.store; -- var store_b = b.store; -+ unowned var store_a = a.store; -+ unowned var store_b = b.store; - - // In the same store, sort Google 'other' contacts last - if (store_a == store_b) { -@@ -470,7 +470,7 @@ namespace Contacts.Utils { - if (!persona_is_google (persona)) - return false; - -- var p = persona as Edsf.Persona; -+ unowned var p = persona as Edsf.Persona; - return p != null && !p.in_google_personal_group; - } - -@@ -478,7 +478,7 @@ namespace Contacts.Utils { - if (!persona_is_google_other (persona)) - return false; - -- var u = persona as UrlDetails; -+ unowned var u = persona as UrlDetails; - if (u != null && u.urls.size == 1) { - foreach (var url in u.urls) { - if (/https?:\/\/www.google.com\/profiles\/[0-9]+$/.match(url.value)) -@@ -489,7 +489,7 @@ namespace Contacts.Utils { - } - - public string format_persona_store_name_for_contact (Persona persona) { -- var store = persona.store; -+ unowned var store = persona.store; - if (store.type_id == "eds") { - if (persona_is_google_profile (persona)) - return _("Google Circles"); -@@ -502,7 +502,7 @@ namespace Contacts.Utils { - } - #if HAVE_TELEPATHY - if (store.type_id == "telepathy") { -- var account = (store as Tpf.PersonaStore).account; -+ unowned var account = (store as Tpf.PersonaStore).account; - return Contacts.ImService.get_display_name (account.service); - } - #endif -@@ -595,7 +595,7 @@ namespace Contacts.Utils { - public void fetch_contact_info (Individual individual) { - /* TODO: Ideally Folks should have API for this (#675131) */ - foreach (var p in individual.personas) { -- var tp = p as Tpf.Persona; -+ unowned var tp = p as Tpf.Persona; - if (tp != null) { - tp.contact.request_contact_info_async.begin (null); - } -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 759832b..10ee929 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -126,7 +126,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - } - - private void restore_window_size_and_position_from_settings () { -- var screen = get_screen(); -+ unowned var screen = get_screen (); - if (screen != null && this.window_width <= screen.get_width () && this.window_height <= screen.get_height ()) { - set_default_size (this.window_width, this.window_height); - } -@@ -150,7 +150,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - public override void size_allocate (Gtk.Allocation allocation) { - base.size_allocate (allocation); - -- var screen = get_screen (); -+ unowned var screen = get_screen (); - if (screen != null && !this.window_maximized) { - // Get the size via ::get_size instead of the allocation - // so that the window isn't ever-expanding. -@@ -249,9 +249,9 @@ public class Contacts.Window : Hdy.ApplicationWindow { - } - - private void set_selection_mode (bool selection_mode) { -- var left_ctx = this.left_header.get_style_context (); -- var separator_ctx = this.header_separator.get_style_context (); -- var right_ctx = this.right_header.get_style_context (); -+ unowned var left_ctx = this.left_header.get_style_context (); -+ unowned var separator_ctx = this.header_separator.get_style_context (); -+ unowned var right_ctx = this.right_header.get_style_context (); - if (selection_mode) { - left_ctx.add_class ("selection-mode"); - separator_ctx.add_class ("selection-mode"); -@@ -278,7 +278,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - - this.state = UiState.UPDATING; - -- var name = this.contact_pane.individual.display_name; -+ unowned var name = this.contact_pane.individual.display_name; - this.right_header.title = _("Editing %s").printf (name); - this.contact_pane.edit_contact (); - } -@@ -431,7 +431,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - this.cancel_button.clicked.connect (() => stop_editing (true)); - - this.contact_pane.notify["individual"].connect (() => { -- var individual = this.contact_pane.individual; -+ unowned var individual = this.contact_pane.individual; - if (individual == null) - return; - this.unlink_button.set_visible (individual.personas.size > 1); diff --git a/debian/patches/0018-data-List-compatible-form-factors.patch b/debian/patches/0018-data-List-compatible-form-factors.patch deleted file mode 100644 index fba2b4e072e8f0ab7837d75c2843271a2f944573..0000000000000000000000000000000000000000 --- a/debian/patches/0018-data-List-compatible-form-factors.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: Adrien Plazas -Date: Fri, 6 Nov 2020 08:20:27 +0100 -Subject: [PATCH 18/42] data: List compatible form-factors - -This will allow the app to be available in Phosh and PureOS Store. ---- - data/org.gnome.Contacts.appdata.xml.in.in | 4 ++++ - data/org.gnome.Contacts.desktop.in.in | 2 ++ - 2 files changed, 6 insertions(+) - -diff --git a/data/org.gnome.Contacts.appdata.xml.in.in b/data/org.gnome.Contacts.appdata.xml.in.in -index ed075b2..de07d04 100644 ---- a/data/org.gnome.Contacts.appdata.xml.in.in -+++ b/data/org.gnome.Contacts.appdata.xml.in.in -@@ -529,4 +529,8 @@ - none - none - -+ -+ workstation -+ mobile -+ - -diff --git a/data/org.gnome.Contacts.desktop.in.in b/data/org.gnome.Contacts.desktop.in.in -index 81238eb..db7c13a 100644 ---- a/data/org.gnome.Contacts.desktop.in.in -+++ b/data/org.gnome.Contacts.desktop.in.in -@@ -12,3 +12,5 @@ StartupNotify=true - Categories=GNOME;GTK;Office;ContactManagement; - OnlyShowIn=GNOME;Unity; - DBusActivatable=true -+# Translators: Do NOT translate or transliterate this text (these are enum types)! -+X-Purism-FormFactor=Workstation;Mobile; diff --git a/debian/patches/0019-window-Add-null-check-for-list_pane-on-startup.patch b/debian/patches/0019-window-Add-null-check-for-list_pane-on-startup.patch deleted file mode 100644 index f395b7b0d9b874e734784e3801e02bb5cb747564..0000000000000000000000000000000000000000 --- a/debian/patches/0019-window-Add-null-check-for-list_pane-on-startup.patch +++ /dev/null @@ -1,45 +0,0 @@ -From: Niels De Graef -Date: Sun, 15 Nov 2020 15:14:29 +0100 -Subject: [PATCH 19/42] window: Add null-check for list_pane on startup - -To implement search-as-you-type, we make sure to focus the search field -if that wasn't the case already. However, if a user types something wile -Contacts is still starting up, the UI hasn't finished by that time -already, so that will lead us to dereferencing a NULL-pointer. - -To fix this nice and easy, let's to do a quick NULL-check before we try -to focus anything. - -Fixes: https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/155 ---- - src/contacts-window.vala | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 10ee929..fc3f44e 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -448,7 +448,10 @@ public class Contacts.Window : Hdy.ApplicationWindow { - } else if (((event.keyval == Gdk.Key.s) || - (event.keyval == Gdk.Key.f)) && - ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0)) { -- Utils.grab_entry_focus_no_select (list_pane.filter_entry); -+ // Explicitly check if this.list_pane is already initialized, -+ // or we might crash at startup -+ if (this.list_pane != null && this.list_pane.filter_entry != null) -+ Utils.grab_entry_focus_no_select (this.list_pane.filter_entry); - } else if (event.length >= 1 && - Gdk.keyval_to_unicode (event.keyval) != 0 && - (event.state & Gdk.ModifierType.CONTROL_MASK) == 0 && -@@ -456,7 +459,10 @@ public class Contacts.Window : Hdy.ApplicationWindow { - (event.keyval != Gdk.Key.Escape) && - (event.keyval != Gdk.Key.Tab) && - (event.keyval != Gdk.Key.BackSpace) ) { -- Utils.grab_entry_focus_no_select (list_pane.filter_entry); -+ // Explicitly check if this.list_pane is already initialized, -+ // or we might crash at startup -+ if (this.list_pane != null && this.list_pane.filter_entry != null) -+ Utils.grab_entry_focus_no_select (this.list_pane.filter_entry); - propagate_key_event (event); - } - diff --git a/debian/patches/0020-Add-GitLab-issue-templates.patch b/debian/patches/0020-Add-GitLab-issue-templates.patch deleted file mode 100644 index ba03b254abddea10d90fdbcfeee2af06f9c44a04..0000000000000000000000000000000000000000 --- a/debian/patches/0020-Add-GitLab-issue-templates.patch +++ /dev/null @@ -1,83 +0,0 @@ -From: Niels De Graef -Date: Sun, 22 Nov 2020 18:09:55 +0100 -Subject: [PATCH 20/42] Add GitLab issue templates - ---- - .gitlab/issue_templates/Bug.md | 38 ++++++++++++++++++++++++++++++++++++++ - .gitlab/issue_templates/Feature.md | 22 ++++++++++++++++++++++ - 2 files changed, 60 insertions(+) - create mode 100644 .gitlab/issue_templates/Bug.md - create mode 100644 .gitlab/issue_templates/Feature.md - -diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md -new file mode 100644 -index 0000000..8b01231 ---- /dev/null -+++ b/.gitlab/issue_templates/Bug.md -@@ -0,0 +1,38 @@ -+ -+ -+# Affected version -+- GNOME Contacts version: -+- Application provider: distribution / built from git / flatpak -+- Related info: -+ -+ -+# Steps to reproduce -+ -+1. -+2. -+3. -+ -+# Current behavior -+ -+ -+ -+# Expected behavior -+ -+ -+ -+# Additional information -+ -+ -+ -+ -+/label ~"1. Bug" -diff --git a/.gitlab/issue_templates/Feature.md b/.gitlab/issue_templates/Feature.md -new file mode 100644 -index 0000000..2fa6f03 ---- /dev/null -+++ b/.gitlab/issue_templates/Feature.md -@@ -0,0 +1,22 @@ -+### Use cases -+ -+ -+ -+### Desired behavior -+ -+ -+ -+### Benefits of the solution -+ -+ -+ -+### Possible drawbacks -+ -+ -+ -+/label ~"1. Feature" diff --git a/debian/patches/0021-window-Add-mnemonics-when-creating-a-new-contact.patch b/debian/patches/0021-window-Add-mnemonics-when-creating-a-new-contact.patch deleted file mode 100644 index 9825fe4a4e894143890467ecd6c22fb7ba209536..0000000000000000000000000000000000000000 --- a/debian/patches/0021-window-Add-mnemonics-when-creating-a-new-contact.patch +++ /dev/null @@ -1,38 +0,0 @@ -From: Niels De Graef -Date: Sun, 29 Nov 2020 17:30:59 +0100 -Subject: [PATCH 21/42] window: Add mnemonics when creating a new contact - -Fixes https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/129 ---- - data/ui/contacts-window.ui | 3 ++- - src/contacts-window.vala | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/data/ui/contacts-window.ui b/data/ui/contacts-window.ui -index aa858e8..137fe68 100644 ---- a/data/ui/contacts-window.ui -+++ b/data/ui/contacts-window.ui -@@ -276,7 +276,8 @@ - False - True - False -- Cancel -+ _Cancel -+ True - 70 - center - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index fc3f44e..274baef 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -234,7 +234,8 @@ public class Contacts.Window : Hdy.ApplicationWindow { - = this.done_button.visible - = this.state.editing (); - if (this.state.editing ()) { -- this.done_button.label = (this.state == UiState.CREATING)? _("Add") : _("Done"); -+ this.done_button.use_underline = true; -+ this.done_button.label = (this.state == UiState.CREATING)? _("_Add") : _("Done"); - // Cast is required because Gtk.Button.set_focus_on_click is deprecated and - // we have to use Gtk.Widget.set_focus_on_click instead - ((Gtk.Widget) this.done_button).set_focus_on_click (true); diff --git a/debian/patches/0022-Don-t-use-do-as-identifier.patch b/debian/patches/0022-Don-t-use-do-as-identifier.patch deleted file mode 100644 index becaf01dd00e2a76f362e34ef92fb17d0335da60..0000000000000000000000000000000000000000 --- a/debian/patches/0022-Don-t-use-do-as-identifier.patch +++ /dev/null @@ -1,68 +0,0 @@ -From: Niels De Graef -Date: Sun, 29 Nov 2020 18:12:14 +0100 -Subject: [PATCH 22/42] Don't use "do" as identifier - -`do` is a keyword, so it confuses some tooling. ---- - src/contacts-contact-pane.vala | 2 +- - src/contacts-linking.vala | 4 ++-- - src/contacts-window.vala | 4 ++-- - 3 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/contacts-contact-pane.vala b/src/contacts-contact-pane.vala -index 44db168..7b3a6e6 100644 ---- a/src/contacts-contact-pane.vala -+++ b/src/contacts-contact-pane.vala -@@ -78,7 +78,7 @@ public class Contacts.ContactPane : ScrolledWindow { - var to_link = new LinkedList (); - to_link.add (this.individual); - to_link.add (i); -- operation.do.begin (to_link); -+ operation.execute.begin (to_link); - this.contacts_linked (null, linked_contact, operation); - remove_suggestion_grid (); - }); -diff --git a/src/contacts-linking.vala b/src/contacts-linking.vala -index 4917a99..4b8f7fc 100644 ---- a/src/contacts-linking.vala -+++ b/src/contacts-linking.vala -@@ -30,7 +30,7 @@ namespace Contacts { - } - - // Link individuals -- public async void do (LinkedList individuals) { -+ public async void execute (LinkedList individuals) { - var personas_to_link = new HashSet (); - foreach (var i in individuals) { - var saved_personas = new HashSet (); -@@ -81,7 +81,7 @@ namespace Contacts { - } - - /* Remove a personas from individual */ -- public async void do (Individual main) { -+ public async void execute (Individual main) { - foreach (var persona in main.personas) - personas.add (persona); - -diff --git a/src/contacts-window.vala b/src/contacts-window.vala -index 274baef..2386eea 100644 ---- a/src/contacts-window.vala -+++ b/src/contacts-window.vala -@@ -305,7 +305,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - this.state = UiState.NORMAL; - - var operation = new UnLinkOperation (this.store); -- operation.do.begin (individual); -+ operation.execute.begin (individual); - - var b = new Gtk.Button.with_mnemonic (_("_Undo")); - var notification = new InAppNotification (_("Contacts unlinked"), b); -@@ -491,7 +491,7 @@ public class Contacts.Window : Hdy.ApplicationWindow { - this.state = UiState.NORMAL; - - var operation = new LinkOperation (this.store); -- operation.do.begin (contact_list); -+ operation.execute.begin (contact_list); - - string msg = ngettext ("%d contacts linked", - "%d contacts linked", diff --git a/debian/patches/0023-Update-Ukrainian-translation.patch b/debian/patches/0023-Update-Ukrainian-translation.patch deleted file mode 100644 index e4890809e7979604c073923ce60e61fee31babab..0000000000000000000000000000000000000000 --- a/debian/patches/0023-Update-Ukrainian-translation.patch +++ /dev/null @@ -1,370 +0,0 @@ -From: Yuri Chornoivan -Date: Sun, 29 Nov 2020 18:15:27 +0000 -Subject: [PATCH 23/42] Update Ukrainian translation - ---- - po/uk.po | 129 +++++++++++++++++++++++++++++++-------------------------------- - 1 file changed, 64 insertions(+), 65 deletions(-) - -diff --git a/po/uk.po b/po/uk.po -index dbc3710..5aba367 100644 ---- a/po/uk.po -+++ b/po/uk.po -@@ -8,8 +8,8 @@ msgid "" - msgstr "" - "Project-Id-Version: 1.0\n" - "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-contacts/issues\n" --"POT-Creation-Date: 2020-06-05 13:39+0000\n" --"PO-Revision-Date: 2020-06-05 22:14+0300\n" -+"POT-Creation-Date: 2020-11-29 16:45+0000\n" -+"PO-Revision-Date: 2020-11-29 20:14+0200\n" - "Last-Translator: Yuri Chornoivan \n" - "Language-Team: Ukrainian \n" - "Language: uk\n" -@@ -18,12 +18,12 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" - "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" --"X-Generator: Lokalize 20.07.70\n" -+"X-Generator: Lokalize 20.11.70\n" - "X-Project-Style: gnome\n" - - #: data/org.gnome.Contacts.appdata.xml.in.in:6 - #: data/org.gnome.Contacts.desktop.in.in:3 data/ui/contacts-window.ui:144 --#: data/ui/contacts-window.ui:162 src/contacts-window.vala:240 -+#: data/ui/contacts-window.ui:163 src/contacts-window.vala:230 - msgid "Contacts" - msgstr "Контакти" - -@@ -52,7 +52,7 @@ msgstr "" - "Контакти також інтегровані з мережевими адресними книгами і автоматично " - "сполучать контакти з різних джерел." - --#: data/org.gnome.Contacts.appdata.xml.in.in:433 -+#: data/org.gnome.Contacts.appdata.xml.in.in:482 - msgid "The GNOME Project" - msgstr "Проєкт GNOME" - -@@ -104,13 +104,12 @@ msgstr "Вибрати фото…" - msgid "Select a File…" - msgstr "Вибрати адресу пошти" - --#: data/ui/contacts-contact-pane.ui:47 -+#: data/ui/contacts-contact-pane.ui:45 - msgid "Select a contact" - msgstr "Виберіть контакт" - --#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:214 --#: data/ui/contacts-window.ui:278 src/contacts-addressbook-dialog.vala:32 --#: src/contacts-editor-property.vala:86 -+#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:215 -+#: src/contacts-addressbook-dialog.vala:32 src/contacts-editor-property.vala:86 - msgid "Cancel" - msgstr "Скасувати" - -@@ -118,8 +117,8 @@ msgstr "Скасувати" - msgid "Take Another…" - msgstr "Виберіть інший…" - --#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:335 --#: src/contacts-window.vala:247 -+#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:337 -+#: src/contacts-window.vala:238 - msgid "Done" - msgstr "Завершено" - -@@ -152,31 +151,31 @@ msgstr "Посилання" - msgid "Remove" - msgstr "Вилучити" - --#: data/ui/contacts-setup-window.ui:12 -+#: data/ui/contacts-setup-window.ui:11 - msgid "Contacts Setup" - msgstr "Налаштування контактів" - --#: data/ui/contacts-setup-window.ui:21 -+#: data/ui/contacts-setup-window.ui:20 - msgid "_Quit" - msgstr "Ви_йти" - --#: data/ui/contacts-setup-window.ui:26 -+#: data/ui/contacts-setup-window.ui:25 - msgid "Cancel setup and quit" - msgstr "Скасувати налаштування" - --#: data/ui/contacts-setup-window.ui:40 -+#: data/ui/contacts-setup-window.ui:39 - msgid "_Done" - msgstr "Завершено" - --#: data/ui/contacts-setup-window.ui:44 -+#: data/ui/contacts-setup-window.ui:43 - msgid "Setup complete" - msgstr "Налаштування завершено" - --#: data/ui/contacts-setup-window.ui:85 -+#: data/ui/contacts-setup-window.ui:82 - msgid "Welcome" - msgstr "Ласкаво просимо" - --#: data/ui/contacts-setup-window.ui:97 -+#: data/ui/contacts-setup-window.ui:94 - msgid "" - "Please select your main address book: this is where new contacts will be " - "added. If you keep your contacts in an online account, you can add them " -@@ -234,27 +233,31 @@ msgstr "Розлучити" - msgid "Delete" - msgstr "Вилучити" - --#: data/ui/contacts-window.ui:170 -+#: data/ui/contacts-window.ui:171 - msgid "Create new contact" - msgstr "Створити контакт" - --#: data/ui/contacts-window.ui:174 -+#: data/ui/contacts-window.ui:175 - msgid "Add contact" - msgstr "Додати контакт" - --#: data/ui/contacts-window.ui:215 -+#: data/ui/contacts-window.ui:216 - msgid "Cancel selection" - msgstr "Скасувати налаштування" - --#: data/ui/contacts-window.ui:259 -+#: data/ui/contacts-window.ui:260 - msgid "Back" - msgstr "Назад" - --#: data/ui/contacts-window.ui:397 -+#: data/ui/contacts-window.ui:279 src/contacts-avatar-selector.vala:197 -+msgid "_Cancel" -+msgstr "_Скасувати" -+ -+#: data/ui/contacts-window.ui:396 - msgid "Loading" - msgstr "Завантаження" - --#: src/contacts-accounts-list.vala:125 src/contacts-addressbook-list.vala:105 -+#: src/contacts-accounts-list.vala:126 src/contacts-addressbook-list.vala:105 - #: src/contacts-esd-setup.vala:149 - msgid "Local Address Book" - msgstr "Локальна адресна книга" -@@ -267,7 +270,7 @@ msgstr "Змінити адресну книгу" - msgid "Change" - msgstr "Змінити" - --#: src/contacts-addressbook-dialog.vala:61 -+#: src/contacts-addressbook-dialog.vala:60 - msgid "" - "New contacts will be added to the selected address book.\n" - "You are able to view and edit contacts from other address books." -@@ -291,35 +294,32 @@ msgstr "Показати контакт з цим окремим ідентиф - msgid "Show the current version of Contacts" - msgstr "Показати поточну версію Контактів" - --#: src/contacts-app.vala:102 -+#: src/contacts-app.vala:112 - #, c-format - msgid "No contact with id %s found" - msgstr "Не знайдено жодного контакту з ідентифікатором %s" - --#: src/contacts-app.vala:103 src/contacts-app.vala:185 -+#: src/contacts-app.vala:113 src/contacts-app.vala:193 - msgid "Contact not found" - msgstr "Не знайдено контакт" - --#: src/contacts-app.vala:164 -+#: src/contacts-app.vala:172 - msgid "translator-credits" - msgstr "Daniel Korostil " - --#: src/contacts-app.vala:165 -+#: src/contacts-app.vala:173 - msgid "GNOME Contacts" - msgstr "Контакти GNOME" - --#: src/contacts-app.vala:166 -+#: src/contacts-app.vala:174 - msgid "About GNOME Contacts" - msgstr "Про контакти GNOME" - --#: src/contacts-app.vala:167 -+#: src/contacts-app.vala:175 - msgid "Contact Management Application" - msgstr "Програма для керування контактами" - --#: src/contacts-app.vala:168 --#| msgid "" --#| "© 2011 Red Hat, Inc.\n" --#| "© 2011-2018 The Contacts Developers" -+#: src/contacts-app.vala:176 - msgid "" - "© 2011 Red Hat, Inc.\n" - "© 2011-2020 The Contacts Developers" -@@ -327,28 +327,24 @@ msgstr "" - "© Red Hat, Inc., 2011\n" - "© Розробники «Контактів», 2011-2020" - --#: src/contacts-app.vala:184 -+#: src/contacts-app.vala:192 - #, c-format - msgid "No contact with email address %s found" - msgstr "Не знайдено жодного контакту з електронною адресою %s" - - #: src/contacts-avatar-selector.vala:109 src/contacts-avatar-selector.vala:115 --#: src/contacts-avatar-selector.vala:235 -+#: src/contacts-avatar-selector.vala:234 - msgid "Failed to set avatar." - msgstr "Не вдалося встановити фотографію" - --#: src/contacts-avatar-selector.vala:195 -+#: src/contacts-avatar-selector.vala:194 - msgid "Browse for more pictures" - msgstr "Переглянути інші фото" - --#: src/contacts-avatar-selector.vala:198 -+#: src/contacts-avatar-selector.vala:197 - msgid "_Open" - msgstr "_Відкрити" - --#: src/contacts-avatar-selector.vala:198 --msgid "_Cancel" --msgstr "_Скасувати" -- - #: src/contacts-contact-editor.vala:50 - msgid "Change avatar" - msgstr "Змінити аватар" -@@ -357,11 +353,11 @@ msgstr "Змінити аватар" - msgid "Add name" - msgstr "Додати ім'я" - --#: src/contacts-contact-list.vala:178 -+#: src/contacts-contact-list.vala:177 - msgid "Favorites" - msgstr "Улюблені" - --#: src/contacts-contact-list.vala:180 src/contacts-contact-list.vala:186 -+#: src/contacts-contact-list.vala:179 src/contacts-contact-list.vala:185 - msgid "All Contacts" - msgstr "Усі контакти" - -@@ -378,19 +374,19 @@ msgstr "Неможливо створити нові контакти: %s" - msgid "Unable to find newly created contact" - msgstr "Неможливо знайти новостворений контакт" - --#: src/contacts-contact-sheet.vala:278 src/contacts-editor-property.vala:488 -+#: src/contacts-contact-sheet.vala:280 src/contacts-editor-property.vala:488 - msgid "Website" - msgstr "Сайт" - --#: src/contacts-contact-sheet.vala:295 src/contacts-editor-property.vala:498 -+#: src/contacts-contact-sheet.vala:297 src/contacts-editor-property.vala:498 - msgid "Nickname" - msgstr "Прізвисько" - --#: src/contacts-contact-sheet.vala:301 src/contacts-editor-property.vala:563 -+#: src/contacts-contact-sheet.vala:303 src/contacts-editor-property.vala:563 - msgid "Birthday" - msgstr "День народження" - --#: src/contacts-contact-sheet.vala:308 src/contacts-editor-property.vala:526 -+#: src/contacts-contact-sheet.vala:310 src/contacts-editor-property.vala:526 - msgid "Note" - msgstr "Примітка" - -@@ -667,7 +663,7 @@ msgstr "TTY" - msgid "Google Circles" - msgstr "Кола Google" - --#: src/contacts-window.vala:210 -+#: src/contacts-window.vala:202 - #, c-format - msgid "%d Selected" - msgid_plural "%d Selected" -@@ -676,37 +672,37 @@ msgstr[1] "%d вибрано" - msgstr[2] "%d вибрано" - msgstr[3] "%d вибрано" - --#: src/contacts-window.vala:247 --msgid "Add" --msgstr "Додати" -+#: src/contacts-window.vala:238 -+msgid "_Add" -+msgstr "_Додати" - --#: src/contacts-window.vala:277 -+#: src/contacts-window.vala:283 - #, c-format - msgid "Editing %s" - msgstr "Редагування %s" - --#: src/contacts-window.vala:304 src/contacts-window.vala:486 --#: src/contacts-window.vala:510 src/contacts-window.vala:556 -+#: src/contacts-window.vala:310 src/contacts-window.vala:500 -+#: src/contacts-window.vala:524 src/contacts-window.vala:570 - msgid "_Undo" - msgstr "_Повернути" - --#: src/contacts-window.vala:305 -+#: src/contacts-window.vala:311 - msgid "Contacts unlinked" - msgstr "Контакти роз'єднано" - --#: src/contacts-window.vala:364 -+#: src/contacts-window.vala:370 - msgid "Unmark as favorite" - msgstr "Вилучити з улюблених" - --#: src/contacts-window.vala:365 -+#: src/contacts-window.vala:371 - msgid "Mark as favorite" - msgstr "Додати до улюблених" - --#: src/contacts-window.vala:379 -+#: src/contacts-window.vala:385 - msgid "New Contact" - msgstr "Створити контакт" - --#: src/contacts-window.vala:482 -+#: src/contacts-window.vala:496 - #, c-format - msgid "%d contacts linked" - msgid_plural "%d contacts linked" -@@ -715,12 +711,12 @@ msgstr[1] "%d контакти сполучено" - msgstr[2] "%d контактів сполучено" - msgstr[3] "%d контакт сполучено" - --#: src/contacts-window.vala:505 -+#: src/contacts-window.vala:519 - #, c-format - msgid "Deleted contact %s" - msgstr "Вилучений контакт %s" - --#: src/contacts-window.vala:507 -+#: src/contacts-window.vala:521 - #, c-format - msgid "%d contact deleted" - msgid_plural "%d contacts deleted" -@@ -729,12 +725,12 @@ msgstr[1] "%d контакти вилучено" - msgstr[2] "%d контактів вилучено" - msgstr[3] "%d контакт вилучено" - --#: src/contacts-window.vala:552 -+#: src/contacts-window.vala:566 - #, c-format - msgid "%s linked to %s" - msgstr "%s сполучений з %s" - --#: src/contacts-window.vala:554 -+#: src/contacts-window.vala:568 - #, c-format - msgid "%s linked to the contact" - msgstr "%s сполучений з контактом" -@@ -790,3 +786,6 @@ msgstr "Вікно розгорнуте?" - #: src/org.gnome.Contacts.gschema.xml:33 - msgid "Stores if the window is currently maximized." - msgstr "Запам'ятовує, чи вікно розгорнуто." -+ -+#~ msgid "Add" -+#~ msgstr "Додати" diff --git a/debian/patches/0024-Update-Swedish-translation.patch b/debian/patches/0024-Update-Swedish-translation.patch deleted file mode 100644 index 0d1aac9d168aa92d34f9d46b8cbc3d1faeda110b..0000000000000000000000000000000000000000 --- a/debian/patches/0024-Update-Swedish-translation.patch +++ /dev/null @@ -1,370 +0,0 @@ -From: Anders Jonsson -Date: Mon, 30 Nov 2020 00:31:40 +0000 -Subject: [PATCH 24/42] Update Swedish translation - ---- - po/sv.po | 126 ++++++++++++++++++++++++++++++++------------------------------- - 1 file changed, 64 insertions(+), 62 deletions(-) - -diff --git a/po/sv.po b/po/sv.po -index 2c50b3d..407c174 100644 ---- a/po/sv.po -+++ b/po/sv.po -@@ -10,8 +10,8 @@ msgid "" - msgstr "" - "Project-Id-Version: gnome-contacts\n" - "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-contacts/issues\n" --"POT-Creation-Date: 2020-06-05 13:39+0000\n" --"PO-Revision-Date: 2020-07-31 16:11+0200\n" -+"POT-Creation-Date: 2020-11-29 16:45+0000\n" -+"PO-Revision-Date: 2020-11-30 01:31+0100\n" - "Last-Translator: Anders Jonsson \n" - "Language-Team: Swedish \n" - "Language: sv\n" -@@ -19,11 +19,11 @@ msgstr "" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" --"X-Generator: Poedit 2.3.1\n" -+"X-Generator: Poedit 2.4.2\n" - - #: data/org.gnome.Contacts.appdata.xml.in.in:6 - #: data/org.gnome.Contacts.desktop.in.in:3 data/ui/contacts-window.ui:144 --#: data/ui/contacts-window.ui:162 src/contacts-window.vala:240 -+#: data/ui/contacts-window.ui:163 src/contacts-window.vala:230 - msgid "Contacts" - msgstr "Kontakter" - -@@ -52,7 +52,7 @@ msgstr "" - "Kontakter integrerar med adressböcker på nätet och länkar automatiskt " - "kontakter från olika källor." - --#: data/org.gnome.Contacts.appdata.xml.in.in:433 -+#: data/org.gnome.Contacts.appdata.xml.in.in:482 - msgid "The GNOME Project" - msgstr "GNOME-projektet" - -@@ -104,13 +104,12 @@ msgstr "Ta en bild…" - msgid "Select a File…" - msgstr "Välj en fil…" - --#: data/ui/contacts-contact-pane.ui:47 -+#: data/ui/contacts-contact-pane.ui:45 - msgid "Select a contact" - msgstr "Välj en kontakt" - --#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:214 --#: data/ui/contacts-window.ui:278 src/contacts-addressbook-dialog.vala:32 --#: src/contacts-editor-property.vala:86 -+#: data/ui/contacts-crop-cheese-dialog.ui:27 data/ui/contacts-window.ui:215 -+#: src/contacts-addressbook-dialog.vala:32 src/contacts-editor-property.vala:86 - msgid "Cancel" - msgstr "Avbryt" - -@@ -118,8 +117,8 @@ msgstr "Avbryt" - msgid "Take Another…" - msgstr "Ta en till…" - --#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:335 --#: src/contacts-window.vala:247 -+#: data/ui/contacts-crop-cheese-dialog.ui:64 data/ui/contacts-window.ui:337 -+#: src/contacts-window.vala:238 - msgid "Done" - msgstr "Färdig" - -@@ -152,31 +151,31 @@ msgstr "Länka" - msgid "Remove" - msgstr "Ta bort" - --#: data/ui/contacts-setup-window.ui:12 -+#: data/ui/contacts-setup-window.ui:11 - msgid "Contacts Setup" - msgstr "Kontaktkonfiguration" - --#: data/ui/contacts-setup-window.ui:21 -+#: data/ui/contacts-setup-window.ui:20 - msgid "_Quit" - msgstr "A_vsluta" - --#: data/ui/contacts-setup-window.ui:26 -+#: data/ui/contacts-setup-window.ui:25 - msgid "Cancel setup and quit" - msgstr "Avbryt konfiguration och avsluta" - --#: data/ui/contacts-setup-window.ui:40 -+#: data/ui/contacts-setup-window.ui:39 - msgid "_Done" - msgstr "_Färdig" - --#: data/ui/contacts-setup-window.ui:44 -+#: data/ui/contacts-setup-window.ui:43 - msgid "Setup complete" - msgstr "Konfiguration klar" - --#: data/ui/contacts-setup-window.ui:85 -+#: data/ui/contacts-setup-window.ui:82 - msgid "Welcome" - msgstr "Välkommen" - --#: data/ui/contacts-setup-window.ui:97 -+#: data/ui/contacts-setup-window.ui:94 - msgid "" - "Please select your main address book: this is where new contacts will be " - "added. If you keep your contacts in an online account, you can add them " -@@ -234,27 +233,31 @@ msgstr "Avlänka" - msgid "Delete" - msgstr "Ta bort" - --#: data/ui/contacts-window.ui:170 -+#: data/ui/contacts-window.ui:171 - msgid "Create new contact" - msgstr "Skapa ny kontakt" - --#: data/ui/contacts-window.ui:174 -+#: data/ui/contacts-window.ui:175 - msgid "Add contact" - msgstr "Lägg till kontakt" - --#: data/ui/contacts-window.ui:215 -+#: data/ui/contacts-window.ui:216 - msgid "Cancel selection" - msgstr "Avbryt markering" - --#: data/ui/contacts-window.ui:259 -+#: data/ui/contacts-window.ui:260 - msgid "Back" - msgstr "Bakåt" - --#: data/ui/contacts-window.ui:397 -+#: data/ui/contacts-window.ui:279 src/contacts-avatar-selector.vala:197 -+msgid "_Cancel" -+msgstr "_Avbryt" -+ -+#: data/ui/contacts-window.ui:396 - msgid "Loading" - msgstr "Läser in" - --#: src/contacts-accounts-list.vala:125 src/contacts-addressbook-list.vala:105 -+#: src/contacts-accounts-list.vala:126 src/contacts-addressbook-list.vala:105 - #: src/contacts-esd-setup.vala:149 - msgid "Local Address Book" - msgstr "Lokal adressbok" -@@ -267,7 +270,7 @@ msgstr "Byt adressbok" - msgid "Change" - msgstr "Ändra" - --#: src/contacts-addressbook-dialog.vala:61 -+#: src/contacts-addressbook-dialog.vala:60 - msgid "" - "New contacts will be added to the selected address book.\n" - "You are able to view and edit contacts from other address books." -@@ -291,16 +294,16 @@ msgstr "Visa kontakter med det angivna filtret" - msgid "Show the current version of Contacts" - msgstr "Visa aktuell version av Kontakter" - --#: src/contacts-app.vala:102 -+#: src/contacts-app.vala:112 - #, c-format - msgid "No contact with id %s found" - msgstr "Ingen kontakt med id %s hittades" - --#: src/contacts-app.vala:103 src/contacts-app.vala:185 -+#: src/contacts-app.vala:113 src/contacts-app.vala:193 - msgid "Contact not found" - msgstr "Kontakten hittades inte" - --#: src/contacts-app.vala:164 -+#: src/contacts-app.vala:172 - msgid "translator-credits" - msgstr "" - "Daniel Nylander \n" -@@ -310,19 +313,19 @@ msgstr "" - "Skicka synpunkter på översättningen till\n" - "." - --#: src/contacts-app.vala:165 -+#: src/contacts-app.vala:173 - msgid "GNOME Contacts" - msgstr "GNOME-kontakter" - --#: src/contacts-app.vala:166 -+#: src/contacts-app.vala:174 - msgid "About GNOME Contacts" - msgstr "Om GNOME-kontakter" - --#: src/contacts-app.vala:167 -+#: src/contacts-app.vala:175 - msgid "Contact Management Application" - msgstr "Program för kontakthantering" - --#: src/contacts-app.vala:168 -+#: src/contacts-app.vala:176 - msgid "" - "© 2011 Red Hat, Inc.\n" - "© 2011-2020 The Contacts Developers" -@@ -330,28 +333,24 @@ msgstr "" - "© 2011 Red Hat, Inc.\n" - "© 2011-2020 Utvecklarna av Kontakter" - --#: src/contacts-app.vala:184 -+#: src/contacts-app.vala:192 - #, c-format - msgid "No contact with email address %s found" - msgstr "Ingen kontakt med e-postadressen %s hittades" - - #: src/contacts-avatar-selector.vala:109 src/contacts-avatar-selector.vala:115 --#: src/contacts-avatar-selector.vala:235 -+#: src/contacts-avatar-selector.vala:234 - msgid "Failed to set avatar." - msgstr "Misslyckades med att ställa in profilbild." - --#: src/contacts-avatar-selector.vala:195 -+#: src/contacts-avatar-selector.vala:194 - msgid "Browse for more pictures" - msgstr "Bläddra efter fler bilder" - --#: src/contacts-avatar-selector.vala:198 -+#: src/contacts-avatar-selector.vala:197 - msgid "_Open" - msgstr "_Öppna" - --#: src/contacts-avatar-selector.vala:198 --msgid "_Cancel" --msgstr "_Avbryt" -- - #: src/contacts-contact-editor.vala:50 - msgid "Change avatar" - msgstr "Byt profilbild" -@@ -360,11 +359,11 @@ msgstr "Byt profilbild" - msgid "Add name" - msgstr "Lägg till namn" - --#: src/contacts-contact-list.vala:178 -+#: src/contacts-contact-list.vala:177 - msgid "Favorites" - msgstr "Favoriter" - --#: src/contacts-contact-list.vala:180 src/contacts-contact-list.vala:186 -+#: src/contacts-contact-list.vala:179 src/contacts-contact-list.vala:185 - msgid "All Contacts" - msgstr "Alla kontakter" - -@@ -381,19 +380,19 @@ msgstr "Kunde inte skapa nya kontakter: %s" - msgid "Unable to find newly created contact" - msgstr "Kunde inte hitta nyligen skapad kontakt" - --#: src/contacts-contact-sheet.vala:278 src/contacts-editor-property.vala:488 -+#: src/contacts-contact-sheet.vala:280 src/contacts-editor-property.vala:488 - msgid "Website" - msgstr "Webbplats" - --#: src/contacts-contact-sheet.vala:295 src/contacts-editor-property.vala:498 -+#: src/contacts-contact-sheet.vala:297 src/contacts-editor-property.vala:498 - msgid "Nickname" - msgstr "Smeknamn" - --#: src/contacts-contact-sheet.vala:301 src/contacts-editor-property.vala:563 -+#: src/contacts-contact-sheet.vala:303 src/contacts-editor-property.vala:563 - msgid "Birthday" - msgstr "Födelsedag" - --#: src/contacts-contact-sheet.vala:308 src/contacts-editor-property.vala:526 -+#: src/contacts-contact-sheet.vala:310 src/contacts-editor-property.vala:526 - msgid "Note" - msgstr "Anteckning" - -@@ -670,68 +669,68 @@ msgstr "TTY" - msgid "Google Circles" - msgstr "Google-cirklar" - --#: src/contacts-window.vala:210 -+#: src/contacts-window.vala:202 - #, c-format - msgid "%d Selected" - msgid_plural "%d Selected" - msgstr[0] "%d vald" - msgstr[1] "%d valda" - --#: src/contacts-window.vala:247 --msgid "Add" --msgstr "Lägg till" -+#: src/contacts-window.vala:238 -+msgid "_Add" -+msgstr "_Lägg till" - --#: src/contacts-window.vala:277 -+#: src/contacts-window.vala:283 - #, c-format - msgid "Editing %s" - msgstr "Redigerar %s" - --#: src/contacts-window.vala:304 src/contacts-window.vala:486 --#: src/contacts-window.vala:510 src/contacts-window.vala:556 -+#: src/contacts-window.vala:310 src/contacts-window.vala:500 -+#: src/contacts-window.vala:524 src/contacts-window.vala:570 - msgid "_Undo" - msgstr "_Ångra" - --#: src/contacts-window.vala:305 -+#: src/contacts-window.vala:311 - msgid "Contacts unlinked" - msgstr "Kontakter avlänkade" - --#: src/contacts-window.vala:364 -+#: src/contacts-window.vala:370 - msgid "Unmark as favorite" - msgstr "Avmarkera som favorit" - --#: src/contacts-window.vala:365 -+#: src/contacts-window.vala:371 - msgid "Mark as favorite" - msgstr "Markera som favorit" - --#: src/contacts-window.vala:379 -+#: src/contacts-window.vala:385 - msgid "New Contact" - msgstr "Ny kontakt" - --#: src/contacts-window.vala:482 -+#: src/contacts-window.vala:496 - #, c-format - msgid "%d contacts linked" - msgid_plural "%d contacts linked" - msgstr[0] "%d kontakter länkade" - msgstr[1] "%d kontakter länkade" - --#: src/contacts-window.vala:505 -+#: src/contacts-window.vala:519 - #, c-format - msgid "Deleted contact %s" - msgstr "Tog bort kontakten %s" - --#: src/contacts-window.vala:507 -+#: src/contacts-window.vala:521 - #, c-format - msgid "%d contact deleted" - msgid_plural "%d contacts deleted" - msgstr[0] "%d kontakt borttagen" - msgstr[1] "%d kontakter borttagna" - --#: src/contacts-window.vala:552 -+#: src/contacts-window.vala:566 - #, c-format - msgid "%s linked to %s" - msgstr "%s länkad till %s" - --#: src/contacts-window.vala:554 -+#: src/contacts-window.vala:568 - #, c-format - msgid "%s linked to the contact" - msgstr "%s länkad till kontakten" -@@ -790,6 +789,9 @@ msgstr "Är fönstret maximerat?" - msgid "Stores if the window is currently maximized." - msgstr "Lagrar om fönstret för närvarande är maximerat." - -+#~ msgid "Add" -+#~ msgstr "Lägg till" -+ - #~ msgid "Home email" - #~ msgstr "E-post hem" - diff --git a/debian/patches/0025-Remove-vim-modelines.patch b/debian/patches/0025-Remove-vim-modelines.patch deleted file mode 100644 index b2133cf7cbf00eeb93dfe92d1fecb8b52d18d7c4..0000000000000000000000000000000000000000 --- a/debian/patches/0025-Remove-vim-modelines.patch +++ /dev/null @@ -1,59 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 13:11:36 +0100 -Subject: [PATCH 25/42] Remove vim modelines - ---- - src/cc-crop-area.c | 3 +-- - src/contacts-avatar-selector.vala | 1 - - src/contacts-crop-cheese-dialog.vala | 1 - - src/contacts-list-pane.vala | 1 - - src/main.vala | 1 - - 5 files changed, 1 insertion(+), 6 deletions(-) - -diff --git a/src/cc-crop-area.c b/src/cc-crop-area.c -index ef7ca36..799d55c 100644 ---- a/src/cc-crop-area.c -+++ b/src/cc-crop-area.c -@@ -1,5 +1,4 @@ --/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- -- * -+/* - * Copyright 2009 Red Hat, Inc, - * - * This program is free software; you can redistribute it and/or modify -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index 5e6a160..e44ddcd 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2011 Alexander Larsson - * -diff --git a/src/contacts-crop-cheese-dialog.vala b/src/contacts-crop-cheese-dialog.vala -index cc912c2..5c8fdaf 100644 ---- a/src/contacts-crop-cheese-dialog.vala -+++ b/src/contacts-crop-cheese-dialog.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2018 Elias Entrup - * -diff --git a/src/contacts-list-pane.vala b/src/contacts-list-pane.vala -index 7aeced5..a886afa 100644 ---- a/src/contacts-list-pane.vala -+++ b/src/contacts-list-pane.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2011 Alexander Larsson - * -diff --git a/src/main.vala b/src/main.vala -index 271542a..4d80021 100644 ---- a/src/main.vala -+++ b/src/main.vala -@@ -1,4 +1,3 @@ --/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */ - /* - * Copyright (C) 2011 Alexander Larsson - * diff --git a/debian/patches/0026-avatar-selector-Always-log-messages-on-error.patch b/debian/patches/0026-avatar-selector-Always-log-messages-on-error.patch deleted file mode 100644 index b855350e00aa2c0f987ff53744d7e40cc74b9744..0000000000000000000000000000000000000000 --- a/debian/patches/0026-avatar-selector-Always-log-messages-on-error.patch +++ /dev/null @@ -1,47 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 13:15:05 +0100 -Subject: [PATCH 26/42] avatar-selector: Always log messages on error - ---- - src/contacts-avatar-selector.vala | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index e44ddcd..34dc412 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -142,8 +142,8 @@ public class Contacts.AvatarSelector : Popover { - try { - var stream = details.avatar.load (MAIN_SIZE, null); - return create_thumbnail (new Gdk.Pixbuf.from_stream (stream)); -- } catch { -- debug ("Couldn't create frame for persona \"%s\".", persona.display_id); -+ } catch (Error e) { -+ debug ("Couldn't create frame for persona '%s': %s", persona.display_id, e.message); - } - - return null; -@@ -152,8 +152,8 @@ public class Contacts.AvatarSelector : Popover { - private FlowBoxChild? thumbnail_for_filename (string filename) { - try { - return create_thumbnail (new Gdk.Pixbuf.from_file (filename)); -- } catch { -- debug ("Couldn't create frame for file \"%s\".", filename); -+ } catch (Error e) { -+ debug ("Couldn't create frame for file '%s': %s", filename, e.message); - } - - return null; -@@ -256,9 +256,10 @@ public class Contacts.AvatarSelector : Popover { - var mime_type = file_info.get_content_type (); - - if (mime_type != null) -- pixbuf = thumbnail_factory.generate_thumbnail (uri, mime_type); -+ pixbuf = this.thumbnail_factory.generate_thumbnail (uri, mime_type); - } -- } catch { -+ } catch (Error e) { -+ debug ("Couldn't generate thumbnail for file '%s': %s", uri, e.message); - } - - if (chooser is Dialog) diff --git a/debian/patches/0027-addressbook-list-Remove-commented-out-code.patch b/debian/patches/0027-addressbook-list-Remove-commented-out-code.patch deleted file mode 100644 index 546fcc4774463c001e463fb9d53dc1b6a9fa8dc6..0000000000000000000000000000000000000000 --- a/debian/patches/0027-addressbook-list-Remove-commented-out-code.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 13:17:42 +0100 -Subject: [PATCH 27/42] addressbook-list: Remove commented out code - ---- - src/contacts-addressbook-list.vala | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/src/contacts-addressbook-list.vala b/src/contacts-addressbook-list.vala -index 6c8f2a9..a7b2616 100644 ---- a/src/contacts-addressbook-list.vala -+++ b/src/contacts-addressbook-list.vala -@@ -106,13 +106,6 @@ public class Contacts.AddressbookList : Gtk.ListBox { - add (local_row); - } - -- /* -- if (select_active && -- local_store == this.contacts_store.aggregator.primary_store) { -- row_activated (local_row); -- } -- */ -- - show_all (); - } - } diff --git a/debian/patches/0028-Remove-AUTHORS.patch b/debian/patches/0028-Remove-AUTHORS.patch deleted file mode 100644 index 6d7604b38b6f266e141262f73166f0a4037c92d9..0000000000000000000000000000000000000000 --- a/debian/patches/0028-Remove-AUTHORS.patch +++ /dev/null @@ -1,20 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 18:12:33 +0100 -Subject: [PATCH 28/42] Remove AUTHORS - -It's outdated, and in general something we couldn't remove while we -still had an autotools-based build. But we're 2020 now, so let's get rid -of it. ---- - AUTHORS | 2 -- - 1 file changed, 2 deletions(-) - delete mode 100644 AUTHORS - -diff --git a/AUTHORS b/AUTHORS -deleted file mode 100644 -index 528e728..0000000 ---- a/AUTHORS -+++ /dev/null -@@ -1,2 +0,0 @@ --Alexander Larsson -- diff --git a/debian/patches/0029-README-Remove-Flathub-reference.patch b/debian/patches/0029-README-Remove-Flathub-reference.patch deleted file mode 100644 index aade7e1bb73b24cc33d8eba27de367e35fb58aab..0000000000000000000000000000000000000000 --- a/debian/patches/0029-README-Remove-Flathub-reference.patch +++ /dev/null @@ -1,27 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 18:14:20 +0100 -Subject: [PATCH 29/42] README: Remove Flathub reference - -The Flatpak build has several issues when there is a version mismatch -between the build E-D-S and the host E-D-S, so we have a recurrent wave -of people saying Contacts is broken everytime we release a new version. - -I'm not sure what to do with the flatpak build yet, but let's not -advertise it in our README. ---- - README.md | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/README.md b/README.md -index d7fe853..ac6fa3d 100644 ---- a/README.md -+++ b/README.md -@@ -3,8 +3,6 @@ - Contacts organizes your contacts information from all your online and offline - sources, providing a centralized place for managing your contacts. - --[](https://flathub.org/apps/details/org.gnome.Contacts) -- - ## Building - - You can build and install Contacts using [Meson](http://mesonbuild.com/): diff --git a/debian/patches/0030-utils-Remove-code-that-checks-for-Google.patch b/debian/patches/0030-utils-Remove-code-that-checks-for-Google.patch deleted file mode 100644 index ea27143da033a5ed7e148767dc46dc63e3f01234..0000000000000000000000000000000000000000 --- a/debian/patches/0030-utils-Remove-code-that-checks-for-Google.patch +++ /dev/null @@ -1,51 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 18:33:26 +0100 -Subject: [PATCH 30/42] utils: Remove code that checks for Google+ - -Google+ is dead, so let's not waste maintenance and performance on it. ---- - src/contacts-utils.vala | 21 ++------------------- - 1 file changed, 2 insertions(+), 19 deletions(-) - -diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala -index 1540b0c..b63efeb 100644 ---- a/src/contacts-utils.vala -+++ b/src/contacts-utils.vala -@@ -450,8 +450,7 @@ namespace Contacts.Utils { - bool all_unlinkable = true; - - foreach (var p in individual.personas) { -- if (!persona_is_google_other (p) || -- persona_is_google_profile (p)) -+ if (!persona_is_google_other (p)) - all_unlinkable = false; - } - -@@ -474,26 +473,10 @@ namespace Contacts.Utils { - return p != null && !p.in_google_personal_group; - } - -- public bool persona_is_google_profile (Persona persona) { -- if (!persona_is_google_other (persona)) -- return false; -- -- unowned var u = persona as UrlDetails; -- if (u != null && u.urls.size == 1) { -- foreach (var url in u.urls) { -- if (/https?:\/\/www.google.com\/profiles\/[0-9]+$/.match(url.value)) -- return true; -- } -- } -- return false; -- } -- - public string format_persona_store_name_for_contact (Persona persona) { - unowned var store = persona.store; - if (store.type_id == "eds") { -- if (persona_is_google_profile (persona)) -- return _("Google Circles"); -- else if (persona_is_google_other (persona)) -+ if (persona_is_google_other (persona)) - return _("Google"); - - string? eds_name = lookup_esource_name_by_uid_for_contact (store.id); diff --git a/debian/patches/0031-Import-only-the-Folks-namspace.patch b/debian/patches/0031-Import-only-the-Folks-namspace.patch deleted file mode 100644 index 17471504f51c9af7175e5bba2e4f51ec09cc1ed1..0000000000000000000000000000000000000000 --- a/debian/patches/0031-Import-only-the-Folks-namspace.patch +++ /dev/null @@ -1,1994 +0,0 @@ -From: Niels De Graef -Date: Mon, 30 Nov 2020 21:22:08 +0100 -Subject: [PATCH 31/42] Import only the Folks namspace - -This commit removes all remaining occurrences `using Gtk;`, `using Gee;` -and `using Hdy;`. There's a number of reasons why we're doing this, but -to list a few: - -* The `Gtk` and `Hdy` namespaces have had issues before with types - having the same name (ie HdyHeaderBar and GtkHeaderBar) which could - suddenly break the build. -* By omitting namespaces, it's harder to see for new contributors what - the actual type is of a certain variable when they want to look up the - API -* In the long term, we want to get rid of Gee, as it's clear that it's - not really maintained, and has some serious performance drawbacks. ---- - src/contacts-accounts-list.vala | 35 +++---- - src/contacts-avatar-selector.vala | 48 ++++----- - src/contacts-avatar.vala | 1 - - src/contacts-contact-list.vala | 9 +- - src/contacts-contact-pane.vala | 32 +++--- - src/contacts-contact-sheet.vala | 49 +++++----- - src/contacts-crop-cheese-dialog.vala | 16 ++- - src/contacts-editor-property.vala | 163 ++++++++++++++++--------------- - src/contacts-fake-persona-store.vala | 103 ++++++++++--------- - src/contacts-im-service.vala | 6 +- - src/contacts-in-app-notification.vala | 14 ++- - src/contacts-link-suggestion-grid.vala | 4 +- - src/contacts-linked-personas-dialog.vala | 25 +++-- - src/contacts-linking.vala | 15 ++- - src/contacts-list-pane.vala | 18 ++-- - src/contacts-setup-window.vala | 7 +- - src/contacts-shell-search-provider.vala | 5 +- - src/contacts-type-combo.vala | 16 ++- - src/contacts-type-descriptor.vala | 6 +- - src/contacts-typeset.vala | 22 +++-- - src/contacts-utils.vala | 45 ++++----- - src/contacts-vcard-type-mapping.vala | 4 +- - src/main.vala | 1 - - tests/basic-test.vala | 4 +- - 24 files changed, 310 insertions(+), 338 deletions(-) - -diff --git a/src/contacts-accounts-list.vala b/src/contacts-accounts-list.vala -index 7e96657..4c9a0f6 100644 ---- a/src/contacts-accounts-list.vala -+++ b/src/contacts-accounts-list.vala -@@ -15,13 +15,11 @@ - * along with this program. If not, see . - */ - --using Gtk; --using Hdy; - using Folks; - - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-accounts-list.ui")] --public class Contacts.AccountsList : ListBox { -- private ListBoxRow last_selected_row; -+public class Contacts.AccountsList : Gtk.ListBox { -+ private Gtk.ListBoxRow last_selected_row; - - private Store contacts_store; - -@@ -36,7 +34,7 @@ public class Contacts.AccountsList : ListBox { - this.set_header_func (add_separator); - } - -- public override void row_activated (ListBoxRow row) { -+ public override void row_activated (Gtk.ListBoxRow row) { - if (row == null) - return; - -@@ -45,11 +43,11 @@ public class Contacts.AccountsList : ListBox { - return; - } - -- var checkmark = row.get_data ("checkmark"); -+ var checkmark = row.get_data ("checkmark"); - checkmark.show (); - - if (last_selected_row != null) { -- checkmark = last_selected_row.get_data ("checkmark"); -+ checkmark = last_selected_row.get_data ("checkmark"); - if (checkmark != null) - checkmark.hide (); - } -@@ -89,23 +87,25 @@ public class Contacts.AccountsList : ListBox { - source_account_id = goa_source_ext.account_id; - } - -- var row = new ActionRow (); -+ var row = new Hdy.ActionRow (); - row.set_data ("store", persona_store); - - Gtk.Image provider_image; - if (source_account_id != "") - provider_image = Contacts.get_icon_for_goa_account (source_account_id); - else -- provider_image = new Image.from_icon_name (Config.APP_ID, IconSize.DIALOG); -+ provider_image = new Gtk.Image.from_icon_name (Config.APP_ID, -+ Gtk.IconSize.DIALOG); - row.add_prefix (provider_image); - row.title = provider_name; - row.subtitle = parent_source.display_name; - row.show_all (); - row.no_show_all = true; -- var checkmark = new Image.from_icon_name ("object-select-symbolic", IconSize.MENU); -+ var checkmark = new Gtk.Image.from_icon_name ("object-select-symbolic", -+ Gtk.IconSize.MENU); - checkmark.set ("margin-end", 6, -- "valign", Align.CENTER, -- "halign", Align.END, -+ "valign", Gtk.Align.CENTER, -+ "halign", Gtk.Align.END, - "vexpand", true, - "hexpand", true); - row.add (checkmark); -@@ -120,16 +120,17 @@ public class Contacts.AccountsList : ListBox { - } - - if (local_store != null) { -- var local_row = new ActionRow (); -- var provider_image = new Image.from_icon_name (Config.APP_ID, IconSize.DIALOG); -+ var local_row = new Hdy.ActionRow (); -+ var provider_image = new Gtk.Image.from_icon_name (Config.APP_ID, -+ Gtk.IconSize.DIALOG); - local_row.add_prefix (provider_image); - local_row.title = _("Local Address Book"); - local_row.show_all (); - local_row.no_show_all = true; -- var checkmark = new Image.from_icon_name ("object-select-symbolic", IconSize.MENU); -+ var checkmark = new Gtk.Image.from_icon_name ("object-select-symbolic", Gtk.IconSize.MENU); - checkmark.set ("margin-end", 6, -- "valign", Align.CENTER, -- "halign", Align.END, -+ "valign", Gtk.Align.CENTER, -+ "halign", Gtk.Align.END, - "vexpand", true, - "hexpand", true); - local_row.add (checkmark); -diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala -index 34dc412..fb83e37 100644 ---- a/src/contacts-avatar-selector.vala -+++ b/src/contacts-avatar-selector.vala -@@ -15,7 +15,6 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - - /** -@@ -26,7 +25,7 @@ using Folks; - * After a user has initially chosen an avatar, we provide a cropping tool. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-avatar-selector.ui")] --public class Contacts.AvatarSelector : Popover { -+public class Contacts.AvatarSelector : Gtk.Popover { - const int ICONS_SIZE = 64; - const int MAIN_SIZE = 128; - const string AVATAR_BUTTON_CSS_NAME = "avatar-button"; -@@ -36,13 +35,13 @@ public class Contacts.AvatarSelector : Popover { - private Individual individual; - - [GtkChild] -- private FlowBox personas_thumbnail_grid; -+ private Gtk.FlowBox personas_thumbnail_grid; - [GtkChild] -- private FlowBox stock_thumbnail_grid; -+ private Gtk.FlowBox stock_thumbnail_grid; - - #if HAVE_CHEESE - [GtkChild] -- private Button cheese_button; -+ private Gtk.Button cheese_button; - private int num_cameras; - private Cheese.CameraDeviceMonitor camera_monitor; - #endif -@@ -116,25 +115,25 @@ public class Contacts.AvatarSelector : Popover { - } - } - -- private FlowBoxChild create_thumbnail (Gdk.Pixbuf source_pixbuf) { -+ private Gtk.FlowBoxChild create_thumbnail (Gdk.Pixbuf source_pixbuf) { - var avatar = new Avatar (ICONS_SIZE); - avatar.set_pixbuf (source_pixbuf); - -- var button = new Button (); -+ var button = new Gtk.Button (); - button.get_style_context ().add_class (AVATAR_BUTTON_CSS_NAME); - button.image = avatar; - button.clicked.connect ( () => { - selected_pixbuf (scale_pixbuf_for_avatar_use (source_pixbuf)); - this.popdown (); - }); -- var child = new FlowBoxChild (); -+ var child = new Gtk.FlowBoxChild (); - child.add (button); -- child.set_halign (Align.START); -+ child.set_halign (Gtk.Align.START); - - return child; - } - -- private FlowBoxChild? thumbnail_for_persona (Persona persona) { -+ private Gtk.FlowBoxChild? thumbnail_for_persona (Persona persona) { - var details = persona as AvatarDetails; - if (details == null || details.avatar == null) - return null; -@@ -149,7 +148,7 @@ public class Contacts.AvatarSelector : Popover { - return null; - } - -- private FlowBoxChild? thumbnail_for_filename (string filename) { -+ private Gtk.FlowBoxChild? thumbnail_for_filename (string filename) { - try { - return create_thumbnail (new Gdk.Pixbuf.from_file (filename)); - } catch (Error e) { -@@ -179,7 +178,7 @@ public class Contacts.AvatarSelector : Popover { - } - - [GtkCallback] -- private void on_cheese_clicked (Button button) { -+ private void on_cheese_clicked (Gtk.Button button) { - var dialog = new CropCheeseDialog.for_cheese ((Window) this.get_toplevel()); - dialog.show_all (); - dialog.picture_selected.connect ( (pix) => { -@@ -189,14 +188,14 @@ public class Contacts.AvatarSelector : Popover { - } - - [GtkCallback] -- private void on_file_clicked (Button button) { -- var chooser = new FileChooserNative (_("Browse for more pictures"), -- (Gtk.Window)this.get_toplevel (), -- FileChooserAction.OPEN, -- _("_Open"), _("_Cancel")); -+ private void on_file_clicked (Gtk.Button button) { -+ var chooser = new Gtk.FileChooserNative (_("Browse for more pictures"), -+ (Gtk.Window) this.get_toplevel (), -+ Gtk.FileChooserAction.OPEN, -+ _("_Open"), _("_Cancel")); - chooser.set_modal (true); - chooser.set_local_only (false); -- var preview = new Image (); -+ var preview = new Gtk.Image (); - preview.set_size_request (MAIN_SIZE, -1); - chooser.set_preview_widget (preview); - chooser.set_use_preview_label (false); -@@ -209,7 +208,7 @@ public class Contacts.AvatarSelector : Popover { - chooser.set_current_folder (folder); - - chooser.response.connect ( (response) => { -- if (response != ResponseType.ACCEPT) { -+ if (response != Gtk.ResponseType.ACCEPT) { - chooser.destroy (); - return; - } -@@ -241,12 +240,12 @@ public class Contacts.AvatarSelector : Popover { - this.popdown(); - } - -- private void update_preview (FileChooser chooser) { -+ private void update_preview (Gtk.FileChooser chooser) { - var uri = chooser.get_preview_uri (); - if (uri != null) { - Gdk.Pixbuf? pixbuf = null; - -- var preview = chooser.get_preview_widget () as Image; -+ var preview = chooser.get_preview_widget () as Gtk.Image; - - var file = File.new_for_uri (uri); - try { -@@ -262,13 +261,14 @@ public class Contacts.AvatarSelector : Popover { - debug ("Couldn't generate thumbnail for file '%s': %s", uri, e.message); - } - -- if (chooser is Dialog) -- ((Dialog) chooser).set_response_sensitive (ResponseType.ACCEPT, (pixbuf != null)); -+ if (chooser is Gtk.Dialog) -+ ((Gtk.Dialog) chooser).set_response_sensitive (Gtk.ResponseType.ACCEPT, -+ (pixbuf != null)); - - if (pixbuf != null) - preview.set_from_pixbuf (pixbuf); - else -- preview.set_from_icon_name ("dialog-question", IconSize.DIALOG); -+ preview.set_from_icon_name ("dialog-question", Gtk.IconSize.DIALOG); - } - - chooser.set_preview_widget_active (true); -diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala -index cfb32cd..3365306 100644 ---- a/src/contacts-avatar.vala -+++ b/src/contacts-avatar.vala -@@ -16,7 +16,6 @@ - */ - - using Folks; --using Gee; - - /** - * The Avatar of a Contact is responsible for showing an {@link Folks.Individual}'s -diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala -index 96f49f6..07103af 100644 ---- a/src/contacts-contact-list.vala -+++ b/src/contacts-contact-list.vala -@@ -16,7 +16,6 @@ - */ - - using Folks; --using Gee; - - /** - * The ContactList is the actual list of {@link Individual}s that the user sees on -@@ -278,8 +277,8 @@ public class Contacts.ContactList : Gtk.ListBox { - return null; - } - -- public LinkedList get_marked_contacts () { -- var cs = new LinkedList (); -+ public Gee.LinkedList get_marked_contacts () { -+ var cs = new Gee.LinkedList (); - foreach (weak Gtk.Widget widget in get_children ()) { - unowned var row = widget as ContactDataRow; - if (row.selector_button.active) -@@ -288,8 +287,8 @@ public class Contacts.ContactList : Gtk.ListBox { - return cs; - } - -- public LinkedList get_marked_contacts_and_hide () { -- var cs = new LinkedList (); -+ public Gee.LinkedList get_marked_contacts_and_hide () { -+ var cs = new Gee.LinkedList (); - foreach (weak Gtk.Widget widget in get_children ()) { - unowned var row = widget as ContactDataRow; - if (row.selector_button.active) { -diff --git a/src/contacts-contact-pane.vala b/src/contacts-contact-pane.vala -index 7b3a6e6..6ab9c2c 100644 ---- a/src/contacts-contact-pane.vala -+++ b/src/contacts-contact-pane.vala -@@ -15,9 +15,7 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - const int PROFILE_SIZE = 128; - -@@ -27,26 +25,26 @@ const int PROFILE_SIZE = 128; - * and a ContactEditor to edit contact information. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-contact-pane.ui")] --public class Contacts.ContactPane : ScrolledWindow { -+public class Contacts.ContactPane : Gtk.ScrolledWindow { - -- private Window parent_window; -+ private Contacts.Window parent_window; - - private Store store; - - public Individual? individual { get; set; default = null; } - - [GtkChild] -- private Stack stack; -+ private Gtk.Stack stack; - - [GtkChild] -- private Grid none_selected_page; -+ private Gtk.Grid none_selected_page; - - [GtkChild] -- private Container contact_sheet_page; -+ private Gtk.Container contact_sheet_page; - private ContactSheet? sheet = null; - - [GtkChild] -- private Box contact_editor_page; -+ private Gtk.Box contact_editor_page; - private ContactEditor? editor = null; - - public bool on_edit_mode = false; -@@ -60,13 +58,13 @@ public class Contacts.ContactPane : ScrolledWindow { - public signal void display_name_changed (string new_display_name); - - -- public ContactPane (Window parent_window, Store contacts_store) { -+ public ContactPane (Contacts.Window parent_window, Store contacts_store) { - this.parent_window = parent_window; - this.store = contacts_store; - } - - public void add_suggestion (Individual i) { -- var parent_overlay = this.get_parent () as Overlay; -+ var parent_overlay = this.get_parent () as Gtk.Overlay; - - remove_suggestion_grid (); - this.suggestion_grid = new LinkSuggestionGrid (i); -@@ -75,7 +73,7 @@ public class Contacts.ContactPane : ScrolledWindow { - this.suggestion_grid.suggestion_accepted.connect ( () => { - var linked_contact = this.individual.display_name; - var operation = new LinkOperation (this.store); -- var to_link = new LinkedList (); -+ var to_link = new Gee.LinkedList (); - to_link.add (this.individual); - to_link.add (i); - operation.execute.begin (to_link); -@@ -217,7 +215,7 @@ public class Contacts.ContactPane : ScrolledWindow { - } - - var fake_persona = new FakePersona (FakePersonaStore.the_store(), writeable_properties, details); -- var fake_personas = new HashSet (); -+ var fake_personas = new Gee.HashSet (); - fake_personas.add (fake_persona); - this.individual = new FakeIndividual(fake_personas); - -@@ -258,11 +256,11 @@ public class Contacts.ContactPane : ScrolledWindow { - - private void show_message_dialog (string message) { - var dialog = -- new MessageDialog (this.parent_window, -- DialogFlags.DESTROY_WITH_PARENT | DialogFlags.MODAL, -- MessageType.ERROR, -- ButtonsType.OK, -- "%s", message); -+ new Gtk.MessageDialog (this.parent_window, -+ Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.MODAL, -+ Gtk.MessageType.ERROR, -+ Gtk.ButtonsType.OK, -+ "%s", message); - dialog.run (); - dialog.destroy (); - } -diff --git a/src/contacts-contact-sheet.vala b/src/contacts-contact-sheet.vala -index 669e771..813d26c 100644 ---- a/src/contacts-contact-sheet.vala -+++ b/src/contacts-contact-sheet.vala -@@ -15,16 +15,14 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - /** - * The contact sheet displays the actual information of a contact. - * - * (Note: to edit a contact, use the {@link ContactEditor} instead. - */ --public class Contacts.ContactSheet : Grid { -+public class Contacts.ContactSheet : Gtk.Grid { - private int last_row = 0; - private Individual individual; - private unowned Store store; -@@ -53,51 +51,54 @@ public class Contacts.ContactSheet : Grid { - update (); - } - -- private Label create_persona_store_label (Persona p) { -- var store_name = new Label (Utils.format_persona_store_name_for_contact (p)); -+ private Gtk.Label create_persona_store_label (Persona p) { -+ var store_name = new Gtk.Label (Utils.format_persona_store_name_for_contact (p)); - var attrList = new Pango.AttrList (); - attrList.insert (Pango.attr_weight_new (Pango.Weight.BOLD)); - store_name.set_attributes (attrList); -- store_name.set_halign (Align.START); -+ store_name.set_halign (Gtk.Align.START); - store_name.set_ellipsize (Pango.EllipsizeMode.MIDDLE); - - return store_name; - } - -- private Button create_button (string icon) { -- var button = new Button.from_icon_name (icon, IconSize.BUTTON); -- button.set_halign (Align.END); -+ private Gtk.Button create_button (string icon) { -+ var button = new Gtk.Button.from_icon_name (icon, Gtk.IconSize.BUTTON); -+ button.set_halign (Gtk.Align.END); - button.get_style_context ().add_class ("flatten"); - - return button; - } - -- void add_row_with_label (string label_value, string value, Widget? btn1 = null, Widget? btn2 =null) { -+ void add_row_with_label (string label_value, -+ string value, -+ Gtk.Widget? btn1 = null, -+ Gtk.Widget? btn2 =null) { - if (value == "" || value == null) - return; -- var type_label = new Label (label_value); -+ var type_label = new Gtk.Label (label_value); - type_label.xalign = 1.0f; -- type_label.set_halign (Align.END); -- type_label.set_valign (Align.CENTER); -+ type_label.set_halign (Gtk.Align.END); -+ type_label.set_valign (Gtk.Align.CENTER); - type_label.get_style_context ().add_class ("dim-label"); - this.attach (type_label, 0, this.last_row, 1, 1); - -- var value_label = new Label (value); -+ var value_label = new Gtk.Label (value); - value_label.set_line_wrap (true); - value_label.xalign = 0.0f; -- value_label.set_halign (Align.START); -+ value_label.set_halign (Gtk.Align.START); - value_label.set_ellipsize (Pango.EllipsizeMode.END); - value_label.wrap_mode = Pango.WrapMode.CHAR; - value_label.set_selectable (true); - - if (btn1 != null || btn2 !=null) { -- var value_box = new Box(Orientation.HORIZONTAL, 12); -- value_box.pack_start(value_label, false, false, 0); -+ var value_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12); -+ value_box.pack_start (value_label, false, false, 0); - - if (btn1 != null) -- value_box.pack_end(btn1, false, false, 0); -+ value_box.pack_end (btn1, false, false, 0); - if (btn2 != null) -- value_box.pack_end(btn2, false, false, 0); -+ value_box.pack_end (btn2, false, false, 0); - this.attach (value_box, 1, this.last_row, 1, 1); - } else { - this.attach (value_label, 1, this.last_row, 1, 1); -@@ -111,7 +112,7 @@ public class Contacts.ContactSheet : Grid { - - var image_frame = new Avatar (PROFILE_SIZE, this.individual); - image_frame.set_vexpand (false); -- image_frame.set_valign (Align.START); -+ image_frame.set_valign (Gtk.Align.START); - - this.attach (image_frame, 0, 0, 1, 3); - -@@ -150,7 +151,7 @@ public class Contacts.ContactSheet : Grid { - } - - private void create_name_label () { -- var name_label = new Label (""); -+ var name_label = new Gtk.Label (""); - name_label.ellipsize = Pango.EllipsizeMode.END; - name_label.xalign = 0f; - name_label.selectable = true; -@@ -262,9 +263,11 @@ public class Contacts.ContactSheet : Grid { - foreach (var url in url_details.urls) { - var button = create_button ("web-browser-symbolic"); - button.clicked.connect (() => { -- var window = (Window) button.get_toplevel (); -+ var window = (Contacts.Window) button.get_toplevel (); - try { -- show_uri_on_window (window, fallback_to_https (url.value), Gdk.CURRENT_TIME); -+ Gtk.show_uri_on_window (window, -+ fallback_to_https (url.value), -+ Gdk.CURRENT_TIME); - } catch (Error e) { - var message = "Failed to open url '%s'".printf(url.value); - -diff --git a/src/contacts-crop-cheese-dialog.vala b/src/contacts-crop-cheese-dialog.vala -index 5c8fdaf..e0c9439 100644 ---- a/src/contacts-crop-cheese-dialog.vala -+++ b/src/contacts-crop-cheese-dialog.vala -@@ -15,14 +15,12 @@ - * along with this program. If not, see . - */ - --using Gtk; -- - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-crop-cheese-dialog.ui")] - public class Contacts.CropCheeseDialog : Gtk.Window { - [GtkChild] -- private Stack stack; -+ private Gtk.Stack stack; - [GtkChild] -- private Button take_another_button; -+ private Gtk.Button take_another_button; - - private Cc.CropArea crop_area; - private const string STACK_NAME_CROP = "crop"; -@@ -65,19 +63,19 @@ public class Contacts.CropCheeseDialog : Gtk.Window { - } - - [GtkCallback] -- private void on_cancel_clicked (Button button) { -+ private void on_cancel_clicked (Gtk.Button button) { - this.destroy (); - } - - [GtkCallback] -- private void on_take_another_clicked (Button button) { -+ private void on_take_another_clicked (Gtk.Button button) { - #if HAVE_CHEESE - this.stack.set_visible_child_name (STACK_NAME_CHEESE); - #endif - } - - [GtkCallback] -- private void on_take_pic_clicked (Button button) { -+ private void on_take_pic_clicked (Gtk.Button button) { - #if HAVE_CHEESE - var camera = this.cheese.get_camera () as Cheese.Camera; - this.flash.fire (); -@@ -94,11 +92,11 @@ public class Contacts.CropCheeseDialog : Gtk.Window { - } - - [GtkCallback] -- private void on_done_clicked (Button button) { -+ private void on_done_clicked (Gtk.Button button) { - picture_selected (this.crop_area.get_picture ()); - destroy(); - } -- -+ - [GtkCallback] - private void on_destroy () { - #if HAVE_CHEESE -diff --git a/src/contacts-editor-property.vala b/src/contacts-editor-property.vala -index 0a908ca..e80e54e 100644 ---- a/src/contacts-editor-property.vala -+++ b/src/contacts-editor-property.vala -@@ -16,35 +16,32 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; -- - - public class Contacts.BirthdayEditor : Gtk.Dialog { -- private SpinButton day_spin; -- private ComboBoxText month_combo; -- private SpinButton year_spin; -+ private Gtk.SpinButton day_spin; -+ private Gtk.ComboBoxText month_combo; -+ private Gtk.SpinButton year_spin; - public bool is_set { get; set; default = false; } - - public signal void changed (); - delegate void AdjustingDateFn (); - -- public DateTime get_birthday () { -- return new DateTime.local (year_spin.get_value_as_int (), -- month_combo.get_active () + 1, -- day_spin.get_value_as_int (), -- 0, 0, 0).to_utc (); -+ public GLib.DateTime get_birthday () { -+ return new GLib.DateTime.local (year_spin.get_value_as_int (), -+ month_combo.get_active () + 1, -+ day_spin.get_value_as_int (), -+ 0, 0, 0).to_utc (); - } - -- public BirthdayEditor (Window window, DateTime birthday) { -+ public BirthdayEditor (Gtk.Window window, DateTime birthday) { - Object (transient_for: window, use_header_bar: 1); -- day_spin = new SpinButton.with_range (1.0, 31.0, 1.0); -+ day_spin = new Gtk.SpinButton.with_range (1.0, 31.0, 1.0); - day_spin.set_digits (0); - day_spin.numeric = true; - day_spin.set_value ((double)birthday.to_local ().get_day_of_month ()); - -- month_combo = new ComboBoxText (); -+ month_combo = new Gtk.ComboBoxText (); - var january = new DateTime.local (1, 1, 1, 1, 1, 1); - for (int i = 0; i < 12; i++) { - var month = january.add_months (i); -@@ -53,47 +50,47 @@ public class Contacts.BirthdayEditor : Gtk.Dialog { - month_combo.set_active (birthday.to_local ().get_month () - 1); - month_combo.hexpand = true; - -- year_spin = new SpinButton.with_range (1800, 3000, 1); -+ year_spin = new Gtk.SpinButton.with_range (1800, 3000, 1); - year_spin.set_digits (0); - year_spin.numeric = true; - year_spin.set_value ((double)birthday.to_local ().get_year ()); - - // Create grid and labels -- Box box = new Box (Orientation.VERTICAL, 12); -- Grid grid = new Grid (); -+ var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 12); -+ var grid = new Gtk.Grid (); - grid.set_column_spacing (12); - grid.set_row_spacing (12); -- Label day = new Label(_("Day")); -- day.set_halign (Align.END); -+ Gtk.Label day = new Gtk.Label(_("Day")); -+ day.set_halign (Gtk.Align.END); - grid.attach (day, 0, 0); - grid.attach (day_spin, 1, 0); -- Label month = new Label(_("Month")); -- month.set_halign (Align.END); -+ Gtk.Label month = new Gtk.Label(_("Month")); -+ month.set_halign (Gtk.Align.END); - grid.attach (month, 0, 1); - grid.attach (month_combo, 1, 1); -- Label year = new Label(_("Year")); -- year.set_halign (Align.END); -+ Gtk.Label year = new Gtk.Label(_("Year")); -+ year.set_halign (Gtk.Align.END); - grid.attach (year, 0, 2); - grid.attach (year_spin, 1, 2); - box.pack_start (grid); - - var content = this.get_content_area (); -- content.set_valign (Align.CENTER); -+ content.set_valign (Gtk.Align.CENTER); - content.add (box); - - this.title = _("Change Address Book"); -- add_buttons (_("Set"), ResponseType.OK, -- _("Cancel"), ResponseType.CANCEL, -- null); -- var ok_button = this.get_widget_for_response (ResponseType.OK); -+ add_buttons (_("Set"), Gtk.ResponseType.OK, -+ _("Cancel"), Gtk.ResponseType.CANCEL, -+ null); -+ var ok_button = this.get_widget_for_response (Gtk.ResponseType.OK); - ok_button.get_style_context ().add_class ("suggested-action"); - this.response.connect ((id) => { - switch (id) { -- case ResponseType.OK: -+ case Gtk.ResponseType.OK: - this.is_set = true; - changed (); - break; -- case ResponseType.CANCEL: -+ case Gtk.ResponseType.CANCEL: - break; - } - this.destroy (); -@@ -130,8 +127,8 @@ public class Contacts.BirthdayEditor : Gtk.Dialog { - } - } - --public class Contacts.AddressEditor : Box { -- private Entry? entries[7]; /* must be the number of elements in postal_element_props */ -+public class Contacts.AddressEditor : Gtk.Box { -+ private Gtk.Entry? entries[7]; /* must be the number of elements in postal_element_props */ - - private const string[] postal_element_props = {"street", "extension", "locality", "region", "postal_code", "po_box", "country"}; - private static string[] postal_element_names = {_("Street"), _("Extension"), _("City"), _("State/Province"), _("Zip/Postal Code"), _("PO box"), _("Country")}; -@@ -140,13 +137,13 @@ public class Contacts.AddressEditor : Box { - - public AddressEditor (PostalAddressFieldDetails details) { - set_hexpand (true); -- set_orientation (Orientation.VERTICAL); -+ set_orientation (Gtk.Orientation.VERTICAL); - - for (int i = 0; i < entries.length; i++) { - string postal_part; - details.value.get (AddressEditor.postal_element_props[i], out postal_part); - -- entries[i] = new Entry (); -+ entries[i] = new Gtk.Entry (); - entries[i].set_hexpand (true); - entries[i].set ("placeholder-text", AddressEditor.postal_element_names[i]); - -@@ -179,23 +176,23 @@ public class Contacts.AddressEditor : Box { - } - } - --public class Contacts.EditorPropertyRow : ListBoxRow { -+public class Contacts.EditorPropertyRow : Gtk.ListBoxRow { - public bool is_empty { get; set; default = true; } - public bool is_removed { get; set; default = false; } - public string ptype { get; private set; } -- public Box container; -- public Box header; -- public Revealer revealer; -+ public Gtk.Box container; -+ public Gtk.Box header; -+ public Gtk.Revealer revealer; - - construct { -- this.revealer = new Revealer (); -+ this.revealer = new Gtk.Revealer (); - //TODO: bind orientation property to available space -- var box = new Box (Orientation.VERTICAL, 6); -- box.set_valign (Align.START); -+ var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 6); -+ box.set_valign (Gtk.Align.START); - box.set_can_focus (false); -- this.container = new Box (Orientation.HORIZONTAL, 6); -+ this.container = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); - this.container.set_can_focus (false); -- this.header = new Box (Orientation.HORIZONTAL, 6); -+ this.header = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); - this.header.set_can_focus (false); - box.pack_start (this.header); - box.pack_end (this.container); -@@ -240,16 +237,19 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - } - - public void add_base_label (string label) { -- var title_label = new Label (label); -+ var title_label = new Gtk.Label (label); - title_label.set_hexpand (false); -- title_label.set_halign (Align.START); -+ title_label.set_halign (Gtk.Align.START); - title_label.margin_end = 6; - this.header.pack_start (title_label); - } - -- public void add_base_combo (Set details_set, string label, TypeSet combo_type, AbstractFieldDetails details) { -- var title_label = new Label (label); -- title_label.set_halign (Align.START); -+ public void add_base_combo (Gee.Set details_set, -+ string label, -+ TypeSet combo_type, -+ AbstractFieldDetails details) { -+ var title_label = new Gtk.Label (label); -+ title_label.set_halign (Gtk.Align.START); - this.header.pack_start (title_label); - TypeCombo combo = new TypeCombo (combo_type); - combo.set_hexpand (false); -@@ -265,11 +265,11 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - } - - //FIXME: create only one add_base_entry -- public void add_base_entry_email (Set details_set, -+ public void add_base_entry_email (Gee.Set details_set, - EmailFieldDetails details, - string placeholder) { -- var value_entry = new Entry (); -- value_entry.set_input_purpose (InputPurpose.EMAIL); -+ var value_entry = new Gtk.Entry (); -+ value_entry.set_input_purpose (Gtk.InputPurpose.EMAIL); - value_entry.placeholder_text = placeholder; - value_entry.set_text (details.value); - value_entry.set_hexpand (true); -@@ -286,11 +286,11 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - }); - } - -- public void add_base_entry_phone (Set details_set, -+ public void add_base_entry_phone (Gee.Set details_set, - PhoneFieldDetails details, - string placeholder) { -- var value_entry = new Entry (); -- value_entry.set_input_purpose (InputPurpose.PHONE); -+ var value_entry = new Gtk.Entry (); -+ value_entry.set_input_purpose (Gtk.InputPurpose.PHONE); - value_entry.placeholder_text = placeholder; - value_entry.set_text (details.value); - value_entry.set_hexpand (true); -@@ -308,12 +308,12 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - }); - } - -- public void add_base_entry_url (Set details_set, -+ public void add_base_entry_url (Gee.Set details_set, - UrlFieldDetails details, - string placeholder) { -- var value_entry = new Entry (); -+ var value_entry = new Gtk.Entry (); - value_entry.placeholder_text = placeholder; -- value_entry.set_input_purpose (InputPurpose.URL); -+ value_entry.set_input_purpose (Gtk.InputPurpose.URL); - value_entry.set_text (details.value); - value_entry.set_hexpand (true); - this.container.pack_start (value_entry); -@@ -330,11 +330,11 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - }); - } - -- public void add_base_delete (Set details_set, -+ public void add_base_delete (Gee.Set details_set, - AbstractFieldDetails details) { -- var delete_button = new Button.from_icon_name ("user-trash-symbolic"); -+ var delete_button = new Gtk.Button.from_icon_name ("user-trash-symbolic"); - delete_button.get_accessible ().set_name (_("Delete field")); -- delete_button.set_valign (Align.START); -+ delete_button.set_valign (Gtk.Align.START); - this.bind_property ("is-empty", delete_button, "sensitive", BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN); - this.container.pack_end (delete_button, false); - -@@ -351,7 +351,7 @@ public class Contacts.EditorPropertyRow : ListBoxRow { - * A widget representing a property of a persona in the editor {@link Contact}. - * We can have more then one property in one properity e.g. Emails therefore we need to return a List - */ --public class Contacts.EditorProperty : ArrayList { -+public class Contacts.EditorProperty : Gee.ArrayList { - public bool writeable { get; private set; default = false; } - - public EditorProperty (Persona persona, string property_name, bool only_new = false) { -@@ -439,9 +439,10 @@ public class Contacts.EditorProperty : ArrayList { - } - } - -- private EditorPropertyRow create_for_email (Set set, EmailFieldDetails? details = null) { -+ private EditorPropertyRow create_for_email (Gee.Set set, -+ EmailFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "PERSONAL"; - var new_details = new EmailFieldDetails ("", parameters); - set.add(new_details); -@@ -456,9 +457,10 @@ public class Contacts.EditorProperty : ArrayList { - return box; - } - -- private EditorPropertyRow create_for_phone (Set set, PhoneFieldDetails? details = null) { -+ private EditorPropertyRow create_for_phone (Gee.Set set, -+ PhoneFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "CELL"; - var new_details = new PhoneFieldDetails ("", parameters); - set.add(new_details); -@@ -475,9 +477,10 @@ public class Contacts.EditorProperty : ArrayList { - } - - // TODO: add support for different types of urls -- private EditorPropertyRow create_for_url (Set set, UrlFieldDetails? details = null) { -+ private EditorPropertyRow create_for_url (Gee.Set set, -+ UrlFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "PERSONAL"; - var new_details = new UrlFieldDetails ("", parameters); - set.add(new_details); -@@ -497,7 +500,7 @@ public class Contacts.EditorProperty : ArrayList { - var box = new EditorPropertyRow ("nickname"); - box.add_base_label (_("Nickname")); - -- var value_entry = new Entry (); -+ var value_entry = new Gtk.Entry (); - value_entry.set_text (details.nickname); - value_entry.set_hexpand (true); - box.container.pack_start (value_entry); -@@ -513,10 +516,10 @@ public class Contacts.EditorProperty : ArrayList { - } - - // TODO: support different types of nodes -- private EditorPropertyRow create_for_note (Set details_set, -+ private EditorPropertyRow create_for_note (Gee.Set details_set, - NoteFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "PERSONAL"; - var new_details = new NoteFieldDetails ("", parameters); - details_set.add(new_details); -@@ -525,10 +528,10 @@ public class Contacts.EditorProperty : ArrayList { - var box = new EditorPropertyRow ("notes"); - box.add_base_label (_("Note")); - -- var sw = new ScrolledWindow (null, null); -- sw.set_shadow_type (ShadowType.OUT); -+ var sw = new Gtk.ScrolledWindow (null, null); -+ sw.set_shadow_type (Gtk.ShadowType.OUT); - sw.set_size_request (-1, 100); -- var value_text = new TextView (); -+ var value_text = new Gtk.TextView (); - value_text.get_buffer ().set_text (details.value); - value_text.set_hexpand (true); - sw.add (value_text); -@@ -537,7 +540,7 @@ public class Contacts.EditorProperty : ArrayList { - box.add_base_delete (details_set, details); - - value_text.get_buffer ().changed.connect (() => { -- TextIter start, end; -+ Gtk.TextIter start, end; - value_text.get_buffer ().get_start_iter (out start); - value_text.get_buffer ().get_end_iter (out end); - details.value = value_text.get_buffer ().get_text (start, end, true); -@@ -562,11 +565,11 @@ public class Contacts.EditorProperty : ArrayList { - var box = new EditorPropertyRow ("birthday"); - box.add_base_label (_("Birthday")); - -- var button = new Button.with_label (_("Set Birthday")); -+ var button = new Gtk.Button.with_label (_("Set Birthday")); - box.container.pack_start (button); - - button.clicked.connect (() => { -- Window parent_window = button.get_toplevel () as Window; -+ var parent_window = button.get_toplevel () as Gtk.Window; - if (parent_window != null) { - var dialog = new BirthdayEditor (parent_window, date); - -@@ -583,9 +586,9 @@ public class Contacts.EditorProperty : ArrayList { - - box.is_empty = details.birthday == null; - -- var delete_button = new Button.from_icon_name ("user-trash-symbolic"); -+ var delete_button = new Gtk.Button.from_icon_name ("user-trash-symbolic"); - delete_button.get_accessible ().set_name (_("Delete field")); -- delete_button.set_valign (Align.START); -+ delete_button.set_valign (Gtk.Align.START); - box.bind_property ("is-empty", delete_button, "sensitive", BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN); - box.container.pack_end (delete_button, false); - -@@ -600,10 +603,10 @@ public class Contacts.EditorProperty : ArrayList { - return box; - } - -- private EditorPropertyRow create_for_address (Set details_set, -+ private EditorPropertyRow create_for_address (Gee.Set details_set, - PostalAddressFieldDetails? details = null) { - if (details == null) { -- var parameters = new HashMultiMap (); -+ var parameters = new Gee.HashMultiMap (); - parameters["type"] = "HOME"; - var address = new PostalAddress(null, null, null, null, null, null, null, null, null); - var new_details = new PostalAddressFieldDetails (address, parameters); -diff --git a/src/contacts-fake-persona-store.vala b/src/contacts-fake-persona-store.vala -index 7a5d458..b7127bc 100644 ---- a/src/contacts-fake-persona-store.vala -+++ b/src/contacts-fake-persona-store.vala -@@ -16,7 +16,6 @@ - */ - - using Folks; --using Gee; - - /** - * A "dummy" store which is used to have an equivalent of a PersonaStore for a -@@ -29,18 +28,18 @@ public class Contacts.FakePersonaStore : PersonaStore { - _the_store = new FakePersonaStore (); - return _the_store; - } -- private HashMap _personas; -- private Map _personas_ro; -+ private Gee.HashMap _personas; -+ private Gee.Map _personas_ro; - - public override string type_id { get { return "fake"; } } - - public FakePersonaStore () { - Object (id: "uri", display_name: "fake store"); -- this._personas = new HashMap (); -+ this._personas = new Gee.HashMap (); - this._personas_ro = this._personas.read_only_view; - } - -- public override Map personas { -+ public override Gee.Map personas { - get { return this._personas_ro; } - } - -@@ -71,16 +70,16 @@ public class Contacts.FakePersonaStore : PersonaStore { - const string BACKEND_NAME = "fake-store"; - - public class Contacts.FakePersona : Persona, --AvatarDetails, --BirthdayDetails, --EmailDetails, --ImDetails, --NameDetails, --NoteDetails, --PhoneDetails, --UrlDetails, --PostalAddressDetails --{ -+ AvatarDetails, -+ BirthdayDetails, -+ EmailDetails, -+ ImDetails, -+ NameDetails, -+ NoteDetails, -+ PhoneDetails, -+ UrlDetails, -+ PostalAddressDetails { -+ - private HashTable properties; - // Keep track of the persona in the actual store - public weak Persona real_persona { get; set; default = null; } -@@ -97,10 +96,10 @@ PostalAddressDetails - } - } - -- private ArrayList _changed_properties; -+ private Gee.ArrayList _changed_properties; - - construct { -- this._changed_properties = new ArrayList (); -+ this._changed_properties = new Gee.ArrayList (); - } - - public LoadableIcon? avatar { -@@ -149,72 +148,72 @@ PostalAddressDetails - set {} - } - -- public Set phone_numbers { -+ public Gee.Set phone_numbers { - get { - unowned Value? value = this.properties.get ("phone-numbers"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = GLib.Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("phone-numbers"); }); - this.properties.set ("phone-numbers", new_value); - value = this.properties.get ("phone-numbers"); - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("phone-numbers", value); - } - } - -- public Set urls { -+ public Gee.Set urls { - get { - unowned Value? value = this.properties.get ("urls"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("urls"); }); - this.properties.set ("urls", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("urls", value); - } - } - -- public Set postal_addresses { -+ public Gee.Set postal_addresses { - get { - unowned Value? value = this.properties.get ("postal-addresses"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("postal-addresses"); }); - this.properties.set ("postal-addresses", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("postal-addresses", value); - } - } - -- public Set notes { -+ public Gee.Set notes { - get { - unowned Value? value = this.properties.get ("notes"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - new_value.set_object (set); - set.changed.connect (() => { notify_property ("notes"); }); - this.properties.set ("notes", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("notes", value); -@@ -238,36 +237,36 @@ PostalAddressDetails - set {} - } - -- public MultiMap im_addresses { -+ public Gee.MultiMap im_addresses { - get { - unowned Value? value = this.properties.get ("im-addresses"); - if (value == null) { -- var new_value = Value (typeof (MultiMap)); -+ var new_value = Value (typeof (Gee.MultiMap)); - var set = new FakeHashMultiMap (); - new_value.set_object (set); - this.properties.set ("im-addresses", new_value); - set.changed.connect (() => { notify_property ("im-addresses"); }); - value = new_value; - } -- return (MultiMap) value; -+ return (Gee.MultiMap) value; - } - set { - this.properties.set ("im-addresses", value); - } - } - -- public Set email_addresses { -+ public Gee.Set email_addresses { - get { - unowned Value? value = this.properties.get ("email-addresses"); - if (value == null) { -- var new_value = Value (typeof (Set)); -+ var new_value = Value (typeof (Gee.Set)); - var set = new FakeHashSet (); - set.changed.connect (() => { notify_property ("email-addresses"); }); - new_value.set_object (set); - this.properties.set ("email-addresses", new_value); - value = new_value; - } -- return (Set) value; -+ return (Gee.Set) value; - } - set { - this.properties.set ("email-addresses", value); -@@ -422,8 +421,8 @@ PostalAddressDetails - yield ((BirthdayDetails) persona).change_calendar_event_id ((string?) new_value); - break; - case "email-addresses": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new EmailFieldDetails (e.value, e.parameters)); -@@ -437,13 +436,13 @@ PostalAddressDetails - yield ((GenderDetails) persona).change_gender ((Gender) new_value); - break; - case "groups": -- yield ((GroupDetails) persona).change_groups ((Set) new_value); -+ yield ((GroupDetails) persona).change_groups ((Gee.Set) new_value); - break; - case "im-addresses": -- yield ((ImDetails) persona).change_im_addresses ((MultiMap) new_value); -+ yield ((ImDetails) persona).change_im_addresses ((Gee.MultiMap) new_value); - break; - case "local-ids": -- yield ((LocalIdDetails) persona).change_local_ids ((Set) new_value); -+ yield ((LocalIdDetails) persona).change_local_ids ((Gee.Set) new_value); - break; - case "structured-name": - yield ((NameDetails) persona).change_structured_name ((StructuredName?) new_value); -@@ -455,8 +454,8 @@ PostalAddressDetails - yield ((NameDetails) persona).change_nickname ((string) new_value); - break; - case "notes": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new NoteFieldDetails (e.value, e.parameters)); -@@ -464,8 +463,8 @@ PostalAddressDetails - yield ((NoteDetails) persona).change_notes (copy); - break; - case "phone-numbers": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new PhoneFieldDetails (e.value, e.parameters)); -@@ -473,8 +472,8 @@ PostalAddressDetails - yield ((PhoneDetails) persona).change_phone_numbers (copy); - break; - case "postal-addresses": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && !e.value.is_empty ()) - copy.add (new PostalAddressFieldDetails (e.value, e.parameters)); -@@ -482,11 +481,11 @@ PostalAddressDetails - yield ((PostalAddressDetails) persona).change_postal_addresses (copy); - break; - case "roles": -- yield ((RoleDetails) persona).change_roles ((Set) new_value); -+ yield ((RoleDetails) persona).change_roles ((Gee.Set) new_value); - break; - case "urls": -- var original = (Set) new_value; -- var copy = new HashSet (); -+ var original = (Gee.Set) new_value; -+ var copy = new Gee.HashSet (); - foreach (var e in original) { - if (e.value != null && e.value != "") - copy.add (new UrlFieldDetails (e.value, e.parameters)); -@@ -494,7 +493,7 @@ PostalAddressDetails - yield ((UrlDetails) persona).change_urls (copy); - break; - case "web-service-addresses": -- yield ((WebServiceDetails) persona).change_web_service_addresses ((MultiMap) new_value); -+ yield ((WebServiceDetails) persona).change_web_service_addresses ((Gee.MultiMap) new_value); - break; - default: - critical ("Unknown property '%s' in Contact.set_persona_property().", property_name); -@@ -509,7 +508,7 @@ PostalAddressDetails - public class Contacts.FakeIndividual : Individual { - public weak Individual real_individual { get; set; default = null; } - public weak FakePersona primary_persona { get; set; default = null; } -- public FakeIndividual (Set? personas) { -+ public FakeIndividual (Gee.Set? personas) { - base (personas); - foreach (var p in personas) { - // Keep track of the main persona -@@ -519,7 +518,7 @@ public class Contacts.FakeIndividual : Individual { - } - - public FakeIndividual.from_real (Individual individual) { -- var fake_personas = new HashSet (); -+ var fake_personas = new Gee.HashSet (); - foreach (var p in individual.personas) { - var fake_p = new FakePersona.from_real (p); - // Keep track of the main persona -diff --git a/src/contacts-im-service.vala b/src/contacts-im-service.vala -index d97b7fe..aceef3f 100644 ---- a/src/contacts-im-service.vala -+++ b/src/contacts-im-service.vala -@@ -15,9 +15,7 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - /** - * ImService is a helper struct that maps a service identifier to the -@@ -59,8 +57,8 @@ public struct Contacts.ImService { - /** - * Returns the display name for the given IM service in a nicely presented way. - */ -- public static string get_display_name (string service_name) { -- foreach (var d in data) -+ public static unowned string get_display_name (string service_name) { -+ foreach (unowned ImService d in data) - if (d.service_name == service_name) - return dgettext (Config.GETTEXT_PACKAGE, d.display_name); - -diff --git a/src/contacts-in-app-notification.vala b/src/contacts-in-app-notification.vala -index dc5d035..25857e2 100644 ---- a/src/contacts-in-app-notification.vala -+++ b/src/contacts-in-app-notification.vala -@@ -15,19 +15,17 @@ - * along with this program. If not, see . - */ - --using Gtk; -- - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-in-app-notification.ui")] --public class Contacts.InAppNotification : Revealer { -+public class Contacts.InAppNotification : Gtk.Revealer { - // Close the in-app notification after 5 seconds by default. - private const uint DEFAULT_KEEPALIVE = 5; - - [GtkChild] -- private Grid grid; -+ private Gtk.Grid grid; - - [GtkChild] -- private Label label; -- public Label message_label { -+ private Gtk.Label label; -+ public Gtk.Label message_label { - get { return this.label; } - } - -@@ -39,7 +37,7 @@ public class Contacts.InAppNotification : Revealer { - /** - * Creates an in-app notification with the given message, and an accompanying button if not null. - */ -- public InAppNotification (string message, Button? button = null) { -+ public InAppNotification (string message, Gtk.Button? button = null) { - this.label.label = message; - - if (button != null) { -@@ -73,7 +71,7 @@ public class Contacts.InAppNotification : Revealer { - } - - [GtkCallback] -- private void on_close_button_clicked(Button close_button) { -+ private void on_close_button_clicked(Gtk.Button close_button) { - dismiss(); - } - } -diff --git a/src/contacts-link-suggestion-grid.vala b/src/contacts-link-suggestion-grid.vala -index 99846b1..cad38dc 100644 ---- a/src/contacts-link-suggestion-grid.vala -+++ b/src/contacts-link-suggestion-grid.vala -@@ -15,9 +15,7 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; --using Gee; - - /** - * The LinkSuggestionGrid is show at the bottom of the ContactPane. -@@ -25,7 +23,7 @@ using Gee; - * and another (hopefully) similar contact. - */ - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-link-suggestion-grid.ui")] --public class Contacts.LinkSuggestionGrid : Grid { -+public class Contacts.LinkSuggestionGrid : Gtk.Grid { - private const int AVATAR_SIZE = 54; - - [GtkChild] -diff --git a/src/contacts-linked-personas-dialog.vala b/src/contacts-linked-personas-dialog.vala -index 8ae9413..9c26b4d 100644 ---- a/src/contacts-linked-personas-dialog.vala -+++ b/src/contacts-linked-personas-dialog.vala -@@ -15,21 +15,20 @@ - * along with this program. If not, see . - */ - --using Gtk; - using Folks; - - [GtkTemplate (ui = "/org/gnome/Contacts/ui/contacts-linked-personas-dialog.ui")] --public class Contacts.LinkedPersonasDialog : Dialog { -+public class Contacts.LinkedPersonasDialog : Gtk.Dialog { - private const int AVATAR_SIZE = 54; - - [GtkChild] -- private ListBox linked_accounts_view; -+ private Gtk.ListBox linked_accounts_view; - - private Individual individual; - - public bool any_unlinked = false; - -- public LinkedPersonasDialog (Window main_win, Store store, Individual individual) { -+ public LinkedPersonasDialog (Gtk.Window main_win, Store store, Individual individual) { - Object ( - use_header_bar: 1, - transient_for: main_win, -@@ -48,7 +47,7 @@ public class Contacts.LinkedPersonasDialog : Dialog { - continue; - } - -- var row_grid = new Grid (); -+ var row_grid = new Gtk.Grid (); - - var image_frame = new Avatar (AVATAR_SIZE, individual); - image_frame.set_hexpand (false); -@@ -56,24 +55,24 @@ public class Contacts.LinkedPersonasDialog : Dialog { - image_frame.margin_end = 12; - row_grid.attach (image_frame, 0, 0, 1, 2); - -- var display_name = new Label (""); -- display_name.set_halign (Align.START); -- display_name.set_valign (Align.END); -+ var display_name = new Gtk.Label (""); -+ display_name.set_halign (Gtk.Align.START); -+ display_name.set_valign (Gtk.Align.END); - display_name.set_hexpand (true); - display_name.set_markup (Markup.printf_escaped ("%s", p.display_id)); - - row_grid.attach (display_name, 1, 0, 1, 1); - -- var store_name = new Label (Contacts.Utils.format_persona_store_name_for_contact (p)); -- store_name.set_halign (Align.START); -- store_name.set_valign (Align.START); -+ var store_name = new Gtk.Label (Contacts.Utils.format_persona_store_name_for_contact (p)); -+ store_name.set_halign (Gtk.Align.START); -+ store_name.set_valign (Gtk.Align.START); - store_name.set_hexpand (true); - store_name.get_style_context ().add_class ("dim-label"); - row_grid.attach (store_name, 1, 1, 1, 1); - -- var button = new Button.with_label (_("Unlink")); -+ var button = new Gtk.Button.with_label (_("Unlink")); - button.margin_end = 6; -- button.set_valign (Align.CENTER); -+ button.set_valign (Gtk.Align.CENTER); - button.get_child ().margin = 1; - row_grid.attach (button, 2, 0, 1, 2); - -diff --git a/src/contacts-linking.vala b/src/contacts-linking.vala -index 4b8f7fc..010cc91 100644 ---- a/src/contacts-linking.vala -+++ b/src/contacts-linking.vala -@@ -16,24 +16,23 @@ - */ - - using Folks; --using Gee; - - namespace Contacts { - public class LinkOperation : Object { - private weak Store store; -- private HashSet> personas_to_link; -+ private Gee.HashSet> personas_to_link; - private bool finished { get; set; default = false; } - - public LinkOperation(Store store) { - this.store = store; -- this.personas_to_link = new HashSet> (); -+ this.personas_to_link = new Gee.HashSet> (); - } - - // Link individuals -- public async void execute (LinkedList individuals) { -- var personas_to_link = new HashSet (); -+ public async void execute (Gee.LinkedList individuals) { -+ var personas_to_link = new Gee.HashSet (); - foreach (var i in individuals) { -- var saved_personas = new HashSet (); -+ var saved_personas = new Gee.HashSet (); - foreach (var persona in i.personas) { - personas_to_link.add (persona); - saved_personas.add (persona); -@@ -73,11 +72,11 @@ namespace Contacts { - public class UnLinkOperation : Object { - private weak Store store; - -- private HashSet personas; -+ private Gee.HashSet