geary/ui/geary.css
Michael James Gratton 9f1854548d Scroll to a useful location when a conversation is first loaded.
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.
2016-10-04 10:58:17 +11:00

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;
}