diff --git a/data/resources/style.css b/data/resources/style.css
index 66a7dd2d..8493baab 100644
--- a/data/resources/style.css
+++ b/data/resources/style.css
@@ -163,6 +163,12 @@ entry .inline-pill {
margin-bottom: -0.5em;
}
+.cutout-button {
+ background-color: @window_bg_color;
+ border-radius: 9999px;
+ padding: 2px;
+}
+
/* Login */
@@ -582,19 +588,10 @@ typing-bar avatar {
/* Room Details */
-.room-details-group overlay {
- margin-bottom: 6px;
-}
-
.room-details listview {
background: transparent;
}
-.room-details-group avatar * {
- /* Undo non-sensitive style. */
- filter: none;
-}
-
.room-details-group entry:disabled {
border-color: transparent;
/* Undo non-sensitive style. */
@@ -627,12 +624,6 @@ typing-bar avatar {
filter: opacity(1);
}
-.cutout-button {
- background-color: @window_bg_color;
- border-radius: 9999px;
- padding: 2px;
-}
-
dragoverlay statuspage {
background-color: alpha(@accent_bg_color, 0.5);
color: @accent_fg_color;
diff --git a/data/resources/ui/content-room-details-general-page.ui b/data/resources/ui/content-room-details-general-page.ui
index 65ee7508..50138482 100644
--- a/data/resources/ui/content-room-details-general-page.ui
+++ b/data/resources/ui/content-room-details-general-page.ui
@@ -22,54 +22,12 @@
-
@@ -177,4 +135,3 @@
-
diff --git a/src/session/content/room_details/general_page/mod.rs b/src/session/content/room_details/general_page/mod.rs
index d4f102c5..00722cc3 100644
--- a/src/session/content/room_details/general_page/mod.rs
+++ b/src/session/content/room_details/general_page/mod.rs
@@ -3,21 +3,30 @@ use std::convert::From;
use adw::{prelude::*, subclass::prelude::*};
use gettextrs::gettext;
use gtk::{
- gdk,
- glib::{self, clone, closure},
+ gio,
+ glib::{self, clone},
CompositeTemplate,
};
use log::error;
-use matrix_sdk::ruma::events::StateEventType;
+use matrix_sdk::room::Room as MatrixRoom;
+use ruma::{
+ assign,
+ events::{room::avatar::ImageInfo, StateEventType},
+ OwnedMxcUri,
+};
use crate::{
- components::CustomEntry,
- session::{self, room::RoomAction, Room},
- utils::{and_expr, or_expr},
+ components::{CustomEntry, EditableAvatar},
+ session::{room::RoomAction, Room},
+ spawn, spawn_tokio, toast,
+ utils::{
+ media::{get_image_info, load_file},
+ or_expr, OngoingAsyncAction,
+ },
};
mod imp {
- use std::cell::Cell;
+ use std::cell::{Cell, RefCell};
use glib::subclass::InitializingObject;
use once_cell::unsync::OnceCell;
@@ -28,11 +37,8 @@ mod imp {
#[template(resource = "/org/gnome/Fractal/content-room-details-general-page.ui")]
pub struct GeneralPage {
pub room: OnceCell,
- pub avatar_chooser: OnceCell,
- #[template_child]
- pub avatar_remove_button: TemplateChild,
#[template_child]
- pub avatar_edit_button: TemplateChild,
+ pub avatar: TemplateChild,
#[template_child]
pub edit_toggle: TemplateChild,
#[template_child]
@@ -46,6 +52,7 @@ mod imp {
#[template_child]
pub members_count: TemplateChild,
pub edit_mode: Cell,
+ pub changing_avatar: RefCell