[fractal/fractal-next] avatar: Do not load if size is 0
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] avatar: Do not load if size is 0
- Date: Wed, 2 Feb 2022 09:54:05 +0000 (UTC)
commit 066daa26359881da8eaba72ae88cdee72815a1dd
Author: Kévin Commaille <zecakeh tedomum fr>
Date: Tue Feb 1 18:03:29 2022 +0100
avatar: Do not load if size is 0
Fixes a crash in big rooms because all avatars are loaded at once
src/components/avatar.rs | 2 +-
src/session/avatar.rs | 25 +++++++++++--------------
2 files changed, 12 insertions(+), 15 deletions(-)
---
diff --git a/src/components/avatar.rs b/src/components/avatar.rs
index 90dce0d1b..3458e7089 100644
--- a/src/components/avatar.rs
+++ b/src/components/avatar.rs
@@ -138,7 +138,7 @@ impl Avatar {
fn request_custom_avatar(&self) {
if let Some(item) = &*self.imp().item.borrow() {
// FIXME: update on size changes
- item.set_needed_size(self.size());
+ item.set_needed_size(self.size() as u32);
}
}
}
diff --git a/src/session/avatar.rs b/src/session/avatar.rs
index 862214fae..c96cd1d29 100644
--- a/src/session/avatar.rs
+++ b/src/session/avatar.rs
@@ -26,7 +26,7 @@ mod imp {
#[derive(Debug, Default)]
pub struct Avatar {
pub image: RefCell<Option<gdk::Paintable>>,
- pub needed_size: Cell<i32>,
+ pub needed_size: Cell<u32>,
pub url: RefCell<Option<Box<MxcUri>>>,
pub display_name: RefCell<Option<String>>,
pub session: OnceCell<WeakRef<Session>>,
@@ -50,13 +50,13 @@ mod imp {
gdk::Paintable::static_type(),
glib::ParamFlags::READABLE | glib::ParamFlags::EXPLICIT_NOTIFY,
),
- glib::ParamSpecInt::new(
+ glib::ParamSpecUInt::new(
"needed-size",
"Needed Size",
- "The size needed of the user defined image. If -1 no image will be loaded",
- -1,
- i32::MAX,
- -1,
+ "The size needed of the user defined image. If 0 no image will be loaded",
+ 0,
+ u32::MAX,
+ 0,
glib::ParamFlags::READWRITE | glib::ParamFlags::EXPLICIT_NOTIFY,
),
glib::ParamSpecString::new(
@@ -157,14 +157,13 @@ impl Avatar {
fn load(&self) {
// Don't do anything here if we don't need the avatar
- if self.needed_size() < 0 {
+ if self.needed_size() == 0 {
return;
}
- let needed_size = self.needed_size() as u16;
-
if let Some(url) = self.url() {
let client = self.session().client();
+ let needed_size = self.needed_size();
let request = MediaRequest {
media_type: MediaType::Uri(url),
format: MediaFormat::Thumbnail(MediaThumbnailSize {
@@ -204,22 +203,20 @@ impl Avatar {
/// Set the needed size.
/// Only the biggest size will be stored
- pub fn set_needed_size(&self, size: i32) {
+ pub fn set_needed_size(&self, size: u32) {
let priv_ = self.imp();
if priv_.needed_size.get() < size {
priv_.needed_size.set(size);
- if priv_.needed_size.get() > -1 {
- self.load();
- }
+ self.load();
}
self.notify("needed-size");
}
/// Get the biggest needed size
- pub fn needed_size(&self) -> i32 {
+ pub fn needed_size(&self) -> u32 {
self.imp().needed_size.get()
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]