[fractal/fractal-next] media-viewer: Don't use same menu as room messages



commit e8d7081ea92544289ba0c529a577ca0d97efd071
Author: Kévin Commaille <zecakeh tedomum fr>
Date:   Mon Jan 17 14:13:01 2022 +0100

    media-viewer: Don't use same menu as room messages

 data/resources/ui/event-menu.ui                      | 16 +++++++++++++++-
 data/resources/ui/media-viewer.ui                    |  1 +
 src/session/content/room_history/item_row.rs         |  2 +-
 src/session/content/room_history/message_row/text.rs |  2 +-
 src/session/media_viewer.rs                          |  3 +--
 src/session/room/event_actions.rs                    | 18 +++++++++++++++---
 6 files changed, 34 insertions(+), 8 deletions(-)
---
diff --git a/data/resources/ui/event-menu.ui b/data/resources/ui/event-menu.ui
index 30c68073..4970f0e6 100644
--- a/data/resources/ui/event-menu.ui
+++ b/data/resources/ui/event-menu.ui
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <menu id="menu_model">
+  <menu id="message_menu_model">
     <section>
       <item>
         <attribute name="label" translatable="yes">_Reply</attribute>
@@ -61,4 +61,18 @@
       </item>
     </section>
   </menu>
+  <menu id="media_menu_model">
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Copy Image</attribute>
+        <attribute name="action">event.copy-image</attribute>
+        <attribute name="hidden-when">action-missing</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">S_ave Image</attribute>
+        <attribute name="action">event.save-image</attribute>
+        <attribute name="hidden-when">action-missing</attribute>
+      </item>
+    </section>
+  </menu>
 </interface>
diff --git a/data/resources/ui/media-viewer.ui b/data/resources/ui/media-viewer.ui
index 3102ddc3..05efe055 100644
--- a/data/resources/ui/media-viewer.ui
+++ b/data/resources/ui/media-viewer.ui
@@ -73,6 +73,7 @@
                 <child type="end">
                   <object class="GtkMenuButton" id="menu_full">
                     <property name="icon-name">view-more-symbolic</property>
+                    <property name="menu-model" bind-source="MediaViewer" bind-property="context-menu" 
bind-flags="sync-create"/>
                   </object>
                 </child>
                 <child type="end">
diff --git a/src/session/content/room_history/item_row.rs b/src/session/content/room_history/item_row.rs
index 5f48008f..1b0c26d5 100644
--- a/src/session/content/room_history/item_row.rs
+++ b/src/session/content/room_history/item_row.rs
@@ -117,7 +117,7 @@ impl ItemRow {
             match item.type_() {
                 ItemType::Event(event) => {
                     if self.context_menu().is_none() {
-                        self.set_context_menu(Some(Self::event_menu_model()));
+                        self.set_context_menu(Some(Self::event_message_menu_model()));
                     }
                     self.set_event_actions(Some(event));
 
diff --git a/src/session/content/room_history/message_row/text.rs 
b/src/session/content/room_history/message_row/text.rs
index 81e1a0d4..c23a5a22 100644
--- a/src/session/content/room_history/message_row/text.rs
+++ b/src/session/content/room_history/message_row/text.rs
@@ -260,7 +260,7 @@ fn set_label_styles(w: &gtk::Label) {
     w.set_valign(gtk::Align::Start);
     w.set_halign(gtk::Align::Fill);
     w.set_selectable(true);
-    w.set_extra_menu(Some(ItemRow::event_menu_model()));
+    w.set_extra_menu(Some(ItemRow::event_message_menu_model()));
 }
 
 fn create_widget_for_html_block(block: &HtmlBlock) -> gtk::Widget {
diff --git a/src/session/media_viewer.rs b/src/session/media_viewer.rs
index 5fd7e52c..76bec06c 100644
--- a/src/session/media_viewer.rs
+++ b/src/session/media_viewer.rs
@@ -133,8 +133,7 @@ mod imp {
         fn constructed(&self, obj: &Self::Type) {
             self.parent_constructed(obj);
 
-            let menu_model = Some(Self::Type::event_menu_model());
-            self.menu_full.set_menu_model(menu_model);
+            let menu_model = Some(Self::Type::event_media_menu_model());
             obj.set_context_menu(menu_model);
 
             // Bind `fullscreened` to the window property of the same name.
diff --git a/src/session/room/event_actions.rs b/src/session/room/event_actions.rs
index 3deccfb9..bf543b02 100644
--- a/src/session/room/event_actions.rs
+++ b/src/session/room/event_actions.rs
@@ -24,12 +24,24 @@ where
     Self: glib::clone::Downgrade,
     <Self as glib::clone::Downgrade>::Weak: glib::clone::Upgrade<Strong = Self>,
 {
-    /// The `MenuModel` for common event actions.
-    fn event_menu_model() -> &'static gio::MenuModel {
+    /// The `MenuModel` for common message event actions.
+    fn event_message_menu_model() -> &'static gio::MenuModel {
         static MODEL: Lazy<MenuModelSendSync> = Lazy::new(|| {
             MenuModelSendSync(
                 gtk::Builder::from_resource("/org/gnome/FractalNext/event-menu.ui")
-                    .object::<gio::MenuModel>("menu_model")
+                    .object::<gio::MenuModel>("message_menu_model")
+                    .unwrap(),
+            )
+        });
+        &MODEL.0
+    }
+
+    /// The `MenuModel` for common media message event actions.
+    fn event_media_menu_model() -> &'static gio::MenuModel {
+        static MODEL: Lazy<MenuModelSendSync> = Lazy::new(|| {
+            MenuModelSendSync(
+                gtk::Builder::from_resource("/org/gnome/FractalNext/event-menu.ui")
+                    .object::<gio::MenuModel>("media_menu_model")
                     .unwrap(),
             )
         });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]