[gnome-contacts] Avatar: load asynchronously.
- From: Niels De Graef <nielsdg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-contacts] Avatar: load asynchronously.
- Date: Sat, 20 Jan 2018 15:26:08 +0000 (UTC)
commit 5101ab54f1cadb94132f5241cb6b5df9f02d115c
Author: Niels De Graef <nielsdegraef gmail com>
Date: Sat Jan 20 16:24:24 2018 +0100
Avatar: load asynchronously.
This fixes [bug 657962](https://bugzilla.gnome.org/show_bug.cgi?id=657962).
src/contacts-avatar-selector.vala | 4 ++--
src/contacts-avatar.vala | 14 ++++++--------
src/contacts-contact-editor.vala | 4 ++--
src/contacts-contact-list.vala | 2 +-
src/contacts-contact-sheet.vala | 4 ++--
src/contacts-link-suggestion-grid.vala | 2 +-
src/contacts-linked-accounts-dialog.vala | 2 +-
7 files changed, 15 insertions(+), 17 deletions(-)
---
diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala
index 8967ce9..7c147dd 100644
--- a/src/contacts-avatar-selector.vala
+++ b/src/contacts-avatar-selector.vala
@@ -85,10 +85,10 @@ public class Contacts.AvatarSelector : Dialog {
this.current_avatar = new Avatar (MAIN_SIZE);
if (contact != null) {
contact.keep_widget_uptodate (this.current_avatar, (w) => {
- (w as Avatar).set_image (contact.individual, contact);
+ (w as Avatar).set_image.begin (contact.individual, contact);
});
} else {
- this.current_avatar.set_image (null, null);
+ this.current_avatar.set_image.begin (null, null);
}
this.current_avatar.set_hexpand (false);
this.current_avatar.show ();
diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala
index 2b6b623..3d62747 100644
--- a/src/contacts-avatar.vala
+++ b/src/contacts-avatar.vala
@@ -25,8 +25,8 @@ using Gee;
*/
public class Contacts.Avatar : DrawingArea {
private int size;
- private Gdk.Pixbuf? pixbuf;
- private Contact? contact;
+ private Gdk.Pixbuf? pixbuf = null;
+ private Contact? contact = null;
// The background color used in case of a fallback avatar
private Gdk.RGBA? bg_color = null;
@@ -47,21 +47,19 @@ public class Contacts.Avatar : DrawingArea {
queue_draw ();
}
- public void set_image (AvatarDetails? details, Contact? contact = null) {
+ public async void set_image (AvatarDetails? details, Contact? contact = null) {
this.contact = contact;
// FIXME listen for changes in the Individual's avatar
- Gdk.Pixbuf? a_pixbuf = null;
if (details != null && details.avatar != null) {
try {
- var stream = details.avatar.load (size, null);
- a_pixbuf = new Gdk.Pixbuf.from_stream_at_scale (stream, size, size, true);
+ var stream = yield details.avatar.load_async (size, null);
+ this.pixbuf = yield new Gdk.Pixbuf.from_stream_at_scale_async (stream, size, size, true);
+ queue_draw ();
} catch {
}
}
-
- set_pixbuf (a_pixbuf);
}
public override bool draw (Cairo.Context cr) {
diff --git a/src/contacts-contact-editor.vala b/src/contacts-contact-editor.vala
index 78bf5fc..0deb238 100644
--- a/src/contacts-contact-editor.vala
+++ b/src/contacts-contact-editor.vala
@@ -951,10 +951,10 @@ public class Contacts.ContactEditor : Grid {
if (this.contact != null) {
this.contact.keep_widget_uptodate (this.avatar, (w) => {
- this.avatar.set_image (this.contact.individual, this.contact);
+ this.avatar.set_image.begin (this.contact.individual, this.contact);
});
} else {
- this.avatar.set_image (null, null);
+ this.avatar.set_image.begin (null, null);
}
this.container_grid.attach (button, 0, 0, 1, 3);
diff --git a/src/contacts-contact-list.vala b/src/contacts-contact-list.vala
index 6bc2a25..d692b2c 100644
--- a/src/contacts-contact-list.vala
+++ b/src/contacts-contact-list.vala
@@ -67,7 +67,7 @@ public class Contacts.ContactList : ListBox {
// Update widgets
this.label.set_text (this.contact.display_name);
- this.avatar.set_image (this.contact.individual, this.contact);
+ this.avatar.set_image.begin (this.contact.individual, this.contact);
}
}
diff --git a/src/contacts-contact-sheet.vala b/src/contacts-contact-sheet.vala
index ed8934e..961005a 100644
--- a/src/contacts-contact-sheet.vala
+++ b/src/contacts-contact-sheet.vala
@@ -100,8 +100,8 @@ public class Contacts.ContactSheet : Grid {
image_frame.set_vexpand (false);
image_frame.set_valign (Align.START);
c.keep_widget_uptodate (image_frame, (w) => {
- (w as Avatar).set_image (c.individual, c);
- });
+ (w as Avatar).set_image.begin (c.individual, c);
+ });
attach (image_frame, 0, 0, 1, 3);
var name_label = new Label (null);
diff --git a/src/contacts-link-suggestion-grid.vala b/src/contacts-link-suggestion-grid.vala
index 88cc551..54f619e 100644
--- a/src/contacts-link-suggestion-grid.vala
+++ b/src/contacts-link-suggestion-grid.vala
@@ -47,7 +47,7 @@ public class Contacts.LinkSuggestionGrid : Grid {
image_frame.hexpand = false;
image_frame.margin = 12;
contact.keep_widget_uptodate (image_frame, (w) => {
- (w as Avatar).set_image (contact.individual, contact);
+ (w as Avatar).set_image.begin (contact.individual, contact);
});
image_frame.show ();
attach (image_frame, 0, 0, 1, 2);
diff --git a/src/contacts-linked-accounts-dialog.vala b/src/contacts-linked-accounts-dialog.vala
index b6b377f..931ec33 100644
--- a/src/contacts-linked-accounts-dialog.vala
+++ b/src/contacts-linked-accounts-dialog.vala
@@ -85,7 +85,7 @@ public class Contacts.LinkedAccountsDialog : Dialog {
image_frame.margin = 6;
image_frame.margin_end = 12;
contact.keep_widget_uptodate (image_frame, (w) => {
- (w as Avatar).set_image (contact.individual, contact);
+ (w as Avatar).set_image.begin (contact.individual, contact);
});
row_grid.attach (image_frame, 0, 0, 1, 2);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]