Browse Source

chore: Remove uses of gtk-macros

merge-requests/1327/merge
Kévin Commaille 3 years ago
parent
commit
160b648cfe
No known key found for this signature in database
GPG Key ID: DD507DAE96E8245C
  1. 7
      Cargo.lock
  2. 1
      Cargo.toml
  3. 84
      src/application.rs
  4. 248
      src/session/room/event/event_actions.rs

7
Cargo.lock generated

@ -1110,7 +1110,6 @@ dependencies = [
"gstreamer-pbutils", "gstreamer-pbutils",
"gstreamer-play", "gstreamer-play",
"gstreamer-video", "gstreamer-video",
"gtk-macros",
"gtk4", "gtk4",
"html-escape", "html-escape",
"html2pango", "html2pango",
@ -1923,12 +1922,6 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "gtk-macros"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da5bf7748fd4cd0b2490df8debcc911809dbcbee4ece9531b96c29a9c729de5a"
[[package]] [[package]]
name = "gtk4" name = "gtk4"
version = "0.6.2" version = "0.6.2"

1
Cargo.toml

@ -22,7 +22,6 @@ log = "0.4"
mime = "0.3.16" mime = "0.3.16"
tracing-subscriber = "0.3" tracing-subscriber = "0.3"
gettext-rs = { version = "0.7", features = ["gettext-system"] } gettext-rs = { version = "0.7", features = ["gettext-system"] }
gtk-macros = "0.3"
once_cell = "1.5" once_cell = "1.5"
serde = "1.0.130" serde = "1.0.130"
serde_json = "1.0" serde_json = "1.0"

84
src/application.rs

@ -4,7 +4,6 @@ use gettextrs::gettext;
use gio::{ApplicationFlags, Settings}; use gio::{ApplicationFlags, Settings};
use glib::{clone, WeakRef}; use glib::{clone, WeakRef};
use gtk::{gio, glib, prelude::*, subclass::prelude::*}; use gtk::{gio, glib, prelude::*, subclass::prelude::*};
use gtk_macros::action;
use log::{debug, info}; use log::{debug, info};
use ruma::{OwnedRoomId, RoomId}; use ruma::{OwnedRoomId, RoomId};
@ -107,42 +106,42 @@ impl Application {
} }
fn setup_gactions(&self) { fn setup_gactions(&self) {
// Quit self.add_action_entries([
action!( // Quit
self, gio::ActionEntry::builder("quit")
"quit", .activate(|app: &Application, _, _| {
clone!(@weak self as app => move |_, _| { // This is needed to trigger the delete event
// This is needed to trigger the delete event // and saving the window state
// and saving the window state app.get_main_window().close();
app.get_main_window().close(); app.quit();
app.quit(); })
}) .build(),
); // About
gio::ActionEntry::builder("about")
// About .activate(|app: &Application, _, _| {
action!( app.show_about_dialog();
self, })
"about", .build(),
clone!(@weak self as app => move |_, _| { gio::ActionEntry::builder("new-session")
app.show_about_dialog(); .activate(|app: &Application, _, _| {
}) app.get_main_window().switch_to_greeter_page();
); })
.build(),
action!( gio::ActionEntry::builder("show-login")
self, .activate(|app: &Application, _, _| {
"new-session", app.get_main_window().switch_to_login_page();
clone!(@weak self as app => move |_, _| { })
app.get_main_window().switch_to_greeter_page(); .build(),
}) gio::ActionEntry::builder("show-room")
); .parameter_type(Some(&AppShowRoomPayload::static_variant_type()))
.activate(|app: &Application, _, v| {
action!( if let Some(payload) = v.and_then(|v| v.get::<AppShowRoomPayload>()) {
self, app.get_main_window()
"show-login", .show_room(&payload.session_id, &payload.room_id);
clone!(@weak self as app => move |_, _| { }
app.get_main_window().switch_to_login_page(); })
}) .build(),
); ]);
let show_sessions_action = gio::SimpleAction::new("show-sessions", None); let show_sessions_action = gio::SimpleAction::new("show-sessions", None);
show_sessions_action.connect_activate(clone!(@weak self as app => move |_, _| { show_sessions_action.connect_activate(clone!(@weak self as app => move |_, _| {
@ -157,17 +156,6 @@ impl Application {
}), }),
); );
show_sessions_action.set_enabled(win.has_sessions()); show_sessions_action.set_enabled(win.has_sessions());
action!(
self,
"show-room",
Some(&AppShowRoomPayload::static_variant_type()),
clone!(@weak self as app => move |_, v| {
if let Some(payload) = v.and_then(|v| v.get::<AppShowRoomPayload>()) {
app.get_main_window().show_room(&payload.session_id, &payload.room_id);
}
})
);
} }
/// Sets up keyboard shortcuts for application and window actions. /// Sets up keyboard shortcuts for application and window actions.

248
src/session/room/event/event_actions.rs

@ -77,26 +77,30 @@ where
}; };
let action_group = gio::SimpleActionGroup::new(); let action_group = gio::SimpleActionGroup::new();
// View Event Source if event.raw().is_some() {
gtk_macros::action!( action_group.add_action_entries([
&action_group, // View Event Source
"view-source", gio::ActionEntry::builder("view-source")
clone!(@weak self as widget, @weak event => move |_, _| { .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
let window = widget.root().unwrap().downcast().unwrap(); let window = widget.root().unwrap().downcast().unwrap();
let dialog = EventSourceDialog::new(&window, &event); let dialog = EventSourceDialog::new(&window, &event);
dialog.show(); dialog.show();
}) }))
); .build(),
]);
}
// Create a permalink if let Some(event) = event
if event.event_id().is_some() { .downcast_ref::<Event>()
gtk_macros::action!( .filter(|event| event.event_id().is_some())
&action_group, {
"permalink", action_group.add_action_entries([
clone!(@weak self as widget, @weak event => move |_, _| { // Create a permalink
let matrix_room = event.room().matrix_room(); gio::ActionEntry::builder("permalink")
let event_id = event.event_id().unwrap(); .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
spawn!(clone!(@weak widget => async move { let matrix_room = event.room().matrix_room();
let event_id = event.event_id().unwrap();
spawn!(clone!(@weak widget => async move {
let handle = spawn_tokio!(async move { let handle = spawn_tokio!(async move {
matrix_room.matrix_to_event_permalink(event_id).await matrix_room.matrix_to_event_permalink(event_id).await
}); });
@ -112,14 +116,10 @@ where
} }
}) })
); );
}) }))
); .build()
} ]);
if let Some(event) = event
.downcast_ref::<Event>()
.filter(|event| event.event_id().is_some())
{
if let TimelineItemContent::Message(message) = event.content() { if let TimelineItemContent::Message(message) = event.content() {
let user_id = event let user_id = event
.room() .room()
@ -137,147 +137,143 @@ where
.min_level_for_room_action(&RoomAction::Redact) .min_level_for_room_action(&RoomAction::Redact)
<= user.power_level() <= user.power_level()
{ {
gtk_macros::action!( action_group.add_action_entries([gio::ActionEntry::builder("remove")
&action_group, .activate(clone!(@weak event, => move |_, _, _| {
"remove",
clone!(@weak event, => move |_, _| {
if let Some(event_id) = event.event_id() { if let Some(event_id) = event.event_id() {
event.room().redact(event_id, None); event.room().redact(event_id, None);
} }
}) }))
); .build()]);
} }
// Send/redact a reaction action_group.add_action_entries([
gtk_macros::action!( // Send/redact a reaction
&action_group, gio::ActionEntry::builder("toggle-reaction")
"toggle-reaction", .parameter_type(Some(&String::static_variant_type()))
Some(&String::static_variant_type()), .activate(clone!(@weak event => move |_, _, variant| {
clone!(@weak event => move |_, variant| { let key: String = variant.unwrap().get().unwrap();
let key: String = variant.unwrap().get().unwrap(); let room = event.room();
let room = event.room();
let reaction_group = event.reactions().reaction_group_by_key(&key); let reaction_group = event.reactions().reaction_group_by_key(&key);
if let Some(reaction_key) = reaction_group.and_then(|group| group.user_reaction_event_key()) { if let Some(reaction_key) = reaction_group.and_then(|group| group.user_reaction_event_key()) {
// The user already sent that reaction, redact it if it has been sent. // The user already sent that reaction, redact it if it has been sent.
if let EventKey::EventId(reaction_id) = reaction_key { if let EventKey::EventId(reaction_id) = reaction_key {
room.redact(reaction_id, None); room.redact(reaction_id, None);
}
} else if let Some(event_id) = event.event_id() {
// The user didn't send that reaction, send it.
room.send_reaction(key, event_id);
} }
} else if let Some(event_id) = event.event_id() { }))
// The user didn't send that reaction, send it. .build(),
room.send_reaction(key, event_id); // Reply
} gio::ActionEntry::builder("reply")
}) .activate(clone!(@weak event, @weak self as widget => move |_, _, _| {
); if let Some(event_id) = event.event_id() {
let _ = widget.activate_action(
// Reply "room-history.reply",
gtk_macros::action!( Some(&event_id.as_str().to_variant())
&action_group, );
"reply", }
None, }))
clone!(@weak event, @weak self as widget => move |_, _| { .build()
if let Some(event_id) = event.event_id() { ]);
let _ = widget.activate_action(
"room-history.reply",
Some(&event_id.as_str().to_variant())
);
}
})
);
match message.msgtype() { match message.msgtype() {
// Copy Text-Message
MessageType::Text(text_message) => { MessageType::Text(text_message) => {
// Copy text message.
let body = text_message.body.clone(); let body = text_message.body.clone();
gtk_macros::action!( action_group.add_action_entries([gio::ActionEntry::builder("copy-text")
&action_group, .activate(clone!(@weak self as widget => move |_, _, _| {
"copy-text",
clone!(@weak self as widget => move |_, _| {
widget.clipboard().set_text(&body); widget.clipboard().set_text(&body);
toast!(widget, gettext("Message copied to clipboard")); toast!(widget, gettext("Message copied to clipboard"));
}) }))
); .build()]);
} }
MessageType::File(_) => { MessageType::File(_) => {
// Save message's file // Save message's file.
gtk_macros::action!( action_group.add_action_entries([gio::ActionEntry::builder("file-save")
&action_group, .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
"file-save", widget.save_event_file(event);
clone!(@weak self as widget, @weak event => move |_, _| { }))
widget.save_event_file(event); .build()]);
})
);
} }
MessageType::Emote(message) => { MessageType::Emote(message) => {
// Copy text message.
let message = message.clone(); let message = message.clone();
gtk_macros::action!( action_group.add_action_entries([gio::ActionEntry::builder("copy-text")
&action_group, .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
"copy-text",
clone!(@weak self as widget, @weak event => move |_, _| {
let display_name = event.sender().display_name(); let display_name = event.sender().display_name();
let message = display_name + " " + &message.body; let message = format!("{display_name} {}", message.body);
widget.clipboard().set_text(&message); widget.clipboard().set_text(&message);
toast!(widget, gettext("Message copied to clipboard")); toast!(widget, gettext("Message copied to clipboard"));
}) }))
); .build()]);
} }
MessageType::Notice(message) => {
// Copy text message.
let body = message.body.clone();
action_group.add_action_entries([gio::ActionEntry::builder("copy-text")
.activate(clone!(@weak self as widget => move |_, _, _| {
widget.clipboard().set_text(&body);
toast!(widget, gettext("Message copied to clipboard"));
}))
.build()]);
}
MessageType::Image(_) => { MessageType::Image(_) => {
// Copy the texture to the clipboard. action_group.add_action_entries([
gtk_macros::action!( // Copy the texture to the clipboard.
&action_group, gio::ActionEntry::builder("copy-image")
"copy-image", .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
clone!(@weak self as widget, @weak event => move |_, _| { let texture = widget.texture().expect("A widget with an image should have a texture");
let texture = widget.texture().expect("A widget with an image should have a texture");
match texture { match texture {
EventTexture::Original(texture) => { EventTexture::Original(texture) => {
widget.clipboard().set_texture(&texture); widget.clipboard().set_texture(&texture);
toast!(widget, gettext("Image copied to clipboard")); toast!(widget, gettext("Image copied to clipboard"));
} }
EventTexture::Thumbnail(texture) => { EventTexture::Thumbnail(texture) => {
widget.clipboard().set_texture(&texture); widget.clipboard().set_texture(&texture);
toast!(widget, gettext("Thumbnail copied to clipboard")); toast!(widget, gettext("Thumbnail copied to clipboard"));
}
} }
} })
}) ).build(),
); // Save the image to a file.
gio::ActionEntry::builder("save-image")
// Save the image to a file. .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
gtk_macros::action!( widget.save_event_file(event);
&action_group, })
"save-image", ).build()
clone!(@weak self as widget, @weak event => move |_, _| { ]);
widget.save_event_file(event);
})
);
} }
MessageType::Video(_) => { MessageType::Video(_) => {
gtk_macros::action!( // Save the video to a file.
&action_group, action_group.add_action_entries([gio::ActionEntry::builder("save-video")
"save-video", .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
clone!(@weak self as widget, @weak event => move |_, _| {
widget.save_event_file(event); widget.save_event_file(event);
}) }))
); .build()]);
} }
MessageType::Audio(_) => { MessageType::Audio(_) => {
gtk_macros::action!( // Save the audio to a file.
&action_group, action_group.add_action_entries([gio::ActionEntry::builder("save-audio")
"save-audio", .activate(clone!(@weak self as widget, @weak event => move |_, _, _| {
clone!(@weak self as widget, @weak event => move |_, _| {
widget.save_event_file(event); widget.save_event_file(event);
}) }))
); .build()]);
} }
_ => {} _ => {}
} }
} }
} }
self.insert_action_group("event", Some(&action_group)); self.insert_action_group("event", Some(&action_group));
Some(action_group) Some(action_group)
} }

Loading…
Cancel
Save