188 lines
7.7 KiB
Diff
188 lines
7.7 KiB
Diff
|
From 70a40893a3f41483fbc607512d311f4c0c44c79a Mon Sep 17 00:00:00 2001
|
||
|
From: Julian Sparber <julian@sparber.net>
|
||
|
Date: Thu, 8 Oct 2020 14:50:58 +0200
|
||
|
Subject: [PATCH 066/124] action-bar: Add an action bar to the conversations
|
||
|
list (2-panel)
|
||
|
|
||
|
This moves the actions from the headerbar to the action bar at the
|
||
|
bottom of the conversations list when multiple conversations are
|
||
|
selected. This changes is needed so that the user can still interact
|
||
|
with the conversations when folded.
|
||
|
This also hides the actions from the Headerbar and action bar when
|
||
|
no conversation is selected.
|
||
|
---
|
||
|
po/POTFILES.in | 2 +
|
||
|
.../application/application-main-window.vala | 19 +++++++++
|
||
|
.../components-conversation-action-bar.vala | 39 +++++++++++++++++++
|
||
|
src/client/meson.build | 1 +
|
||
|
ui/components-conversation-action-bar.ui | 22 +++++++++++
|
||
|
ui/org.gnome.Geary.gresource.xml | 1 +
|
||
|
6 files changed, 84 insertions(+)
|
||
|
create mode 100644 src/client/components/components-conversation-action-bar.vala
|
||
|
create mode 100644 ui/components-conversation-action-bar.ui
|
||
|
|
||
|
diff --git a/po/POTFILES.in b/po/POTFILES.in
|
||
|
index 7ef4e050..68e3ca34 100644
|
||
|
--- a/po/POTFILES.in
|
||
|
+++ b/po/POTFILES.in
|
||
|
@@ -40,6 +40,7 @@ src/client/client-action.vala
|
||
|
src/client/components/client-web-view.vala
|
||
|
src/client/components/components-attachment-pane.vala
|
||
|
src/client/components/components-conversation-actions.vala
|
||
|
+src/client/components/components-conversation-action-bar.vala
|
||
|
src/client/components/components-entry-undo.vala
|
||
|
src/client/components/components-in-app-notification.vala
|
||
|
src/client/components/components-info-bar-stack.vala
|
||
|
@@ -457,6 +458,7 @@ ui/components-attachment-pane.ui
|
||
|
ui/components-attachment-pane-menus.ui
|
||
|
ui/components-attachment-view.ui
|
||
|
ui/components-conversation-actions.ui
|
||
|
+ui/components-conversation-action-bar.ui
|
||
|
ui/components-in-app-notification.ui
|
||
|
ui/components-inspector-error-view.ui
|
||
|
ui/components-inspector-log-view.ui
|
||
|
diff --git a/src/client/application/application-main-window.vala b/src/client/application/application-main-window.vala
|
||
|
index 20fc3758..0e6a89e1 100644
|
||
|
--- a/src/client/application/application-main-window.vala
|
||
|
+++ b/src/client/application/application-main-window.vala
|
||
|
@@ -351,6 +351,8 @@ public class Application.MainWindow :
|
||
|
[GtkChild]
|
||
|
private Gtk.Overlay overlay;
|
||
|
|
||
|
+ private Components.ConversationActionBar action_bar;
|
||
|
+
|
||
|
private Components.InfoBarStack info_bars =
|
||
|
new Components.InfoBarStack(SINGLE);
|
||
|
|
||
|
@@ -1308,6 +1310,12 @@ public class Application.MainWindow :
|
||
|
this.spinner.set_progress_monitor(progress_monitor);
|
||
|
this.status_bar.add(this.spinner);
|
||
|
this.status_bar.show_all();
|
||
|
+
|
||
|
+ // Action bar
|
||
|
+ this.action_bar = new Components.ConversationActionBar();
|
||
|
+ this.conversation_list_box.add_with_properties(action_bar,
|
||
|
+ "pack-type", Gtk.PackType.END,
|
||
|
+ "position", 0);
|
||
|
}
|
||
|
|
||
|
/** {@inheritDoc} */
|
||
|
@@ -1740,6 +1748,17 @@ public class Application.MainWindow :
|
||
|
);
|
||
|
|
||
|
this.update_context_dependent_actions.begin(sensitive);
|
||
|
+ switch (count) {
|
||
|
+ case NONE:
|
||
|
+ conversation_actions.take_ownership(null);
|
||
|
+ break;
|
||
|
+ case SINGLE:
|
||
|
+ this.main_toolbar.add_conversation_actions(this.conversation_actions);
|
||
|
+ break;
|
||
|
+ case MULTIPLE:
|
||
|
+ this.action_bar.add_conversation_actions(this.conversation_actions);
|
||
|
+ break;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
private async void update_context_dependent_actions(bool sensitive) {
|
||
|
diff --git a/src/client/components/components-conversation-action-bar.vala b/src/client/components/components-conversation-action-bar.vala
|
||
|
new file mode 100644
|
||
|
index 00000000..cb574521
|
||
|
--- /dev/null
|
||
|
+++ b/src/client/components/components-conversation-action-bar.vala
|
||
|
@@ -0,0 +1,39 @@
|
||
|
+/*
|
||
|
+ * Copyright © 2016 Software Freedom Conservancy Inc.
|
||
|
+ * Copyright © 2020 Purism SPC
|
||
|
+ *
|
||
|
+ * This software is licensed under the GNU Lesser General Public License
|
||
|
+ * (version 2.1 or later). See the COPYING file in this distribution.
|
||
|
+ */
|
||
|
+
|
||
|
+// Draws the conversation action bar.
|
||
|
+[GtkTemplate (ui = "/org/gnome/Geary/components-conversation-action-bar.ui")]
|
||
|
+public class Components.ConversationActionBar : Gtk.Revealer {
|
||
|
+ private ulong owner_notify;
|
||
|
+
|
||
|
+ [GtkChild]
|
||
|
+ private Gtk.Box action_box;
|
||
|
+
|
||
|
+ public ConversationActionBar() {
|
||
|
+ }
|
||
|
+
|
||
|
+ /**
|
||
|
+ * This takes ownership of the ConversationActions and places some of
|
||
|
+ * the buttons into the ActionBar.
|
||
|
+ */
|
||
|
+ public void add_conversation_actions(Components.ConversationActions actions) {
|
||
|
+ if (actions.owner == this)
|
||
|
+ return;
|
||
|
+
|
||
|
+ actions.take_ownership(this);
|
||
|
+ action_box.pack_start(actions.mark_copy_move_buttons, false, false);
|
||
|
+ action_box.pack_end(actions.archive_trash_delete_buttons, false, false);
|
||
|
+ reveal_child = true;
|
||
|
+ this.owner_notify = actions.notify["owner"].connect(() => {
|
||
|
+ if (actions.owner != this) {
|
||
|
+ reveal_child = false;
|
||
|
+ actions.disconnect (this.owner_notify);
|
||
|
+ }
|
||
|
+ });
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/client/meson.build b/src/client/meson.build
|
||
|
index ed0d6b33..c0eb0c16 100644
|
||
|
--- a/src/client/meson.build
|
||
|
+++ b/src/client/meson.build
|
||
|
@@ -49,6 +49,7 @@ client_vala_sources = files(
|
||
|
'components/client-web-view.vala',
|
||
|
'components/components-attachment-pane.vala',
|
||
|
'components/components-conversation-actions.vala',
|
||
|
+ 'components/components-conversation-action-bar.vala',
|
||
|
'components/components-entry-undo.vala',
|
||
|
'components/components-info-bar-stack.vala',
|
||
|
'components/components-info-bar.vala',
|
||
|
diff --git a/ui/components-conversation-action-bar.ui b/ui/components-conversation-action-bar.ui
|
||
|
new file mode 100644
|
||
|
index 00000000..ae49683f
|
||
|
--- /dev/null
|
||
|
+++ b/ui/components-conversation-action-bar.ui
|
||
|
@@ -0,0 +1,22 @@
|
||
|
+<?xml version="1.0" encoding="UTF-8"?>
|
||
|
+<interface>
|
||
|
+ <requires lib="gtk+" version="3.20"/>
|
||
|
+ <object class="GtkImage" id="archive_image">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="can_focus">False</property>
|
||
|
+ <property name="icon_name">mail-archive-symbolic</property>
|
||
|
+ </object>
|
||
|
+ <template class="ComponentsConversationActionBar" parent="GtkRevealer">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="can_focus">False</property>
|
||
|
+ <property name="transition_type">slide-up</property>
|
||
|
+ <child>
|
||
|
+ <object class="GtkBox" id="action_box">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="can_focus">False</property>
|
||
|
+ <property name="hexpand">True</property>
|
||
|
+ <property name="margin">6</property>
|
||
|
+ </object>
|
||
|
+ </child>
|
||
|
+ </template>
|
||
|
+</interface>
|
||
|
diff --git a/ui/org.gnome.Geary.gresource.xml b/ui/org.gnome.Geary.gresource.xml
|
||
|
index 481bbff4..e064d331 100644
|
||
|
--- a/ui/org.gnome.Geary.gresource.xml
|
||
|
+++ b/ui/org.gnome.Geary.gresource.xml
|
||
|
@@ -14,6 +14,7 @@
|
||
|
<file compressed="true" preprocess="xml-stripblanks">components-attachment-pane.ui</file>
|
||
|
<file compressed="true" preprocess="xml-stripblanks">components-attachment-pane-menus.ui</file>
|
||
|
<file compressed="true" preprocess="xml-stripblanks">components-attachment-view.ui</file>
|
||
|
+ <file compressed="true" preprocess="xml-stripblanks">components-conversation-action-bar.ui</file>
|
||
|
<file compressed="true" preprocess="xml-stripblanks">components-conversation-actions.ui</file>
|
||
|
<file compressed="true" preprocess="xml-stripblanks">components-in-app-notification.ui</file>
|
||
|
<file compressed="true" preprocess="xml-stripblanks">components-inspector.ui</file>
|
||
|
--
|
||
|
2.29.2
|
||
|
|