2016-06-19 19:25:46 +10:00
|
|
|
/*
|
|
|
|
|
* Copyright 2016 Software Freedom Conservancy Inc.
|
2017-10-04 17:43:18 +11:00
|
|
|
* Copyright 2016, 2017 Michael Gratton <mike@vee.net>
|
2016-06-19 19:25:46 +10:00
|
|
|
*
|
|
|
|
|
* This software is licensed under the GNU Lesser General Public License
|
|
|
|
|
* (version 2.1 or later). See the COPYING file in this distribution.
|
|
|
|
|
*/
|
|
|
|
|
|
2017-11-08 18:13:51 +11:00
|
|
|
/* MainWindow */
|
|
|
|
|
|
2016-06-18 16:07:55 +02:00
|
|
|
.geary-folder-frame > border {
|
|
|
|
|
border-left-width: 0;
|
|
|
|
|
border-top-width: 0;
|
|
|
|
|
border-right-width: 0;
|
2019-10-24 14:36:04 +02:00
|
|
|
min-width: 300px;
|
2016-06-18 16:07:55 +02:00
|
|
|
}
|
|
|
|
|
.geary-conversation-frame > border {
|
|
|
|
|
border-left-width: 0;
|
|
|
|
|
border-top-width: 0;
|
|
|
|
|
border-right-width: 0;
|
2019-10-24 14:36:04 +02:00
|
|
|
min-width: 360px;
|
2016-06-18 16:07:55 +02:00
|
|
|
}
|
2019-10-24 14:36:04 +02:00
|
|
|
|
|
|
|
|
treeview.sidebar {
|
|
|
|
|
border: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
geary-conversation-viewer {
|
|
|
|
|
min-width: 360px;
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-18 16:07:55 +02:00
|
|
|
/* For 3-pane mode only */
|
|
|
|
|
.geary-sidebar-pane-separator.vertical .conversation-frame > border {
|
|
|
|
|
border-bottom-width: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.geary-composer-box > border {
|
|
|
|
|
border-width: 0px;
|
|
|
|
|
}
|
|
|
|
|
.geary-composer-body > border {
|
|
|
|
|
border-left-width: 0;
|
|
|
|
|
border-right-width: 0;
|
|
|
|
|
border-bottom-width: 0;
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-15 22:03:35 +10:00
|
|
|
.geary-overlay {
|
|
|
|
|
background-color: @theme_base_color;
|
|
|
|
|
padding: 2px 6px;
|
|
|
|
|
border: 1px solid @borders;
|
|
|
|
|
border-bottom: 0;
|
|
|
|
|
}
|
|
|
|
|
.geary-overlay:dir(ltr) {
|
|
|
|
|
border-left: 0;
|
|
|
|
|
}
|
|
|
|
|
.geary-overlay:dir(rtl) {
|
|
|
|
|
border-right: 0;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 17:12:57 +11:00
|
|
|
.geary-info-bar-stack > border {
|
|
|
|
|
border-width: 0;
|
2017-11-08 18:13:51 +11:00
|
|
|
border-left-width: 0;
|
|
|
|
|
border-right-width: 0;
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-26 23:32:27 +10:00
|
|
|
/* FolderPopover */
|
|
|
|
|
|
2016-06-20 05:43:07 +02:00
|
|
|
row.geary-folder-popover-list-row {
|
|
|
|
|
padding: 6px;
|
|
|
|
|
border-color: @borders;
|
|
|
|
|
border-style: groove;
|
|
|
|
|
border-bottom-width: 1px;
|
|
|
|
|
}
|
|
|
|
|
row.geary-folder-popover-list-row > label {
|
|
|
|
|
color: @theme_text_color;
|
|
|
|
|
}
|
2016-04-09 18:06:41 +10:00
|
|
|
|
2016-07-26 23:32:27 +10:00
|
|
|
/* ConversationListBox */
|
|
|
|
|
|
2016-07-25 10:33:42 +10:00
|
|
|
.conversation-listbox {
|
2019-01-20 11:34:24 +10:30
|
|
|
padding: 0 12px;
|
2016-04-09 18:06:41 +10:00
|
|
|
}
|
2016-07-25 10:33:42 +10:00
|
|
|
.conversation-listbox > row {
|
2016-04-09 18:06:41 +10:00
|
|
|
margin: 0;
|
2016-04-15 02:15:44 +10:00
|
|
|
border: 1px solid @borders;
|
|
|
|
|
border-bottom-width: 0;
|
2016-04-09 18:06:41 +10:00
|
|
|
padding: 0;
|
|
|
|
|
box-shadow: 0 4px 8px 1px rgba(0,0,0,0.4);
|
2016-04-15 02:15:44 +10:00
|
|
|
}
|
2016-09-25 22:53:34 +10:00
|
|
|
.conversation-listbox > row > box {
|
2016-07-08 11:12:42 +10:00
|
|
|
background: @theme_base_color;
|
Reenable displaying sub-messages.
Geary currently displays RFC 822 attachments inline, below the email's
primary message body, using the same HTML chrome for the headers and
email body as for the primary body. Taking the same approach but using
GTK+ widgets meant splitting ConversationMessage up into a
ConversationEmail class that manages the UI for displaying an email in
its entirety, and a ConversationMessage to manage the only header widgets
and webview for displaying an individual RFC 822 message, usable for both
the primary body and any sub-messages. Thus, this is a big change.
One behavioural change is that each sub-message with remote images now
requires individual approval, rather than being dependant on the
containing message's sender and/or approval. This prevents some attacks
e.g. a trusted sender forwarding a spam/malware message, but does not
prevent it if the message is forwarded inline, obviosuly.
* src/client/conversation-viewer/conversation-email.vala (ConversationEmail):
New class for managing the UI for an overall email message. This
replaces the old ConversationMessage and contains much of it's code and
widgets - anything from that class which does not directly support
displaying headers or a message body.
* src/client/conversation-viewer/conversation-message.vala:
(ConversationMessage): Same class as before, but now with its scope
narrowed to only display message headers and body. The draft infobar
remains here rather than being put ConversationEmail where it belongs
since it's bit of a pain to insert in the right place and doesn't
really hurt.
(::email): Moved this property and any code that depends on it to
ConversationEmail.
(::always_load_remote_images): New property passed in via the ctor,
allowing one dependency on the old ::email property to be removed.
(::inlined_content_ids): Moved to ConversationEmail, since that is the
class that keeps track of attachments to display. Add the signal
attachment_displayed_inline to allow ConversationEmail to be notified
of inlined attachments instead.
(::flag_remote_images, ::remember_remote_images): New signals to notify
ConversationEmail that the user has flagged this message or the
message's sender for loading remote images. This is passed through
since in the former's case we may need to set flags on the email
itself, the latter because it is one less use of the contact_store
property, which should be removed from this class at some point.
* src/client/conversation-viewer/conversation-viewer.vala: Chase API
changes from the above. In general, replace use of the term "message"
with "email" since this class is now mostly dealing with
ConversationEmail instances, rather than ConversationMessage instances.
(ConversationViewer::check_mark_read): Only consider the
ConversationEmail's primary message body when checking for visibility
rather than that and any submessages to keep things simple.
(ConversationViewer::show_message, ::hide_message): Renamed to
expand_email/collapse_email respectively since we don't ever actually
hide it. Carry that change on to same methods on ConversationEmail.
* src/engine/rfc822/rfc822-message.vala (Geary.RFC822.Message): Add
get_primary_originator(), almost vermatim from Geary.Email, to support
determining the sender for remembering remote message loading for
senders of sub-emails.
* src/client/components/main-window.vala (MainWindow::set_styling): Fix
background transition for collapsed emails.
* src/client/application/geary-controller.vala: Chase API name changes.
* src/CMakeLists.txt: Include new ConversationEmail source file.
* ui/conversation-email.ui: New UI for ConversationEmail, move the email
action box, attachments box amd sub-messages box here from
conversation-message.ui.
* ui/CMakeLists.txt: Include new UI in compiled resources.
* po/POTFILES.in: Add new UI for transation.
2016-04-19 16:52:34 +10:00
|
|
|
transition: background 0.25s;
|
2016-04-16 23:59:19 +10:00
|
|
|
}
|
2016-09-25 22:53:34 +10:00
|
|
|
.conversation-listbox > row:hover > box {
|
2016-07-08 11:12:42 +10:00
|
|
|
background: shade(@theme_base_color, 0.96);
|
2016-04-09 18:06:41 +10:00
|
|
|
}
|
2016-07-25 10:33:42 +10:00
|
|
|
.conversation-listbox > row.geary-expanded {
|
2016-07-08 16:29:19 +10:00
|
|
|
margin-bottom: 6px;
|
2016-04-09 18:06:41 +10:00
|
|
|
border-bottom-width: 1px;
|
|
|
|
|
}
|
2017-02-23 11:06:05 +11:00
|
|
|
.conversation-listbox *.geary-matched *.geary-match {
|
2016-09-12 22:27:49 +10:00
|
|
|
color: @theme_selected_fg_color;
|
|
|
|
|
background: @theme_selected_bg_color;
|
2019-01-20 11:34:24 +10:30
|
|
|
;}
|
|
|
|
|
.conversation-listbox > row.geary-loading {
|
|
|
|
|
border-top-width: 0px;
|
|
|
|
|
padding: 6px;
|
|
|
|
|
}
|
|
|
|
|
.conversation-listbox > row:first-child:not(.geary-loading) {
|
|
|
|
|
margin-top: 12px;
|
2016-09-12 22:27:49 +10:00
|
|
|
}
|
2019-01-20 11:34:24 +10:30
|
|
|
.conversation-listbox > row:last-child {
|
|
|
|
|
margin-bottom: 12px;
|
2016-04-16 23:59:19 +10:00
|
|
|
}
|
2016-04-09 18:06:41 +10:00
|
|
|
|
2016-08-19 23:49:40 +10:00
|
|
|
/* ConversationEmail */
|
|
|
|
|
|
2016-12-08 22:08:39 +11:00
|
|
|
.geary-unread grid.geary-message-summary {
|
2016-08-19 23:49:40 +10:00
|
|
|
border-color: @theme_selected_bg_color;
|
|
|
|
|
transition: border 0.25s;
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-26 23:32:27 +10:00
|
|
|
/* ConversationMessage */
|
|
|
|
|
|
2020-03-22 17:12:57 +11:00
|
|
|
.geary-message infobar box {
|
|
|
|
|
border-width: 0;
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-08 22:08:39 +11:00
|
|
|
grid.geary-message-summary {
|
2016-08-19 23:49:40 +10:00
|
|
|
border-top: 4px solid transparent;
|
|
|
|
|
padding: 12px;
|
|
|
|
|
padding-top: 8px;
|
|
|
|
|
transition: border 4s;
|
2016-04-09 18:06:41 +10:00
|
|
|
}
|
2016-07-26 23:32:27 +10:00
|
|
|
|
|
|
|
|
.geary-headers label {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 1px;
|
|
|
|
|
}
|
2017-12-11 21:42:55 +11:00
|
|
|
.geary-headers label.geary-header:dir(ltr) {
|
2016-07-26 23:32:27 +10:00
|
|
|
padding-right: 6px;
|
2016-04-09 18:06:41 +10:00
|
|
|
}
|
2017-12-11 21:42:55 +11:00
|
|
|
.geary-headers label.geary-header:dir(rtl) {
|
|
|
|
|
padding-left: 6px;
|
|
|
|
|
}
|
2016-07-26 23:32:27 +10:00
|
|
|
.geary-headers flowboxchild {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 1px;
|
|
|
|
|
}
|
|
|
|
|
.geary-headers flowboxchild label {
|
2016-06-10 10:56:18 -07:00
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
2016-07-26 23:32:27 +10:00
|
|
|
|
2019-04-07 11:57:36 +10:00
|
|
|
.geary-headers flowboxchild.geary-spoofed image:dir(ltr) {
|
|
|
|
|
margin-right: 2px;
|
|
|
|
|
}
|
|
|
|
|
.geary-headers flowboxchild.geary-spoofed image:dir(rtl) {
|
|
|
|
|
margin-left: 2px;
|
|
|
|
|
}
|
|
|
|
|
|
2016-10-08 16:07:35 +11:00
|
|
|
.geary-headers label.geary-from {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-08 22:08:39 +11:00
|
|
|
.geary-header-value > flowboxchild:active {
|
2016-10-08 17:32:40 +11:00
|
|
|
background: mix(@theme_base_color, @theme_bg_color, 0.5);
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-08 22:08:39 +11:00
|
|
|
.geary-header-value > flowboxchild:hover {
|
2016-10-08 17:32:40 +11:00
|
|
|
background: @theme_base_color;
|
|
|
|
|
}
|
|
|
|
|
|
2017-12-11 21:42:55 +11:00
|
|
|
.geary-header-value > flowboxchild label.dim-label:dir(ltr) {
|
2017-10-04 17:43:18 +11:00
|
|
|
margin-left: 6px;
|
2016-10-08 17:32:40 +11:00
|
|
|
}
|
2017-12-11 21:42:55 +11:00
|
|
|
.geary-header-value > flowboxchild label.dim-label:dir(rtl) {
|
|
|
|
|
margin-right: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-08 11:12:42 +10:00
|
|
|
.geary-submessages .geary-message {
|
|
|
|
|
background-image: linear-gradient(rgba(0,0,0,0.2), @bg_color 6px);
|
2016-04-13 00:08:14 +10:00
|
|
|
}
|
2016-04-12 01:06:09 +10:00
|
|
|
|
2019-01-24 18:45:47 +11:00
|
|
|
.geary-message .geary-placeholder-pane {
|
|
|
|
|
margin: 36px 16px;
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-14 16:59:55 +11:00
|
|
|
/* ContactPopover */
|
|
|
|
|
|
|
|
|
|
.geary-contact-popover .dim-label {
|
|
|
|
|
font-size: 80%;
|
|
|
|
|
}
|
2019-01-24 18:45:47 +11:00
|
|
|
|
2019-03-27 17:07:28 +11:00
|
|
|
.geary-contact-popover .geary-deceptive {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-26 23:32:27 +10:00
|
|
|
/* Composer */
|
|
|
|
|
|
2016-07-08 16:27:44 +10:00
|
|
|
.geary-composer-embed headerbar {
|
|
|
|
|
border-top: 1px solid @borders;
|
2016-04-12 01:06:09 +10:00
|
|
|
border-radius: 0px;
|
|
|
|
|
}
|
2016-04-15 02:18:01 +10:00
|
|
|
|
2020-07-07 16:25:05 +10:00
|
|
|
.geary-attachments-box > box > box {
|
|
|
|
|
margin: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.geary-attachments-box > box > box > label {
|
|
|
|
|
margin: 0px 4px;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-29 12:15:47 +11:00
|
|
|
/* AttachmentPane */
|
|
|
|
|
|
|
|
|
|
.geary-attachment-pane flowbox {
|
|
|
|
|
margin: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.geary-attachment-pane flowboxchild {
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-20 18:18:19 +10:30
|
|
|
/* PlaceholderPane */
|
2016-07-26 23:32:27 +10:00
|
|
|
|
2019-02-02 13:03:45 +11:00
|
|
|
.geary-placeholder-pane.geary-has-text > image {
|
2016-07-25 10:33:42 +10:00
|
|
|
margin-bottom: 12px;
|
|
|
|
|
}
|
2019-01-20 18:18:19 +10:30
|
|
|
.geary-placeholder-pane > .title {
|
2016-07-25 10:33:42 +10:00
|
|
|
font-weight: bold;
|
2016-04-15 02:18:01 +10:00
|
|
|
}
|
2018-06-03 00:56:02 +03:00
|
|
|
|
2019-04-05 23:34:08 +11:00
|
|
|
/* GtkListboxRows with padded labels */
|
|
|
|
|
|
|
|
|
|
row.geary-labelled-row {
|
|
|
|
|
padding: 0px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
row.geary-labelled-row > grid > * {
|
|
|
|
|
margin: 18px 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
row.geary-labelled-row > grid > *:first-child:dir(ltr),
|
|
|
|
|
row.geary-labelled-row > grid > *:last-child:dir(rtl) {
|
|
|
|
|
margin-left: 18px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
row.geary-labelled-row > grid > *:last-child:dir(ltr),
|
|
|
|
|
row.geary-labelled-row > grid > *:first-child:dir(rtl) {
|
|
|
|
|
margin-right: 18px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Images should have some padding to offset them from adjacent
|
|
|
|
|
widgets, but care ust be taken since images are also used as children
|
|
|
|
|
of other widgets like entries, comboboxes and switches, and these
|
|
|
|
|
shouldn't be be touched. */
|
|
|
|
|
row.geary-labelled-row widget > image,
|
|
|
|
|
row.geary-labelled-row grid > image {
|
|
|
|
|
padding: 0px 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
row.geary-labelled-row > grid > combobox,
|
|
|
|
|
row.geary-labelled-row > grid > entry,
|
|
|
|
|
row.geary-labelled-row:not(.geary-add-row) > grid > image,
|
|
|
|
|
row.geary-labelled-row > grid > switch {
|
|
|
|
|
/* These use more space than labels, so set their valign to center
|
|
|
|
|
when adding them and free up some space around them here to keep a
|
|
|
|
|
consistent row height. */
|
|
|
|
|
margin: 0 12px;
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-03 00:56:02 +03:00
|
|
|
/* Accounts.Editor */
|
|
|
|
|
|
2018-09-06 20:05:42 +10:00
|
|
|
grid.geary-accounts-editor-pane-content {
|
|
|
|
|
padding: 32px 128px;
|
2018-06-03 00:56:02 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
grid.geary-account-view image:dir(ltr) {
|
|
|
|
|
margin-right: 6px;
|
|
|
|
|
}
|
|
|
|
|
grid.geary-account-view image:dir(rtl) {
|
|
|
|
|
margin-left: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-23 17:46:33 +10:00
|
|
|
grid.geary-welcome-panel {
|
|
|
|
|
margin-bottom: 32px;
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-03 19:28:02 +10:00
|
|
|
label.geary-settings-heading {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
margin-top: 24px;
|
|
|
|
|
margin-bottom: 12px;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-12 20:16:32 +11:00
|
|
|
row.geary-settings entry {
|
|
|
|
|
border-width: 0px;
|
2018-12-26 12:16:29 +10:30
|
|
|
background-color: transparent;
|
2018-12-12 20:16:32 +11:00
|
|
|
}
|
|
|
|
|
|
2018-12-02 15:11:15 +11:00
|
|
|
row.geary-settings.geary-drag-source {
|
|
|
|
|
color: @insensitive_fg_color;
|
|
|
|
|
background-color: @insensitive_bg_color;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
row.geary-settings.geary-drag-icon {
|
|
|
|
|
background-color: @theme_base_color;
|
|
|
|
|
border: 1px solid @borders;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-02 13:51:15 +11:00
|
|
|
/* dir pseudo-class used here for required additional specificity */
|
|
|
|
|
row.geary-settings > grid > grid.geary-drag-handle:dir(ltr),
|
|
|
|
|
row.geary-settings > grid > grid.geary-drag-handle:dir(rtl) {
|
|
|
|
|
margin: 0;
|
2018-06-04 18:28:22 +10:00
|
|
|
}
|
2018-12-02 13:51:15 +11:00
|
|
|
|
|
|
|
|
row.geary-settings > grid > grid.geary-drag-handle image:dir(ltr) {
|
|
|
|
|
padding: 12px;
|
|
|
|
|
padding-right: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
row.geary-settings > grid > grid.geary-drag-handle image:dir(rtl) {
|
|
|
|
|
padding: 12px;
|
|
|
|
|
padding-left: 6px;
|
2018-06-04 18:28:22 +10:00
|
|
|
}
|
|
|
|
|
|
2018-06-13 17:44:17 +10:00
|
|
|
frame.geary-settings.geary-signature {
|
|
|
|
|
min-height: 5em;
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-03 19:28:02 +10:00
|
|
|
buttonbox.geary-settings {
|
|
|
|
|
margin-top: 36px;
|
2018-06-03 00:56:02 +03:00
|
|
|
}
|
2018-06-13 17:44:17 +10:00
|
|
|
|
|
|
|
|
popover.geary-editor > grid {
|
2018-07-23 17:46:33 +10:00
|
|
|
margin: 12px;
|
2018-06-13 17:44:17 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
popover.geary-editor > grid > button.geary-setting-remove {
|
2018-07-23 17:46:33 +10:00
|
|
|
margin-top: 12px;
|
2018-06-13 17:44:17 +10:00
|
|
|
}
|
2019-11-28 11:33:28 +01:00
|
|
|
|
|
|
|
|
/* FolderList.Tree */
|
|
|
|
|
|
|
|
|
|
treeview.sidebar:drop(active).after,
|
|
|
|
|
treeview.sidebar:drop(active).before,
|
|
|
|
|
treeview.sidebar:drop(active).into {
|
|
|
|
|
border-top-style: solid;
|
|
|
|
|
border-bottom-style: solid;
|
|
|
|
|
}
|
2020-04-16 13:05:07 +10:00
|
|
|
|
|
|
|
|
/* Inspector */
|
|
|
|
|
|
|
|
|
|
.geary-inspector-log-viewer .sidebar row > grid {
|
|
|
|
|
padding: 0 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.geary-inspector-log-viewer .sidebar row > grid * {
|
|
|
|
|
margin: 4px;
|
|
|
|
|
}
|