Scrolls to the first expanded row (first unread, or last email) in the conversation list box to the top when the convo is fully loaded. To implement this cleanly, ConversationViewer's handling of ListBoxRows was cleaned up significantly by introducing a custom subclass and moving related funtionality there. * src/client/conversation-viewer/conversation-viewer.vala (EmailRow): New class for managing expanded and last row state, events needed to ensure we can robustly scroll to the row after its message has been loaded. (ConversationViewer::scroll_to_top): New method for scrolling to a specific row. (ConversationViewer::update_last_row): New method for correctly updating the last_email_row property and the row's flags. Replace existing ad-hoc methods of determining the last row and ensure that the last_email_row is used instead. (ConversationViewer::select_conversation_async): Find the first expanded row in the newly loaded conversation, and wire it up so that it is scrolled to when the email body is eventually loaded, and the resulting size reallocations have taken place. * src/client/conversation-viewer/conversation-web-view.vala (ConversationWebView::is_height_valid): Allows checking if the web view's height is considered to have been correctly calculated.
105 lines
2.4 KiB
CSS
105 lines
2.4 KiB
CSS
/*
|
|
* Copyright 2016 Software Freedom Conservancy Inc.
|
|
* Copyright 2016 Michael Gratton <mike@vee.net>
|
|
*
|
|
* This software is licensed under the GNU Lesser General Public License
|
|
* (version 2.1 or later). See the COPYING file in this distribution.
|
|
*/
|
|
|
|
.geary-folder-frame, /* GTK < 3.20 */
|
|
.geary-folder-frame > border {
|
|
border-left-width: 0;
|
|
border-top-width: 0;
|
|
border-right-width: 0;
|
|
}
|
|
.geary-conversation-frame, /* GTK < 3.20 */
|
|
.geary-conversation-frame > border {
|
|
border-left-width: 0;
|
|
border-top-width: 0;
|
|
border-right-width: 0;
|
|
}
|
|
/* For 3-pane mode only */
|
|
.geary-sidebar-pane-separator.vertical .conversation-frame, /* GTK < 3.20 */
|
|
.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;
|
|
}
|
|
|
|
.geary-titlebar-left:dir(ltr),
|
|
.geary-titlebar-right:dir(rtl) {
|
|
border-top-right-radius: 0px;
|
|
}
|
|
.geary-titlebar-right:dir(ltr),
|
|
.geary-titlebar-left:dir(rtl) {
|
|
border-top-left-radius: 0px;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
#conversation_listbox {
|
|
padding: 18px;
|
|
}
|
|
#conversation_listbox > row {
|
|
margin: 0;
|
|
border: 1px solid @borders;
|
|
border-bottom-width: 0;
|
|
padding: 0;
|
|
box-shadow: 0 4px 8px 1px rgba(0,0,0,0.4);
|
|
transition: margin 0.1s;
|
|
}
|
|
#conversation_listbox > row > box {
|
|
background: @theme_base_color;
|
|
transition: background 0.25s;
|
|
}
|
|
#conversation_listbox > row:hover > box {
|
|
background: shade(@theme_base_color, 0.96);
|
|
}
|
|
#conversation_listbox > row.geary-expanded {
|
|
margin-bottom: 6px;
|
|
border-bottom-width: 1px;
|
|
}
|
|
#conversation_listbox > row.geary-last {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.geary-message .geary-message-summary {
|
|
margin: 12px;
|
|
}
|
|
.geary-message .geary-header-label {
|
|
margin-right: 6px;
|
|
}
|
|
.geary-message .geary-headers flowboxchild {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
.geary-submessages .geary-message {
|
|
background-image: linear-gradient(rgba(0,0,0,0.2), @bg_color 6px);
|
|
}
|
|
|
|
.geary-composer-embed headerbar {
|
|
border-top: 1px solid @borders;
|
|
border-radius: 0px;
|
|
}
|
|
|
|
#user_message {
|
|
border: 1px solid @borders;
|
|
border-left: 0;
|
|
border-right: 0;
|
|
background: @theme_base_color;
|
|
}
|