geary/ui/geary.css

492 lines
9.6 KiB
CSS
Raw Normal View History

/*
* Copyright 2016 Software Freedom Conservancy Inc.
* Copyright 2016, 2017 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.
*/
/* MainWindow */
.geary-folder-frame > border {
border-left-width: 0;
border-top-width: 0;
border-right-width: 0;
}
.geary-folder-frame {
min-width: 300px;
}
geary-conversation-list revealer {
margin: 6px;
}
.geary-conversation-frame > border {
border-left-width: 0;
border-top-width: 0;
border-right-width: 0;
min-width: 360px;
}
geary-conversation-viewer {
min-width: 360px;
}
.geary-sidebar-pane-separator.vertical .conversation-frame > border {
border-bottom-width: 0;
}
.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;
}
.geary-info-bar-stack > border {
border-width: 0;
border-left-width: 0;
border-right-width: 0;
}
infobar flowboxchild {
padding: 0px;
}
revealer components-conversation-actions {
border: solid @borders;
border-top-width: 1px;
padding: 6px;
}
/* FolderPopover */
.geary-folder-popover-list {
border: 1px solid @borders;
border-radius: 3px;
padding: 0px;
}
row.geary-folder-popover-list-row {
padding: 6px;
border-bottom: 1px solid @borders;
}
row.geary-folder-popover-list-row:last-child {
border-bottom: none;
}
row.geary-folder-popover-list-row > label {
color: @theme_text_color;
}
/* ConversationListBox */
Break out ListBox used to display conversations into standalone widget. The conversation viewer's ListBox is sufficiently complex to warrant its own widget. Use empty placeholders for the list per the HIG, and correctly fix mamagement of empty folder vs no conversations selected this time. * src/client/application/geary-controller.vala (GearyController): Directly manage secondary parts of the conversation viewer, since the controller since it has a better and more timely idea of when a conversation change is due to folder loading status or from the user selecting conversations, and so the viwer doesn't need to hook back into the controller. Remove the now-unused conversations_selected signal and its callers. * src/client/conversation-viewer/conversation-listbox.vala: New widget for displaying the list of emails for a conversation. Moved relevant code from ConversationViewer here. Made adding emails async to get better UI responsiveness. Don't implement anything to handle conversation changes or emptying the list. * src/client/conversation-viewer/conversation-viewer.vala: Replace user messages - empty folder/search & no/multiple messages selected with new EmptyPlaceholder. Remove a lot of the state manage code needed when managing the email listbox. Add a new ConversationListBox for every new conversation and just throw away. * src/client/conversation-list/conversation-list-view.vala (ConversationListView): Clean up firing the conversations_selected signal - don't actually emit it when the model is clearing, and don't bother delaying the check either. * src/client/components/empty-placeholder.vala: New widget for displaying empty list and grid placeholders per the HIG. * src/client/conversation-viewer/conversation-email.vala (ConversationEmail): Make manually read a property, since it effectively is one. * src/CMakeLists.txt: Include new source files. * po/POTFILES.in: Include new source and UI files, and some missing ones. * ui/CMakeLists.txt: Include new UI files. * ui/conversation-viewer.ui: Replace user message and splash page with placeholders for the new empty placeholders(!). * ui/empty-placeholder.ui: UI def for new widget class. * ui/geary.css: Chase widget name/class changes, style new empty placeholder UI.
2016-07-25 10:33:42 +10:00
.conversation-listbox {
padding: 0px 12px;
}
Break out ListBox used to display conversations into standalone widget. The conversation viewer's ListBox is sufficiently complex to warrant its own widget. Use empty placeholders for the list per the HIG, and correctly fix mamagement of empty folder vs no conversations selected this time. * src/client/application/geary-controller.vala (GearyController): Directly manage secondary parts of the conversation viewer, since the controller since it has a better and more timely idea of when a conversation change is due to folder loading status or from the user selecting conversations, and so the viwer doesn't need to hook back into the controller. Remove the now-unused conversations_selected signal and its callers. * src/client/conversation-viewer/conversation-listbox.vala: New widget for displaying the list of emails for a conversation. Moved relevant code from ConversationViewer here. Made adding emails async to get better UI responsiveness. Don't implement anything to handle conversation changes or emptying the list. * src/client/conversation-viewer/conversation-viewer.vala: Replace user messages - empty folder/search & no/multiple messages selected with new EmptyPlaceholder. Remove a lot of the state manage code needed when managing the email listbox. Add a new ConversationListBox for every new conversation and just throw away. * src/client/conversation-list/conversation-list-view.vala (ConversationListView): Clean up firing the conversations_selected signal - don't actually emit it when the model is clearing, and don't bother delaying the check either. * src/client/components/empty-placeholder.vala: New widget for displaying empty list and grid placeholders per the HIG. * src/client/conversation-viewer/conversation-email.vala (ConversationEmail): Make manually read a property, since it effectively is one. * src/CMakeLists.txt: Include new source files. * po/POTFILES.in: Include new source and UI files, and some missing ones. * ui/CMakeLists.txt: Include new UI files. * ui/conversation-viewer.ui: Replace user message and splash page with placeholders for the new empty placeholders(!). * ui/empty-placeholder.ui: UI def for new widget class. * ui/geary.css: Chase widget name/class changes, style new empty placeholder UI.
2016-07-25 10:33:42 +10:00
.conversation-listbox > row {
padding: 0;
}
.conversation-listbox *.geary-matched *.geary-match {
color: @theme_selected_fg_color;
background: @theme_selected_bg_color;
}
.conversation-listbox > row.geary-loading {
border-top-width: 0px;
padding: 6px;
border-top-left-radius: 0px;
-gtk-outline-top-left-radius: 0px;
border-top-right-radius: 0px;
-gtk-outline-top-right-radius: 0px;
}
.conversation-listbox.content > row:first-child:not(.geary-loading) {
margin-top: 12px;
transition: 0;
}
.conversation-listbox.content > row:last-child {
margin-bottom: 12px;
}
.conversation-listbox.content > row:last-child,
.conversation-listbox.content > row.geary-expanded-previous-sibling,
.conversation-listbox.content > row.geary-expanded {
border-width: 1px;
}
.geary-expanded:not(:first-child), .geary-expanded + row {
border-top-left-radius: 8px;
-gtk-outline-top-left-radius: 7px;
border-top-right-radius: 8px;
-gtk-outline-top-right-radius: 7px;
margin-top: 6px;
}
.geary-expanded,
.geary-expanded-previous-sibling {
border-bottom-left-radius: 8px;
-gtk-outline-bottom-left-radius: 7px;
border-bottom-right-radius: 8px;
-gtk-outline-bottom-right-radius: 7px;
margin-bottom: 6px
}
.geary-expanded webkitwebview {
border-radius: 8px;
}
/* ConversationEmail */
.geary-unread grid.geary-message-summary {
border-color: @theme_selected_bg_color;
transition: border 0.25s;
}
.geary-expanded > .geary_email grid.geary-message-summary,
.geary-expanded + row > .geary_email grid.geary-message-summary {
border-top-left-radius: 8px;
-gtk-outline-top-left-radius: 7px;
border-top-right-radius: 8px;
-gtk-outline-top-right-radius: 7px;
}
/* ConversationMessage */
.geary-message infobar box {
border-width: 0;
}
.geary-message infobar box button {
background: alpha(black, 0.1);
color: alpha(@theme_text_color, 0.7);
border: none;
box-shadow: none;
}
.geary-message infobar box button:hover,
.geary-message infobar box button:checked {
background: alpha(black, 0.2);
color: @theme_text_color;
}
grid.geary-message-summary {
border-top: 4px solid transparent;
padding: 12px;
padding-top: 8px;
transition: border 4s;
}
.geary-headers label {
margin: 0;
padding: 1px;
}
2017-12-11 21:42:55 +11:00
.geary-headers label.geary-header:dir(ltr) {
padding-right: 6px;
}
2017-12-11 21:42:55 +11:00
.geary-headers label.geary-header:dir(rtl) {
padding-left: 6px;
}
.geary-headers flowboxchild {
margin: 0;
padding: 1px;
}
.geary-headers flowboxchild label {
margin: 0;
padding: 0;
}
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;
}
.geary-headers label.geary-from {
font-weight: bold;
}
.geary-header-value > flowboxchild:active {
background: mix(@theme_base_color, @theme_bg_color, 0.5);
}
.geary-header-value > flowboxchild:hover {
background: @theme_base_color;
}
2017-12-11 21:42:55 +11:00
.geary-header-value > flowboxchild label.dim-label:dir(ltr) {
margin-left: 6px;
}
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);
}
.geary-message .geary-placeholder-pane {
margin: 36px 16px;
}
.geary-message .geary-body-progress {
border: none;
background-color: transparent;
background-image: none;
padding-top: 0px;
padding-bottom: 0px;
margin-top: 0px;
margin-bottom: 0px;
}
.geary-message .geary-body-progress progress {
background-color: @theme_selected_bg_color;
background-image: none;
border: none;
min-height: 1px;
}
.geary-message .geary-body-progress trough {
border: none;
background-color: transparent;
background-image: none;
min-height: 1px;
}
/* ContactPopover */
.geary-contact-popover .dim-label {
font-size: 80%;
}
.geary-contact-popover .geary-deceptive {
font-weight: bold;
}
/* Composer */
geary-composer-box > border {
border-width: 0px;
}
geary-composer-editor > frame > border {
border-left-width: 0;
border-right-width: 0;
border-bottom-width: 0;
}
geary-composer-embed headerbar {
border-top-left-radius: 8px;
-gtk-outline-top-left-radius: 7px;
border-top-right-radius: 8px;
-gtk-outline-top-right-radius: 7px;
}
geary-composer-widget-header-row {
margin: 0 6px 6px 6px;
}
geary-composer-widget-header-row label {
margin: 0 6px;
}
geary-composer-widget .geary-attachments-box > box > box {
margin: 6px;
}
geary-composer-widget .geary-attachments-box > box > box > label {
margin: 0px 4px;
}
geary-composer-widget-header-row label {
}
/* AttachmentPane */
.geary-attachment-pane flowbox {
margin: 6px;
}
.geary-attachment-pane flowboxchild {
border-radius: 3px;
}
/* PlaceholderPane */
.geary-placeholder-pane.geary-has-text > image {
Break out ListBox used to display conversations into standalone widget. The conversation viewer's ListBox is sufficiently complex to warrant its own widget. Use empty placeholders for the list per the HIG, and correctly fix mamagement of empty folder vs no conversations selected this time. * src/client/application/geary-controller.vala (GearyController): Directly manage secondary parts of the conversation viewer, since the controller since it has a better and more timely idea of when a conversation change is due to folder loading status or from the user selecting conversations, and so the viwer doesn't need to hook back into the controller. Remove the now-unused conversations_selected signal and its callers. * src/client/conversation-viewer/conversation-listbox.vala: New widget for displaying the list of emails for a conversation. Moved relevant code from ConversationViewer here. Made adding emails async to get better UI responsiveness. Don't implement anything to handle conversation changes or emptying the list. * src/client/conversation-viewer/conversation-viewer.vala: Replace user messages - empty folder/search & no/multiple messages selected with new EmptyPlaceholder. Remove a lot of the state manage code needed when managing the email listbox. Add a new ConversationListBox for every new conversation and just throw away. * src/client/conversation-list/conversation-list-view.vala (ConversationListView): Clean up firing the conversations_selected signal - don't actually emit it when the model is clearing, and don't bother delaying the check either. * src/client/components/empty-placeholder.vala: New widget for displaying empty list and grid placeholders per the HIG. * src/client/conversation-viewer/conversation-email.vala (ConversationEmail): Make manually read a property, since it effectively is one. * src/CMakeLists.txt: Include new source files. * po/POTFILES.in: Include new source and UI files, and some missing ones. * ui/CMakeLists.txt: Include new UI files. * ui/conversation-viewer.ui: Replace user message and splash page with placeholders for the new empty placeholders(!). * ui/empty-placeholder.ui: UI def for new widget class. * ui/geary.css: Chase widget name/class changes, style new empty placeholder UI.
2016-07-25 10:33:42 +10:00
margin-bottom: 12px;
}
.geary-placeholder-pane > .title {
Break out ListBox used to display conversations into standalone widget. The conversation viewer's ListBox is sufficiently complex to warrant its own widget. Use empty placeholders for the list per the HIG, and correctly fix mamagement of empty folder vs no conversations selected this time. * src/client/application/geary-controller.vala (GearyController): Directly manage secondary parts of the conversation viewer, since the controller since it has a better and more timely idea of when a conversation change is due to folder loading status or from the user selecting conversations, and so the viwer doesn't need to hook back into the controller. Remove the now-unused conversations_selected signal and its callers. * src/client/conversation-viewer/conversation-listbox.vala: New widget for displaying the list of emails for a conversation. Moved relevant code from ConversationViewer here. Made adding emails async to get better UI responsiveness. Don't implement anything to handle conversation changes or emptying the list. * src/client/conversation-viewer/conversation-viewer.vala: Replace user messages - empty folder/search & no/multiple messages selected with new EmptyPlaceholder. Remove a lot of the state manage code needed when managing the email listbox. Add a new ConversationListBox for every new conversation and just throw away. * src/client/conversation-list/conversation-list-view.vala (ConversationListView): Clean up firing the conversations_selected signal - don't actually emit it when the model is clearing, and don't bother delaying the check either. * src/client/components/empty-placeholder.vala: New widget for displaying empty list and grid placeholders per the HIG. * src/client/conversation-viewer/conversation-email.vala (ConversationEmail): Make manually read a property, since it effectively is one. * src/CMakeLists.txt: Include new source files. * po/POTFILES.in: Include new source and UI files, and some missing ones. * ui/CMakeLists.txt: Include new UI files. * ui/conversation-viewer.ui: Replace user message and splash page with placeholders for the new empty placeholders(!). * ui/empty-placeholder.ui: UI def for new widget class. * ui/geary.css: Chase widget name/class changes, style new empty placeholder UI.
2016-07-25 10:33:42 +10:00
font-weight: bold;
}
/* 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;
}
/* Accounts.Editor */
grid.geary-account-view image:dir(ltr) {
margin-right: 6px;
}
grid.geary-account-view image:dir(rtl) {
margin-left: 6px;
}
grid.geary-welcome-panel {
margin-bottom: 32px;
}
label.geary-settings-heading {
font-weight: bold;
margin-top: 24px;
margin-bottom: 12px;
}
row.geary-settings entry {
border-width: 0px;
background-color: transparent;
}
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;
}
/* 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;
}
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;
}
frame.geary-settings.geary-signature {
min-height: 5em;
}
buttonbox.geary-settings {
margin-top: 36px;
}
popover.geary-editor > grid {
margin: 12px;
}
popover.geary-editor > grid > button.geary-setting-remove {
margin-top: 12px;
}
dialog.geary-remove-confirm .dialog-vbox {
margin: 12px;
}
dialog.geary-remove-confirm .dialog-action-box {
margin: 6px;
}
/* FolderList.Tree */
treeview.sidebar {
border: none;
}
treeview.sidebar .cell {
padding: 9px 6px;
}
treeview.sidebar .cell:dir(ltr) {
padding-left: 0px;
}
treeview.sidebar .cell:dir(rtl) {
padding-right: 0px;
}
treeview.sidebar:drop(active).after,
treeview.sidebar:drop(active).before,
treeview.sidebar:drop(active).into {
border-top: 1px solid @borders;
border-bottom: 1px solid @borders;
}
/* Inspector */
.geary-inspector-log-viewer .sidebar row > grid {
padding: 0 6px;
}
.geary-inspector-log-viewer .sidebar row > grid * {
margin: 4px;
}
/* Upgrade dialog */
dialog.geary-upgrade grid {
margin: 12px;
}
dialog.geary-upgrade label {
margin-top: 12px;
}