diff options
author | Carlos Soriano <csoriano@gnome.org> | 2015-05-06 23:07:17 +0200 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2015-06-16 16:19:37 +0200 |
commit | fbbad5deecb635af34a890a540e8e272b95c4d9b (patch) | |
tree | 90289307eaecc1d91065d3088a5c12c05619bcc1 | |
parent | d881b1534914398046f7e5237321f978ff073441 (diff) | |
download | gtk+-fbbad5deecb635af34a890a540e8e272b95c4d9b.tar.gz |
gtkplacesidebar: use GtkListBox
We were using GTkTreeView in a simple list. Also, as we know,
GtkCellRenderers are not the best way to theme and manipulate
widgets.
So instead use a GtkListBox to modernize the GtkPlacesSidebar,
and in the way clean up some parts of the code (like headings)
which were not used anymore.
Also we don't use a model anymore, since the data is simple
enough to manage it in a subclass of the row itself.
-rw-r--r-- | gtk/Makefile.am | 6 | ||||
-rw-r--r-- | gtk/gtkplacessidebar.c | 2692 | ||||
-rw-r--r-- | gtk/gtkplacessidebarprivate.h | 54 | ||||
-rw-r--r-- | gtk/gtksidebarrow.c | 629 | ||||
-rw-r--r-- | gtk/gtksidebarrowprivate.h | 53 | ||||
-rw-r--r-- | gtk/theme/Adwaita/_colors.scss | 4 | ||||
-rw-r--r-- | gtk/theme/Adwaita/_common.scss | 84 | ||||
-rw-r--r-- | gtk/theme/Adwaita/gtk-contained-dark.css | 378 | ||||
-rw-r--r-- | gtk/theme/Adwaita/gtk-contained.css | 378 | ||||
-rw-r--r-- | gtk/ui/gtksidebarrow.ui | 86 |
10 files changed, 2283 insertions, 2081 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 72ee47fdff..50e8efb21f 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -474,6 +474,7 @@ gtk_private_h_sources = \ gtkorientableprivate.h \ gtkpango.h \ gtkpathbar.h \ + gtkplacessidebarprivate.h \ gtkpopoverprivate.h \ gtkprintoperation-private.h \ gtkprintutils.h \ @@ -496,6 +497,7 @@ gtk_private_h_sources = \ gtksearchenginesimple.h \ gtksearchentryprivate.h \ gtkselectionprivate.h \ + gtksidebarrowprivate.h \ gtksettingsprivate.h \ gtksizegroup-private.h \ gtksizerequestcacheprivate.h \ @@ -793,6 +795,7 @@ gtk_base_c_sources = \ gtkseparatormenuitem.c \ gtkseparatortoolitem.c \ gtksettings.c \ + gtksidebarrow.c \ gtksizegroup.c \ gtksizerequest.c \ gtksizerequestcache.c \ @@ -1086,7 +1089,8 @@ templates = \ ui/gtksearchbar.ui \ ui/gtkscalebutton.ui \ ui/gtkstatusbar.ui \ - ui/gtkvolumebutton.ui + ui/gtkvolumebutton.ui \ + ui/gtksidebarrow.ui # # rules to generate built sources diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index a2ba83d6f5..63a74dde3b 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -20,6 +20,7 @@ * Authors : Mr Jamie McCracken (jamiemcc at blueyonder dot co dot uk) * Cosimo Cecchi <cosimoc@gnome.org> * Federico Mena Quintero <federico@gnome.org> + * Carlos Soriano <csoriano@gnome.org> * */ @@ -45,6 +46,8 @@ #include <gio/gio.h> +#include "gtkplacessidebarprivate.h" +#include "gtksidebarrowprivate.h" #include "gdk/gdkkeysyms.h" #include "gtkbookmarksmanager.h" #include "gtkcelllayout.h" @@ -62,14 +65,17 @@ #include "gtkseparatormenuitem.h" #include "gtksettings.h" #include "gtktrashmonitor.h" -#include "gtktreeselection.h" -#include "gtktreednd.h" #include "gtktypebuiltins.h" #include "gtkwindow.h" #include "gtkpopover.h" #include "gtkgrid.h" #include "gtklabel.h" #include "gtkbutton.h" +#include "gtklistbox.h" +#include "gtkselection.h" +#include "gtkdnd.h" +#include "gtkseparator.h" +#include "gtkentry.h" /** * SECTION:gtkplacessidebar @@ -101,10 +107,6 @@ * location. */ -#define EJECT_BUTTON_XPAD 8 -#define ICON_CELL_XPAD 8 -#define TIMEOUT_EXPAND 500 - /* These are used when a destination-side DND operation is taking place. * Normally, when a common drag action is taking place, the state will be * DROP_STATE_NEW_BOOKMARK_ARMED, however, if the client of GtkPlacesSidebar @@ -121,10 +123,9 @@ typedef enum { struct _GtkPlacesSidebar { GtkScrolledWindow parent; - GtkTreeView *tree_view; - GtkCellRenderer *eject_icon_cell_renderer; - GtkCellRenderer *text_cell_renderer; - GtkListStore *store; + GtkWidget *list_box; + GtkWidget *new_bookmark_row; + GtkBookmarksManager *bookmarks_manager; GVolumeMonitor *volume_monitor; GtkTrashMonitor *trash_monitor; @@ -139,13 +140,19 @@ struct _GtkPlacesSidebar { gulong trash_monitor_changed_id; - gboolean devices_header_added; - gboolean bookmarks_header_added; - /* DND */ GList *drag_list; /* list of GFile */ gint drag_data_info; gboolean dragging_over; + GtkTargetList *source_targets; + GtkWidget *drag_row; + gint drag_row_height; + gint drag_row_x; + gint drag_row_y; + gint drag_root_x; + gint drag_root_y; + GtkWidget *row_placeholder; + DropState drop_state; /* volume mounting - delayed open process */ GtkPlacesOpenFlags go_to_after_mount_open_flags; @@ -160,11 +167,6 @@ struct _GtkPlacesSidebar { GtkPlacesOpenFlags open_flags; - DropState drop_state; - guint drag_leave_timeout_id; - gchar *drop_target_uri; - guint switch_location_timer; - guint mounting : 1; guint drag_data_received : 1; guint drop_occured : 1; @@ -205,43 +207,6 @@ struct _GtkPlacesSidebarClass { }; enum { - PLACES_SIDEBAR_COLUMN_ROW_TYPE, - PLACES_SIDEBAR_COLUMN_URI, - PLACES_SIDEBAR_COLUMN_DRIVE, - PLACES_SIDEBAR_COLUMN_VOLUME, - PLACES_SIDEBAR_COLUMN_MOUNT, - PLACES_SIDEBAR_COLUMN_NAME, - PLACES_SIDEBAR_COLUMN_GICON, - PLACES_SIDEBAR_COLUMN_INDEX, - PLACES_SIDEBAR_COLUMN_EJECT, - PLACES_SIDEBAR_COLUMN_NO_EJECT, - PLACES_SIDEBAR_COLUMN_BOOKMARK, - PLACES_SIDEBAR_COLUMN_TOOLTIP, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, - PLACES_SIDEBAR_COLUMN_HEADING_TEXT, - PLACES_SIDEBAR_COLUMN_SENSITIVE, - PLACES_SIDEBAR_COLUMN_COUNT -}; - -typedef enum { - PLACES_BUILT_IN, - PLACES_XDG_DIR, - PLACES_MOUNTED_VOLUME, - PLACES_BOOKMARK, - PLACES_HEADING, - PLACES_CONNECT_TO_SERVER, - PLACES_ENTER_LOCATION, - PLACES_DROP_FEEDBACK -} PlaceType; - -typedef enum { - SECTION_DEVICES, - SECTION_BOOKMARKS, - SECTION_COMPUTER, - SECTION_NETWORK -} SectionType; - -enum { OPEN_LOCATION, POPULATE_POPUP, SHOW_ERROR_MESSAGE, @@ -287,59 +252,39 @@ enum { static guint places_sidebar_signals [LAST_SIGNAL] = { 0 }; static GParamSpec *properties[NUM_PROPERTIES] = { NULL, }; -static void open_selected_bookmark (GtkPlacesSidebar *sidebar, - GtkTreeModel *model, - GtkTreeIter *iter, - GtkPlacesOpenFlags open_flags); -static gboolean eject_or_unmount_bookmark (GtkPlacesSidebar *sidebar, - GtkTreePath *path); -static gboolean eject_or_unmount_selection (GtkPlacesSidebar *sidebar); -static void check_unmount_and_eject (GMount *mount, - GVolume *volume, - GDrive *drive, - gboolean *show_unmount, - gboolean *show_eject); -static int bookmarks_get_first_index (GtkPlacesSidebar *sidebar); +static gboolean eject_or_unmount_bookmark (GtkSidebarRow *row); +static gboolean eject_or_unmount_selection (GtkPlacesSidebar *sidebar); +static void check_unmount_and_eject (GMount *mount, + GVolume *volume, + GDrive *drive, + gboolean *show_unmount, + gboolean *show_eject); +static gboolean on_button_press_event (GtkWidget *widget, + GdkEventButton *event, + GtkSidebarRow *sidebar); +static gboolean on_button_release_event (GtkWidget *widget, + GdkEventButton *event, + GtkSidebarRow *sidebar); +static void stop_drop_feedback (GtkPlacesSidebar *sidebar); + /* Identifiers for target types */ enum { - GTK_TREE_MODEL_ROW, - TEXT_URI_LIST + DND_UNKNOWN, + DND_GTK_SIDEBAR_ROW, + DND_TEXT_URI_LIST }; /* Target types for dragging from the shortcuts list */ static const GtkTargetEntry dnd_source_targets[] = { - { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW } + { "DND_GTK_SIDEBAR_ROW", GTK_TARGET_SAME_WIDGET, DND_GTK_SIDEBAR_ROW } }; /* Target types for dropping into the shortcuts list */ static const GtkTargetEntry dnd_drop_targets [] = { - { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW } + { "DND_GTK_SIDEBAR_ROW", GTK_TARGET_SAME_WIDGET, DND_GTK_SIDEBAR_ROW } }; -/* Drag and drop interface declarations */ -typedef struct { - GtkListStore parent; - - GtkPlacesSidebar *sidebar; -} ShortcutsModel; - -typedef struct { - GtkListStoreClass parent_class; -} ShortcutsModelClass; - -#define SHORTCUTS_MODEL_TYPE (shortcuts_model_get_type ()) -#define SHORTCUTS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHORTCUTS_MODEL_TYPE, ShortcutsModel)) - -static GType shortcuts_model_get_type (void); -static void shortcuts_model_drag_source_iface_init (GtkTreeDragSourceIface *iface); - -G_DEFINE_TYPE_WITH_CODE (ShortcutsModel, shortcuts_model, GTK_TYPE_LIST_STORE, - G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE, - shortcuts_model_drag_source_iface_init)); - -static GtkListStore *shortcuts_model_new (GtkPlacesSidebar *sidebar); - G_DEFINE_TYPE (GtkPlacesSidebar, gtk_places_sidebar, GTK_TYPE_SCROLLED_WINDOW); static void @@ -355,7 +300,7 @@ emit_open_location (GtkPlacesSidebar *sidebar, } static void -emit_populate_popup (GtkPlacesSidebar *sidebar, +emit_populate_popup (GtkPlacesSidebar *sidebar, GtkMenu *menu, GFile *selected_item, GVolume *selected_volume) @@ -420,83 +365,56 @@ emit_drag_perform_drop (GtkPlacesSidebar *sidebar, g_signal_emit (sidebar, places_sidebar_signals[DRAG_PERFORM_DROP], 0, dest_file, source_file_list, action); } - -static gint -get_icon_size (GtkPlacesSidebar *sidebar) -{ - gint width, height; - - if (gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height)) - return MAX (width, height); - else - return 16; -} - -static GtkTreeIter -add_heading (GtkPlacesSidebar *sidebar, - SectionType section_type, - const gchar *title) +static void +list_box_header_func (GtkListBoxRow *row, + GtkListBoxRow *before, + gpointer user_data) { - GtkTreeIter iter; - - gtk_list_store_append (sidebar->store, &iter); - gtk_list_store_set (sidebar->store, &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, PLACES_HEADING, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, section_type, - PLACES_SIDEBAR_COLUMN_HEADING_TEXT, title, - PLACES_SIDEBAR_COLUMN_EJECT, FALSE, - PLACES_SIDEBAR_COLUMN_NO_EJECT, TRUE, - -1); + GtkPlacesSidebarSectionType row_section_type; + GtkPlacesSidebarSectionType before_section_type; + GtkWidget *separator; - return iter; -} + gtk_list_box_row_set_header (row, NULL); -static void -check_heading_for_section (GtkPlacesSidebar *sidebar, - SectionType section_type) -{ - switch (section_type) + g_object_get (row, "section-type", &row_section_type, NULL); + if (before) { - case SECTION_DEVICES: - if (!sidebar->devices_header_added) - { - add_heading (sidebar, SECTION_DEVICES, _("Devices")); - sidebar->devices_header_added = TRUE; - } - break; - - case SECTION_BOOKMARKS: - if (!sidebar->bookmarks_header_added) - { - add_heading (sidebar, SECTION_BOOKMARKS, _("Bookmarks")); - sidebar->bookmarks_header_added = TRUE; - } - break; + g_object_get (before, "section-type", &before_section_type, NULL); + } + else + { + before_section_type = SECTION_INVALID; + gtk_widget_set_margin_top (GTK_WIDGET (row), 4); + } - default: - break; - } + if (before && before_section_type != row_section_type) + { + separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_margin_top (separator, 4); + gtk_widget_set_margin_bottom (separator, 4); + gtk_list_box_row_set_header (row, separator); + } } -static void -add_place (GtkPlacesSidebar *sidebar, - PlaceType place_type, - SectionType section_type, - const gchar *name, - GIcon *icon, - const gchar *uri, - GDrive *drive, - GVolume *volume, - GMount *mount, - const gint index, - const gchar *tooltip) -{ - GtkTreeIter iter; +static GtkWidget* +add_place (GtkPlacesSidebar *sidebar, + GtkPlacesSidebarPlaceType place_type, + GtkPlacesSidebarSectionType section_type, + const gchar *name, + GIcon *icon, + const gchar *uri, + GDrive *drive, + GVolume *volume, + GMount *mount, + const gint index, + const gchar *tooltip) +{ gboolean show_eject, show_unmount; gboolean show_eject_button; gchar *tooltip_escaped; - - check_heading_for_section (sidebar, section_type); + GtkWidget *row; + GtkWidget *eject_button; + GtkWidget *event_box; check_unmount_and_eject (mount, volume, drive, &show_unmount, &show_eject); @@ -510,26 +428,36 @@ add_place (GtkPlacesSidebar *sidebar, show_eject_button = (show_unmount || show_eject); tooltip_escaped = g_markup_escape_text (tooltip, -1); - - gtk_list_store_append (sidebar->store, &iter); - gtk_list_store_set (sidebar->store, &iter, - PLACES_SIDEBAR_COLUMN_GICON, icon, - PLACES_SIDEBAR_COLUMN_NAME, name, - PLACES_SIDEBAR_COLUMN_URI, uri, - PLACES_SIDEBAR_COLUMN_DRIVE, drive, - PLACES_SIDEBAR_COLUMN_VOLUME, volume, - PLACES_SIDEBAR_COLUMN_MOUNT, mount, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, place_type, - PLACES_SIDEBAR_COLUMN_INDEX, index, - PLACES_SIDEBAR_COLUMN_EJECT, show_eject_button, - PLACES_SIDEBAR_COLUMN_NO_EJECT, !show_eject_button, - PLACES_SIDEBAR_COLUMN_BOOKMARK, place_type != PLACES_BOOKMARK, - PLACES_SIDEBAR_COLUMN_TOOLTIP, tooltip_escaped, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, section_type, - PLACES_SIDEBAR_COLUMN_SENSITIVE, TRUE, - -1); + row = g_object_new (GTK_TYPE_SIDEBAR_ROW, + "sidebar", sidebar, + "icon", icon, + "label", name, + "tooltip", tooltip_escaped, + "ejectable", show_eject_button, + "order-index", index, + "section-type", section_type, + "place-type", place_type, + "uri", uri, + "drive", drive, + "volume", volume, + "mount", mount, + NULL); g_free (tooltip_escaped); + g_object_get (row, + "eject-button", &eject_button, + "event-box", &event_box, + NULL); + g_signal_connect_swapped (eject_button, "clicked", G_CALLBACK (eject_or_unmount_bookmark), row); + /* Needs event box since GtkListBoxRow doesn't have a GdkWindow associated that can + * listen events */ + g_signal_connect (event_box, "button-press-event", G_CALLBACK (on_button_press_event), row); + g_signal_connect (event_box, "button-release-event", G_CALLBACK (on_button_release_event), row); + + gtk_container_add (GTK_CONTAINER (sidebar->list_box), GTK_WIDGET (row)); + gtk_widget_show_all (row); + + return row; } static GIcon * @@ -657,7 +585,6 @@ add_special_dirs (GtkPlacesSidebar *sidebar) path_is_home_dir (path) || g_list_find_custom (dirs, path, (GCompareFunc) g_strcmp0) != NULL) continue; - root = g_file_new_for_path (path); @@ -737,32 +664,30 @@ static gboolean file_is_shown (GtkPlacesSidebar *sidebar, GFile *file) { - GtkTreeIter iter; gchar *uri; + GList *rows; + GList *l; + gboolean found = FALSE; - if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) - return FALSE; - - do + rows = gtk_container_get_children (GTK_CONTAINER (sidebar->list_box)); + l = rows; + while (l != NULL && !found) { - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); + g_object_get (GTK_SIDEBAR_ROW (l->data), "uri", &uri, NULL); if (uri) { GFile *other; - gboolean found; other = g_file_new_for_uri (uri); - g_free (uri); found = g_file_equal (file, other); g_object_unref (other); - if (found) - return TRUE; } + + l = l->next; } - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter)); - return FALSE; + g_list_free (rows); + + return found; } static void @@ -835,17 +760,6 @@ add_application_shortcuts (GtkPlacesSidebar *sidebar) } } -static gboolean -get_selected_iter (GtkPlacesSidebar *sidebar, - GtkTreeIter *iter) -{ - GtkTreeSelection *selection; - - selection = gtk_tree_view_get_selection (sidebar->tree_view); - - return gtk_tree_selection_get_selected (selection, NULL, iter); -} - typedef struct { GtkPlacesSidebar *sidebar; int index; @@ -913,8 +827,6 @@ out: static void update_places (GtkPlacesSidebar *sidebar) { - GtkTreeIter iter; - GVolumeMonitor *volume_monitor; GList *mounts, *l, *ll; GMount *mount; GList *drives; @@ -924,17 +836,19 @@ update_places (GtkPlacesSidebar *sidebar) GSList *bookmarks, *sl; gint index; gchar *original_uri, *mount_uri, *name, *identifier; + GtkListBoxRow *selected; gchar *home_uri; GIcon *icon; GFile *root; gchar *tooltip; GList *network_mounts, *network_volumes; + GIcon *new_bookmark_icon; + GtkStyleContext *context; /* save original selection */ - if (get_selected_iter (sidebar, &iter)) - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), - &iter, - PLACES_SIDEBAR_COLUMN_URI, &original_uri, -1); + selected = gtk_list_box_get_selected_row (GTK_LIST_BOX (sidebar->list_box)); + if (selected) + g_object_get (GTK_SIDEBAR_ROW (selected), "uri", &original_uri, NULL); else original_uri = NULL; @@ -943,16 +857,16 @@ update_places (GtkPlacesSidebar *sidebar) g_object_unref (sidebar->cancellable); sidebar->cancellable = g_cancellable_new (); - gtk_list_store_clear (sidebar->store); - - sidebar->devices_header_added = FALSE; - sidebar->bookmarks_header_added = FALSE; + /* Reset drag state, just in case we update the places while dragging or + * ending a drag */ + stop_drop_feedback (sidebar); + gtk_container_foreach (GTK_CONTAINER (sidebar->list_box), + (GtkCallback) gtk_widget_destroy, + NULL); network_mounts = network_volumes = NULL; - volume_monitor = sidebar->volume_monitor; - - /* add built-in bookmarks */ + /* add built-in places */ if (should_show_recent (sidebar)) { mount_uri = "recent:///"; @@ -1024,7 +938,7 @@ update_places (GtkPlacesSidebar *sidebar) add_application_shortcuts (sidebar); /* go through all connected drives */ - drives = g_volume_monitor_get_connected_drives (volume_monitor); + drives = g_volume_monitor_get_connected_drives (sidebar->volume_monitor); for (l = drives; l != NULL; l = l->next) { @@ -1123,7 +1037,7 @@ update_places (GtkPlacesSidebar *sidebar) g_list_free (drives); /* add all volumes that is not associated with a drive */ - volumes = g_volume_monitor_get_volumes (volume_monitor); + volumes = g_volume_monitor_get_volumes (sidebar->volume_monitor); for (l = volumes; l != NULL; l = l->next) { volume = l->data; @@ -1175,13 +1089,12 @@ update_places (GtkPlacesSidebar *sidebar) NULL, volume, NULL, 0, name); g_object_unref (icon); g_free (name); - } + } g_object_unref (volume); } g_list_free (volumes); /* file system root */ - mount_uri = "file:///"; /* No need to strdup */ icon = g_themed_icon_new_with_default_fallbacks (ICON_NAME_FILESYSTEM); add_place (sidebar, PLACES_BUILT_IN, @@ -1192,7 +1105,7 @@ update_places (GtkPlacesSidebar *sidebar) g_object_unref (icon); /* add mounts that has no volume (/etc/mtab mounts, ftp, sftp,...) */ - mounts = g_volume_monitor_get_mounts (volume_monitor); + mounts = g_volume_monitor_get_mounts (sidebar->volume_monitor); for (l = mounts; l != NULL; l = l->next) { @@ -1236,7 +1149,6 @@ update_places (GtkPlacesSidebar *sidebar) g_list_free (mounts); /* add bookmarks */ - bookmarks = _gtk_bookmarks_manager_list_bookmarks (sidebar->bookmarks_manager); for (sl = bookmarks, index = 0; sl; sl = sl->next, index++) @@ -1275,11 +1187,20 @@ update_places (GtkPlacesSidebar *sidebar) g_slist_foreach (bookmarks, (GFunc) g_object_unref, NULL); g_slist_free (bookmarks); + /* Add new bookmark row */ + new_bookmark_icon = g_themed_icon_new ("bookmark-new-symbolic"); + sidebar->new_bookmark_row = add_place (sidebar, PLACES_DROP_FEEDBACK, + SECTION_BOOKMARKS, + _("New bookmark"), new_bookmark_icon, NULL, + NULL, NULL, NULL, 0, + _("Add a new bookmark")); + context = gtk_widget_get_style_context (sidebar->new_bookmark_row); + gtk_style_context_add_class (context, "sidebar-new-bookmark-row"); + g_object_unref (new_bookmark_icon); + /* network */ if (!sidebar->local_only) { - add_heading (sidebar, SECTION_NETWORK, _("Network")); - mount_uri = "network:///"; icon = g_themed_icon_new_with_default_fallbacks (ICON_NAME_NETWORK); add_place (sidebar, PLACES_BUILT_IN, @@ -1351,6 +1272,10 @@ update_places (GtkPlacesSidebar *sidebar) g_list_free_full (network_volumes, g_object_unref); g_list_free_full (network_mounts, g_object_unref); + gtk_widget_show_all (GTK_WIDGET (sidebar)); + /* We want this hidden by default, but need to do it after the show_all call */ + gtk_sidebar_row_hide (GTK_SIDEBAR_ROW (sidebar->new_bookmark_row), TRUE); + /* restore original selection */ if (original_uri) { @@ -1359,283 +1284,124 @@ update_places (GtkPlacesSidebar *sidebar) restore = g_file_new_for_uri (original_uri); gtk_places_sidebar_set_location (sidebar, restore); g_object_unref (restore); - - g_free (original_uri); - } -} - -static gboolean -over_eject_button (GtkPlacesSidebar *sidebar, - gint x, - gint y, - GtkTreePath **path) -{ - GtkTreeViewColumn *column; - gint width, x_offset, hseparator; - gint eject_button_size; - gboolean show_eject; - GtkTreeIter iter; - GtkTreeModel *model; - - *path = NULL; - model = gtk_tree_view_get_model (sidebar->tree_view); - - if (gtk_tree_view_get_path_at_pos (sidebar->tree_view, - x, y, path, &column, NULL, NULL)) - { - gtk_tree_model_get_iter (model, &iter, *path); - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_EJECT, &show_eject, - -1); - - if (!show_eject) - goto out; - - gtk_widget_style_get (GTK_WIDGET (sidebar->tree_view), - "horizontal-separator", &hseparator, - NULL); - - /* Reload cell attributes for this particular row */ - gtk_tree_view_column_cell_set_cell_data (column, - model, &iter, FALSE, FALSE); - - gtk_tree_view_column_cell_get_position (column, - sidebar->eject_icon_cell_renderer, - &x_offset, &width); - - eject_button_size = get_icon_size (sidebar); - - /* This is kinda weird, but we have to do it to workaround expanding - * the eject cell renderer (even thought we told it not to) and we - * then had to set it right-aligned - */ - x_offset += width - hseparator - EJECT_BUTTON_XPAD - eject_button_size; - - if (x - x_offset >= 0 && x - x_offset <= eject_button_size) - return TRUE; } - - out: - g_clear_pointer (path, gtk_tree_path_free); - - return FALSE; -} - -static gboolean -clicked_eject_button (GtkPlacesSidebar *sidebar, - GtkTreePath **path) -{ - GdkEvent *event; - - event = gtk_get_current_event (); - - if (event && - (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) && - over_eject_button (sidebar, ((GdkEventButton *)event)->x, ((GdkEventButton *)event)->y, path)) - return TRUE; - - return FALSE; } static gboolean -pos_is_into_or_before (GtkTreeViewDropPosition pos) -{ - return (pos == GTK_TREE_VIEW_DROP_BEFORE || pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE); -} - -static void -update_possible_drop_targets (GtkPlacesSidebar *sidebar, - gboolean dragging) +check_valid_drop_target (GtkPlacesSidebar *sidebar, + GtkSidebarRow *row, + GdkDragContext *context) { - GtkTreeIter iter; - PlaceType place_type; + GtkPlacesSidebarPlaceType place_type; + GtkPlacesSidebarSectionType section_type; + gboolean valid = FALSE; gchar *uri; - gboolean sensitive; - - if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) - return; + GFile *dest_file; + gint drag_action; - do - { - sensitive = TRUE; - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - if (dragging) - { - switch (place_type) - { - case PLACES_CONNECT_TO_SERVER: - sensitive = FALSE; - break; - case PLACES_BUILT_IN: - if (g_strcmp0 (uri, "recent:///") == 0) - sensitive = FALSE; - - break; - default: - break; - } - } + if (row == NULL) + return FALSE; - gtk_list_store_set (sidebar->store, &iter, - PLACES_SIDEBAR_COLUMN_SENSITIVE, sensitive, - -1); - g_free (uri); - } - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter)); -} + g_object_get (row, + "place-type", &place_type, + "section_type", §ion_type, + "uri", &uri, + NULL); -/* Computes the appropriate row and position for dropping */ -static gboolean -compute_drop_position (GtkTreeView *tree_view, - gint x, - gint y, - GtkTreePath **path, - GtkTreeViewDropPosition *pos, - GtkPlacesSidebar *sidebar) -{ - GtkTreeModel *model; - GtkTreeIter iter; - PlaceType place_type; - SectionType section_type; - gboolean drop_possible; - - if (!gtk_tree_view_get_dest_row_at_pos (tree_view, x, y, path, pos)) + if (place_type == PLACES_CONNECT_TO_SERVER) return FALSE; - model = gtk_tree_view_get_model (tree_view); + if (place_type == PLACES_DROP_FEEDBACK) + return TRUE; - gtk_tree_model_get_iter (model, &iter, *path); - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type, - -1); + /* Disallow drops on recent:/// */ + if (place_type == PLACES_BUILT_IN) + { + gchar *uri; - drop_possible = TRUE; + g_object_get (row, "uri", &uri, NULL); - /* Normalize drops on the feedback row */ - if (place_type == PLACES_DROP_FEEDBACK) - { - *pos = GTK_TREE_VIEW_DROP_INTO_OR_BEFORE; - goto out; + if (g_strcmp0 (uri, "recent:///") == 0) + return FALSE; } - /* Never drop on headings, but special case the bookmarks heading, - * so we can drop bookmarks in between it and the first bookmark. - */ - if (place_type == PLACES_HEADING && section_type != SECTION_BOOKMARKS) - drop_possible = FALSE; - /* Dragging a bookmark? */ if (sidebar->drag_data_received && - sidebar->drag_data_info == GTK_TREE_MODEL_ROW) + sidebar->drag_data_info == DND_GTK_SIDEBAR_ROW) { /* Don't allow reordering bookmarks into non-bookmark areas */ - if (section_type != SECTION_BOOKMARKS) - drop_possible = FALSE; - - /* Bookmarks can only be reordered. Disallow dropping directly - * into them; only allow dropping between them. - */ - if (place_type == PLACES_HEADING) - { - if (pos_is_into_or_before (*pos)) - drop_possible = FALSE; - else - *pos = GTK_TREE_VIEW_DROP_AFTER; - } - else - { - if (pos_is_into_or_before (*pos)) - *pos = GTK_TREE_VIEW_DROP_BEFORE; - else - *pos = GTK_TREE_VIEW_DROP_AFTER; - } + valid = section_type == SECTION_BOOKMARKS; } else - { + { /* Dragging a file */ - - /* Outside the bookmarks section, URIs can only be dropped - * directly into places items. Inside the bookmarks section, - * they can be dropped between items (to create new bookmarks) - * or in items themselves (to request a move/copy file - * operation). - */ - if (section_type != SECTION_BOOKMARKS) - *pos = GTK_TREE_VIEW_DROP_INTO_OR_BEFORE; - else + if (context) { - if (place_type == PLACES_HEADING) + if (uri != NULL) { - if (pos_is_into_or_before (*pos)) - drop_possible = FALSE; - else - *pos = GTK_TREE_VIEW_DROP_AFTER; + dest_file = g_file_new_for_uri (uri); + drag_action = emit_drag_action_requested (sidebar, context, dest_file, sidebar->drag_list); + valid = drag_action > 0; + + g_object_unref (dest_file); } + else + { + valid = FALSE; + } + } + else + { + /* We cannot discern if it is valid or not because there is not drag + * context available to ask the client. + * Simply make insensitive the drop targets we know are not valid for + * files, that are the ones remaining. + */ + valid = TRUE; } } - /* Disallow drops on recent:/// */ - if (place_type == PLACES_BUILT_IN) - { - gchar *uri; - - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - - if (g_strcmp0 (uri, "recent:///") == 0) - drop_possible = FALSE; + return valid; +} - g_free (uri); - } +static void +update_possible_drop_targets (GtkPlacesSidebar *sidebar, + gboolean dragging, + GdkDragContext *context) +{ + GList *rows; + GList *l; + gboolean sensitive; -out: + rows = gtk_container_get_children (GTK_CONTAINER (sidebar->list_box)); - if (!drop_possible) + for (l = rows; l != NULL; l = l->next) { - gtk_tree_path_free (*path); - *path = NULL; - return FALSE; + sensitive = !dragging || check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (l->data), context); + g_object_set (GTK_SIDEBAR_ROW (l->data), "sensitive", sensitive, NULL); } - return TRUE; + g_list_free (rows); } static gboolean -get_drag_data (GtkTreeView *tree_view, +get_drag_data (GtkWidget *list_box, GdkDragContext *context, guint time) { GdkAtom target; - target = gtk_drag_dest_find_target (GTK_WIDGET (tree_view), - context, - NULL); + target = gtk_drag_dest_find_target (list_box, context, NULL); if (target == GDK_NONE) return FALSE; - gtk_drag_get_data (GTK_WIDGET (tree_view), - context, target, time); + gtk_drag_get_data (list_box, context, target, time); return TRUE; } static void -remove_switch_location_timer (GtkPlacesSidebar *sidebar) -{ - if (sidebar->switch_location_timer != 0) - { - g_source_remove (sidebar->switch_location_timer); - sidebar->switch_location_timer = 0; - } -} - -static void free_drag_data (GtkPlacesSidebar *sidebar) { sidebar->drag_data_received = FALSE; @@ -1646,203 +1412,234 @@ free_drag_data (GtkPlacesSidebar *sidebar) sidebar->drag_list = NULL; } - remove_switch_location_timer (sidebar); - - g_free (sidebar->drop_target_uri); - sidebar->drop_target_uri = NULL; } -static gboolean -switch_location_timer (gpointer user_data) +static void +start_drop_feedback (GtkPlacesSidebar *sidebar, + GtkSidebarRow *row, + GdkDragContext *context) { - GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); - GFile *location; - - sidebar->switch_location_timer = 0; - - location = g_file_new_for_uri (sidebar->drop_target_uri); - emit_open_location (sidebar, location, 0); - g_object_unref (location); + if (sidebar->drag_data_info != DND_GTK_SIDEBAR_ROW) + { + gtk_sidebar_row_reveal (GTK_SIDEBAR_ROW (sidebar->new_bookmark_row)); + /* If the state is permanent, don't change it. Is the application that + * controls this */ + if (sidebar->drop_state != DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT) + sidebar->drop_state = DROP_STATE_NEW_BOOKMARK_ARMED; + } - return FALSE; + update_possible_drop_targets (sidebar, TRUE, context); } static void -check_switch_location_timer (GtkPlacesSidebar *sidebar, - const gchar *uri) +stop_drop_feedback (GtkPlacesSidebar *sidebar) { - if (g_strcmp0 (uri, sidebar->drop_target_uri) == 0) - return; + update_possible_drop_targets (sidebar, FALSE, NULL); - remove_switch_location_timer (sidebar); - - g_free (sidebar->drop_target_uri); - sidebar->drop_target_uri = NULL; + free_drag_data (sidebar); - if (uri != NULL) + if (sidebar->drop_state != DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT && + sidebar->new_bookmark_row != NULL) { - sidebar->drop_target_uri = g_strdup (uri); - sidebar->switch_location_timer = gdk_threads_add_timeout (TIMEOUT_EXPAND, switch_location_timer, sidebar); - g_source_set_name_by_id (sidebar->switch_location_timer, "[gtk+] switch_location_timer"); + gtk_sidebar_row_hide (GTK_SIDEBAR_ROW (sidebar->new_bookmark_row), FALSE); + sidebar->drop_state = DROP_STATE_NORMAL; } -} -static void -remove_drop_bookmark_feedback_row (GtkPlacesSidebar *sidebar) -{ - if (sidebar->drop_state != DROP_STATE_NORMAL) + if (sidebar->drag_row != NULL) { - gboolean success; - GtkTreeIter iter; - int bookmarks_index; - - bookmarks_index = bookmarks_get_first_index (sidebar); - - success = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (sidebar->store), &iter, NULL, bookmarks_index); - g_assert (success); - gtk_list_store_remove (sidebar->store, &iter); + gtk_widget_show (sidebar->drag_row); + sidebar->drag_row = NULL; + } - sidebar->drop_state = DROP_STATE_NORMAL; + if (sidebar->row_placeholder != NULL) + { + gtk_widget_destroy (sidebar->row_placeholder); + sidebar->row_placeholder = NULL; } + + sidebar->dragging_over = FALSE; + sidebar->drag_data_info = DND_UNKNOWN; } -static void -show_new_bookmark_row (GtkPlacesSidebar *sidebar, - GtkTreePath *path) +static gboolean +on_motion_notify_event (GtkWidget *widget, + GdkEventMotion *event, + gpointer user_data) { - GtkTreeIter iter; - int bookmarks_index; - gint drop_target_index; - GtkTreePath *new_bookmark_path; - GIcon *new_bookmark_icon; + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); - bookmarks_index = bookmarks_get_first_index (sidebar); + if (sidebar->drag_row == NULL || sidebar->dragging_over) + { + return FALSE; + } - /* Add the row if it doesn't exists yet */ - if (sidebar->drop_state == DROP_STATE_NORMAL) + if (!(event->state & GDK_BUTTON1_MASK)) { - new_bookmark_icon = g_themed_icon_new ("bookmark-new-symbolic"); - gtk_list_store_insert_with_values (sidebar->store, &iter, bookmarks_index, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, PLACES_DROP_FEEDBACK, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, SECTION_BOOKMARKS, - PLACES_SIDEBAR_COLUMN_GICON, new_bookmark_icon, - PLACES_SIDEBAR_COLUMN_NAME, _("New bookmark"), - PLACES_SIDEBAR_COLUMN_INDEX, bookmarks_index, - PLACES_SIDEBAR_COLUMN_NO_EJECT, TRUE, - -1); - g_object_unref (new_bookmark_icon); + sidebar->drag_row = NULL; + + return FALSE; } - /* If the state is permanent, don't change it. Is the application that - * controls this */ - if (sidebar->drop_state != DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT) - sidebar->drop_state = DROP_STATE_NEW_BOOKMARK_ARMED; + if (gtk_drag_check_threshold (widget, + sidebar->drag_root_x, sidebar->drag_root_y, + event->x_root, event->y_root)) + { + sidebar->dragging_over = TRUE; - /* Highlight the new bookmark row */ - if (path != NULL) - { - drop_target_index = gtk_tree_path_get_indices (path)[0]; - if (drop_target_index == bookmarks_index) - { - new_bookmark_path = gtk_tree_path_new_from_indices (bookmarks_index, -1); - gtk_tree_view_set_drag_dest_row (sidebar->tree_view, new_bookmark_path, GTK_TREE_VIEW_DROP_INTO_OR_AFTER); - gtk_tree_path_free (new_bookmark_path); - } + gtk_drag_begin_with_coordinates (widget, sidebar->source_targets, GDK_ACTION_MOVE, + GDK_BUTTON_PRIMARY, (GdkEvent*)event, + -1, -1); } + + return FALSE; } static void -start_drop_feedback (GtkPlacesSidebar *sidebar, - GtkTreePath *path, - GtkTreeViewDropPosition pos, - gboolean drop_as_bookmarks) +drag_begin_callback (GtkWidget *widget, + GdkDragContext *context, + gpointer user_data) { - if (drop_as_bookmarks) - show_new_bookmark_row (sidebar, path); - else - gtk_tree_view_set_drag_dest_row (sidebar->tree_view, path, pos); + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); + GtkAllocation allocation; + GtkWidget *drag_widget; + GtkWidget *window; + + gtk_widget_get_allocation (sidebar->drag_row, &allocation); + gtk_widget_hide (sidebar->drag_row); + + drag_widget = GTK_WIDGET (gtk_sidebar_row_clone (GTK_SIDEBAR_ROW (sidebar->drag_row))); + window = gtk_window_new (GTK_WINDOW_POPUP); + sidebar->drag_row_height = allocation.height; + gtk_widget_set_size_request (window, allocation.width, allocation.height); + + gtk_container_add (GTK_CONTAINER (window), drag_widget); + gtk_widget_show_all (window); + gtk_widget_set_opacity (window, 0.8); - update_possible_drop_targets (sidebar, TRUE); + gtk_drag_set_icon_widget (context, + window, + sidebar->drag_row_x, + sidebar->drag_row_y); } -static void -stop_drop_feedback (GtkPlacesSidebar *sidebar) +static GtkWidget * +create_placeholder_row (GtkPlacesSidebar *sidebar) { - gtk_tree_view_set_drag_dest_row (sidebar->tree_view, NULL, 0); - update_possible_drop_targets (sidebar, FALSE); + return g_object_new (GTK_TYPE_SIDEBAR_ROW, + "placeholder", TRUE, + NULL); } static gboolean -drag_motion_callback (GtkTreeView *tree_view, - GdkDragContext *context, - gint x, - gint y, - guint time, - GtkPlacesSidebar *sidebar) +drag_motion_callback (GtkWidget *widget, + GdkDragContext *context, + gint x, + gint y, + guint time, + gpointer user_data) { - GtkTreePath *path; - GtkTreeViewDropPosition pos; gint action; - GtkTreeIter iter; - gboolean res; - gboolean drop_as_bookmarks; + GtkListBoxRow *row; + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); + GtkPlacesSidebarPlaceType place_type; gchar *drop_target_uri = NULL; + gint row_index; + gint row_placeholder_index; sidebar->dragging_over = TRUE; - action = 0; - drop_as_bookmarks = FALSE; - path = NULL; + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (sidebar->list_box), y); - if (!sidebar->drag_data_received) - { - if (!get_drag_data (tree_view, context, time)) - goto out; - } + gtk_list_box_drag_unhighlight_row (GTK_LIST_BOX (sidebar->list_box)); + + /* Nothing to do if no drag data */ + if (!sidebar->drag_data_received && + !get_drag_data (sidebar->list_box, context, time)) + goto out; - res = compute_drop_position (tree_view, x, y, &path, &pos, sidebar); - if (!res) + /* Nothing to do if the target is not valid drop destination */ + if (!check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (row), context)) goto out; if (sidebar->drag_data_received && - sidebar->drag_data_info == GTK_TREE_MODEL_ROW) + sidebar->drag_data_info == DND_GTK_SIDEBAR_ROW) { /* Dragging bookmarks always moves them to another position in the bookmarks list */ action = GDK_ACTION_MOVE; + if (sidebar->row_placeholder == NULL) + { + sidebar->row_placeholder = create_placeholder_row (sidebar); + gtk_widget_show (sidebar->row_placeholder); + g_object_ref_sink (sidebar->row_placeholder); + } + else if (GTK_WIDGET (row) == sidebar->row_placeholder) + { + goto out; + } + + if (gtk_widget_get_parent (sidebar->row_placeholder) != NULL) + { + gtk_container_remove (GTK_CONTAINER (sidebar->list_box), + sidebar->row_placeholder); + } + + if (row != NULL) + { + gint dest_y, dest_x; + + g_object_get (row, "order-index", &row_index, NULL); + g_object_get (sidebar->row_placeholder, "order-index", &row_placeholder_index, NULL); + /* We order the bookmarks sections based on the bookmark index that we + * set on the row as order-index property, but we have to deal with + * the placeholder row wanting to be between two consecutive bookmarks, + * with two consecutive order-index values which is the usual case. + * For that, in the list box sort func we give priority to the placeholder row, + * that means that if the index-order is the same as another bookmark + * the placeholder row goes before. However if we want to show it after + * the current row, for instance when the cursor is in the lower half + * of the row, we need to increase the order-index. + */ + row_placeholder_index = row_index; + gtk_widget_translate_coordinates (widget, GTK_WIDGET (row), + x, y, + &dest_x, &dest_y); + + if (dest_y > sidebar->drag_row_height / 2 && row_index > 0) + row_placeholder_index++; + } + else + { + /* If the user is dragging over an area that has no row, place the row + * placeholder in the last position */ + row_placeholder_index = G_MAXINT32; + } + + g_object_set (sidebar->row_placeholder, "order-index", row_placeholder_index, NULL); + + gtk_list_box_prepend (GTK_LIST_BOX (sidebar->list_box), + sidebar->row_placeholder); } else { + gtk_list_box_drag_highlight_row (GTK_LIST_BOX (sidebar->list_box), row); + + g_object_get (GTK_SIDEBAR_ROW (row), + "place-type", &place_type, + "uri", &drop_target_uri, + NULL); /* URIs are being dragged. See if the caller wants to handle a * file move/copy operation itself, or if we should only try to * create bookmarks out of the dragged URIs. */ if (sidebar->drag_list != NULL) { - SectionType section_type; - PlaceType place_type; - - gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store), &iter, path); - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), - &iter, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - -1); - - if (place_type == PLACES_DROP_FEEDBACK || - (section_type == SECTION_BOOKMARKS && - (pos == GTK_TREE_VIEW_DROP_BEFORE || pos == GTK_TREE_VIEW_DROP_AFTER))) + if (place_type == PLACES_DROP_FEEDBACK) { action = GDK_ACTION_COPY; - drop_as_bookmarks = TRUE; } - - if (!drop_as_bookmarks) + else { - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), - &iter, - PLACES_SIDEBAR_COLUMN_URI, &drop_target_uri, - -1); - + /* uri may be NULL for unmounted volumes, for example, so we don't allow drops there */ if (drop_target_uri != NULL) { GFile *dest_file = g_file_new_for_uri (drop_target_uri); @@ -1850,90 +1647,21 @@ drag_motion_callback (GtkTreeView *tree_view, action = emit_drag_action_requested (sidebar, context, dest_file, sidebar->drag_list); g_object_unref (dest_file); - } /* uri may be NULL for unmounted volumes, for example, so we don't allow drops there */ + } } } } out: - if (action != 0) - { - check_switch_location_timer (sidebar, drop_target_uri); - start_drop_feedback (sidebar, path, pos, drop_as_bookmarks); - } - else - { - remove_switch_location_timer (sidebar); - stop_drop_feedback (sidebar); - } + start_drop_feedback (sidebar, GTK_SIDEBAR_ROW (row), context); - g_free (drop_target_uri); - - if (path != NULL) - gtk_tree_path_free (path); - - g_signal_stop_emission_by_name (tree_view, "drag-motion"); + g_signal_stop_emission_by_name (sidebar->list_box, "drag-motion"); gdk_drag_status (context, action, time); return TRUE; } -static void -on_drag_end (GtkPlacesSidebar *sidebar) -{ - g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar)); - - free_drag_data (sidebar); - /* we could call finalize when disposing the widget */ - if (sidebar->tree_view != NULL) - stop_drop_feedback (sidebar); - remove_drop_bookmark_feedback_row (sidebar); - - if (sidebar->drag_leave_timeout_id) - g_source_remove (sidebar->drag_leave_timeout_id); - - sidebar->drag_leave_timeout_id = 0; - sidebar->drop_state = DROP_STATE_NORMAL; - sidebar->dragging_over = FALSE; -} - -static gboolean -drag_leave_timeout_cb (gpointer data) -{ - GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (data); - - if (sidebar->drop_state != DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT) - { - on_drag_end (sidebar); - return FALSE; - } - else - { - sidebar->dragging_over = FALSE; - return TRUE; - } -} - -static void -drag_leave_callback (GtkTreeView *tree_view, - GdkDragContext *context, - guint time, - GtkPlacesSidebar *sidebar) -{ - sidebar->dragging_over = FALSE; - - if (sidebar->drag_leave_timeout_id) - g_source_remove (sidebar->drag_leave_timeout_id); - - sidebar->drag_leave_timeout_id = gdk_threads_add_timeout (500, drag_leave_timeout_cb, sidebar); - g_source_set_name_by_id (sidebar->drag_leave_timeout_id, "[gtk+] drag_leave_timeout_cb"); - - remove_switch_location_timer (sidebar); - - g_signal_stop_emission_by_name (tree_view, "drag-leave"); -} - /* Takes an array of URIs and turns it into a list of GFile */ static GList * build_file_list_from_uris (const gchar **uris) @@ -1953,27 +1681,20 @@ build_file_list_from_uris (const gchar **uris) return g_list_reverse (result); } -/* Reorders the selected bookmark to the specified position */ +/* Reorders the bookmark to the specified position */ static void reorder_bookmarks (GtkPlacesSidebar *sidebar, + GtkSidebarRow *row, gint new_position) { - GtkTreeIter iter; gchar *uri; GFile *file; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - + g_object_get (row, "uri", &uri, NULL); file = g_file_new_for_uri (uri); _gtk_bookmarks_manager_reorder_bookmark (sidebar->bookmarks_manager, file, new_position, NULL); /* NULL-GError */ g_object_unref (file); - g_free (uri); } /* Creates bookmarks for the specified files at the given position in the bookmarks list */ @@ -2004,35 +1725,55 @@ drop_files_as_bookmarks (GtkPlacesSidebar *sidebar, } static void -drag_data_received_callback (GtkWidget *widget, +drag_data_get_callback (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *data, + guint info, + guint time, + gpointer user_data) +{ + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); + GdkAtom target = gtk_selection_data_get_target (data); + + if (target == gdk_atom_intern_static_string ("DND_GTK_SIDEBAR_ROW")) + { + gtk_selection_data_set (data, + target, + 8, + (void*)&sidebar->drag_row, + sizeof (gpointer)); + } +} + +static void +drag_data_received_callback (GtkWidget *list_box, GdkDragContext *context, int x, int y, GtkSelectionData *selection_data, guint info, guint time, - GtkPlacesSidebar *sidebar) -{ - GtkTreeView *tree_view; - GtkTreePath *tree_path; - GtkTreeViewDropPosition tree_pos; - GtkTreeIter iter; - gint position; - GtkTreeModel *model; - PlaceType place_type; - SectionType section_type; + gpointer user_data) +{ + gint target_order_index; + GtkPlacesSidebarPlaceType target_place_type; + GtkPlacesSidebarSectionType target_section_type; + gchar *target_uri; gboolean success; - - tree_view = GTK_TREE_VIEW (widget); + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); + GtkListBoxRow *target_row; if (!sidebar->drag_data_received) { if (gtk_selection_data_get_target (selection_data) != GDK_NONE && - info == TEXT_URI_LIST) + info == DND_TEXT_URI_LIST) { gchar **uris; uris = gtk_selection_data_get_uris (selection_data); + /* Free spurious drag data from previous drags if present */ + if (sidebar->drag_list != NULL) + g_list_free_full (sidebar->drag_list, g_object_unref); sidebar->drag_list = build_file_list_from_uris ((const char **) uris); g_strfreev (uris); } @@ -2044,48 +1785,42 @@ drag_data_received_callback (GtkWidget *widget, sidebar->drag_data_info = info; } - g_signal_stop_emission_by_name (widget, "drag-data-received"); + g_signal_stop_emission_by_name (list_box, "drag-data-received"); if (!sidebar->drop_occured) return; - /* Compute position */ - success = compute_drop_position (tree_view, x, y, &tree_path, &tree_pos, sidebar); - if (!success) - goto out; + target_row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (sidebar->list_box), y); - success = FALSE; - - if (sidebar->drag_data_info == GTK_TREE_MODEL_ROW) - { - /* A bookmark got reordered */ + if (target_row == NULL) + return; - model = gtk_tree_view_get_model (tree_view); + g_object_get (GTK_SIDEBAR_ROW (target_row), + "place-type", &target_place_type, + "section-type", &target_section_type, + "order-index", &target_order_index, + "uri", &target_uri, + NULL); - if (!gtk_tree_model_get_iter (model, &iter, tree_path)) - goto out; + success = FALSE; - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_INDEX, &position, - -1); + if (!check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (target_row), context)) + goto out; - if (section_type != SECTION_BOOKMARKS) + if (sidebar->drag_data_info == DND_GTK_SIDEBAR_ROW) + { + /* A bookmark got reordered */ + if (target_section_type != SECTION_BOOKMARKS) goto out; - if (place_type == PLACES_HEADING) - position = 0; - else if (tree_pos == GTK_TREE_VIEW_DROP_AFTER) - position++; + GtkWidget **source_row = (void*) gtk_selection_data_get_data (selection_data); - reorder_bookmarks (sidebar, position); + reorder_bookmarks (sidebar, GTK_SIDEBAR_ROW (*source_row), target_order_index); success = TRUE; } else { /* Dropping URIs! */ - GdkDragAction real_action; gchar **uris; GList *source_file_list; @@ -2098,62 +1833,25 @@ drag_data_received_callback (GtkWidget *widget, if (real_action > 0) { - gchar *uri; GFile *dest_file; - gboolean drop_as_bookmarks; - - model = gtk_tree_view_get_model (tree_view); - - gtk_tree_model_get_iter (model, &iter, tree_path); - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_INDEX, &position, - -1); - - drop_as_bookmarks = FALSE; uris = gtk_selection_data_get_uris (selection_data); source_file_list = build_file_list_from_uris ((const gchar **) uris); - if (section_type == SECTION_BOOKMARKS) + if (target_place_type == PLACES_DROP_FEEDBACK) { - if (place_type == PLACES_HEADING) - { - position = 0; - tree_pos = GTK_TREE_VIEW_DROP_BEFORE; - } - - if (tree_pos == GTK_TREE_VIEW_DROP_AFTER) - position++; - - if (tree_pos == GTK_TREE_VIEW_DROP_BEFORE || - tree_pos == GTK_TREE_VIEW_DROP_AFTER || - place_type == PLACES_DROP_FEEDBACK) - { - remove_drop_bookmark_feedback_row (sidebar); - drop_files_as_bookmarks (sidebar, source_file_list, position); - success = TRUE; - drop_as_bookmarks = TRUE; - } + drop_files_as_bookmarks (sidebar, source_file_list, target_order_index); } - - if (!drop_as_bookmarks) + else { - gtk_tree_model_get_iter (model, &iter, tree_path); - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - - dest_file = g_file_new_for_uri (uri); + dest_file = g_file_new_for_uri (target_uri); emit_drag_perform_drop (sidebar, dest_file, source_file_list, real_action); - success = TRUE; g_object_unref (dest_file); - g_free (uri); } + success = TRUE; g_list_free_full (source_file_list, g_object_unref); g_strfreev (uris); } @@ -2162,24 +1860,70 @@ drag_data_received_callback (GtkWidget *widget, out: sidebar->drop_occured = FALSE; gtk_drag_finish (context, success, FALSE, time); - on_drag_end (sidebar); + stop_drop_feedback (sidebar); +} - gtk_tree_path_free (tree_path); +static void +drag_end_callback (GtkWidget *widget, + GdkDragContext *context, + gpointer user_data) +{ + stop_drop_feedback (GTK_PLACES_SIDEBAR (user_data)); +} + +/* This functions is called every time the drag source leaves + * the sidebar widget. + * The problem is that, we start showing hints for drop when the source + * start being above the sidebar or when the application request so show + * drop hints, but at some moment we need to restore to normal + * state. + * One could think that here we could simply call stop_drop_feedback, + * but that's not true, because this function is called also before drag_drop, + * which needs the data from the drag so we cannot free the drag data here. + * So now one could think we could just do nothing here, and wait for + * drag-end or drag-failed signals and just stop_drop_feedback there. But that + * is also not true, since when the drag comes from a diferent widget than the + * sidebar, when the drag stops the last drag signal we receive is drag-leave. + * So here what we will do is restore the state of the sidebar as if no drag + * is being done (and if the application didnt request for permanent hints with + * gtk_places_sidebar_show_drop_hints) and we will free the drag data next time + * we build new drag data in drag_data_received. + */ +static void +drag_leave_callback (GtkWidget *widget, + GdkDragContext *context, + guint time, + gpointer user_data) +{ + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); + + if (sidebar->drop_state != DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT) + { + update_possible_drop_targets (sidebar, FALSE, context); + gtk_sidebar_row_hide (GTK_SIDEBAR_ROW (sidebar->new_bookmark_row), FALSE); + sidebar->drop_state = DROP_STATE_NORMAL; + } + + sidebar->drag_data_received = FALSE; + sidebar->dragging_over = FALSE; + sidebar->drag_data_info = DND_UNKNOWN; } static gboolean -drag_drop_callback (GtkTreeView *tree_view, - GdkDragContext *context, - gint x, - gint y, - guint time, - GtkPlacesSidebar *sidebar) +drag_drop_callback (GtkWidget *list_box, + GdkDragContext *context, + gint x, + gint y, + guint time, + gpointer user_data) { gboolean retval = FALSE; + GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); sidebar->drop_occured = TRUE; - retval = get_drag_data (tree_view, context, time); - g_signal_stop_emission_by_name (tree_view, "drag-drop"); + retval = get_drag_data (sidebar->list_box, context, time); + g_signal_stop_emission_by_name (sidebar->list_box, "drag-drop"); + return retval; } @@ -2254,45 +1998,6 @@ check_visibility (GMount *mount, } typedef struct { - PlaceType type; - GDrive *drive; - GVolume *volume; - GMount *mount; - gchar *uri; -} SelectionInfo; - -static void -get_selection_info (GtkPlacesSidebar *sidebar, - SelectionInfo *info) -{ - GtkTreeIter iter; - - info->type = PLACES_BUILT_IN; - info->drive = NULL; - info->volume = NULL; - info->mount = NULL; - info->uri = NULL; - - if (get_selected_iter (sidebar, &iter)) - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &info->type, - PLACES_SIDEBAR_COLUMN_DRIVE, &info->drive, - PLACES_SIDEBAR_COLUMN_VOLUME, &info->volume, - PLACES_SIDEBAR_COLUMN_MOUNT, &info->mount, - PLACES_SIDEBAR_COLUMN_URI, &info->uri, - -1); -} - -static void -free_selection_info (SelectionInfo *info) -{ - g_clear_object (&info->drive); - g_clear_object (&info->volume); - g_clear_object (&info->mount); - g_clear_pointer (&info->uri, g_free); -} - -typedef struct { GtkWidget *add_shortcut_item; GtkWidget *remove_item; GtkWidget *rename_item; @@ -2306,9 +2011,8 @@ typedef struct { } PopupMenuData; static void -check_popup_sensitivity (GtkPlacesSidebar *sidebar, - PopupMenuData *data, - SelectionInfo *info) +check_popup_sensitivity (GtkSidebarRow *row, + PopupMenuData *data) { gboolean show_mount; gboolean show_unmount; @@ -2316,13 +2020,25 @@ check_popup_sensitivity (GtkPlacesSidebar *sidebar, gboolean show_rescan; gboolean show_start; gboolean show_stop; + GtkPlacesSidebarPlaceType type; + GDrive *drive; + GVolume *volume; + GMount *mount; + + g_object_get (row, + "place-type", &type, + "drive", &drive, + "volume", &volume, + "mount", &mount, + NULL); - gtk_widget_set_visible (data->add_shortcut_item, (info->type == PLACES_MOUNTED_VOLUME)); + gtk_widget_set_visible (data->add_shortcut_item, (type == PLACES_MOUNTED_VOLUME)); - gtk_widget_set_sensitive (data->remove_item, (info->type == PLACES_BOOKMARK)); - gtk_widget_set_sensitive (data->rename_item, (info->type == PLACES_BOOKMARK || info->type == PLACES_XDG_DIR)); + gtk_widget_set_sensitive (data->remove_item, (type == PLACES_BOOKMARK)); + gtk_widget_set_sensitive (data->rename_item, (type == PLACES_BOOKMARK || + type == PLACES_XDG_DIR)); - check_visibility (info->mount, info->volume, info->drive, + check_visibility (mount, volume, drive, &show_mount, &show_unmount, &show_eject, &show_rescan, &show_start, &show_stop); gtk_widget_set_visible (data->separator_item, show_mount || show_unmount || show_eject); @@ -2336,9 +2052,9 @@ check_popup_sensitivity (GtkPlacesSidebar *sidebar, /* Adjust start/stop items to reflect the type of the drive */ gtk_menu_item_set_label (GTK_MENU_ITEM (data->start_item), _("_Start")); gtk_menu_item_set_label (GTK_MENU_ITEM (data->stop_item), _("_Stop")); - if ((show_start || show_stop) && info->drive != NULL) + if ((show_start || show_stop) && drive != NULL) { - switch (g_drive_get_start_stop_type (info->drive)) + switch (g_drive_get_start_stop_type (drive)) { case G_DRIVE_START_STOP_TYPE_SHUTDOWN: /* start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used */ @@ -2457,27 +2173,12 @@ mount_volume (GtkPlacesSidebar *sidebar, } static void -open_selected_volume (GtkPlacesSidebar *sidebar, - GtkTreeModel *model, - GtkTreeIter *iter, - GtkPlacesOpenFlags open_flags) +open_drive (GtkPlacesSidebar *sidebar, + GDrive *drive, + GtkPlacesOpenFlags open_flags) { - GDrive *drive; - GVolume *volume; - - gtk_tree_model_get (model, iter, - PLACES_SIDEBAR_COLUMN_DRIVE, &drive, - PLACES_SIDEBAR_COLUMN_VOLUME, &volume, - -1); - - if (volume != NULL && !sidebar->mounting) - { - sidebar->mounting = TRUE; - sidebar->go_to_after_mount_open_flags = open_flags; - mount_volume (sidebar, volume); - } - else if (volume == NULL && drive != NULL && - (g_drive_can_start (drive) || g_drive_can_start_degraded (drive))) + if (drive != NULL && + (g_drive_can_start (drive) || g_drive_can_start_degraded (drive))) { GMountOperation *mount_op; @@ -2485,18 +2186,25 @@ open_selected_volume (GtkPlacesSidebar *sidebar, g_drive_start (drive, G_DRIVE_START_NONE, mount_op, NULL, drive_start_from_bookmark_cb, NULL); g_object_unref (mount_op); } +} - if (drive != NULL) - g_object_unref (drive); - - if (volume != NULL) - g_object_unref (volume); +static void +open_volume (GtkPlacesSidebar *sidebar, + GVolume *volume, + GtkPlacesOpenFlags open_flags) +{ + if (volume != NULL && !sidebar->mounting) + { + sidebar->mounting = TRUE; + sidebar->go_to_after_mount_open_flags = open_flags; + mount_volume (sidebar, volume); + } } static void -open_selected_uri (GtkPlacesSidebar *sidebar, - const gchar *uri, - GtkPlacesOpenFlags open_flags) +open_uri (GtkPlacesSidebar *sidebar, + const gchar *uri, + GtkPlacesOpenFlags open_flags) { GFile *location; @@ -2506,125 +2214,92 @@ open_selected_uri (GtkPlacesSidebar *sidebar, } static void -open_selected_bookmark (GtkPlacesSidebar *sidebar, - GtkTreeModel *model, - GtkTreeIter *iter, - GtkPlacesOpenFlags open_flags) +open_row (GtkSidebarRow *row, + GtkPlacesOpenFlags open_flags) { gchar *uri; - PlaceType place_type; - - if (!iter) - return; + GDrive *drive; + GVolume *volume; + GtkPlacesSidebarPlaceType place_type; + GtkPlacesSidebar *sidebar; - gtk_tree_model_get (model, iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - -1); + g_object_get (row, + "sidebar", &sidebar, + "uri", &uri, + "place-type", &place_type, + "drive", &drive, + "volume", &volume, + NULL); if (uri != NULL) - { - open_selected_uri (sidebar, uri, open_flags); - g_free (uri); - } + open_uri (sidebar, uri, open_flags); else if (place_type == PLACES_CONNECT_TO_SERVER) - { - emit_show_connect_to_server (sidebar); - } + emit_show_connect_to_server (sidebar); else if (place_type == PLACES_ENTER_LOCATION) - { - emit_show_enter_location (sidebar); - } - else - { - open_selected_volume (sidebar, model, iter, open_flags); - } -} - -static void -open_shortcut_from_menu (GtkPlacesSidebar *sidebar, - GtkPlacesOpenFlags open_flags) -{ - GtkTreeModel *model; - GtkTreeIter iter; - GtkTreePath *path = NULL; - - model = gtk_tree_view_get_model (sidebar->tree_view); - gtk_tree_view_get_cursor (sidebar->tree_view, &path, NULL); - - if (path != NULL && gtk_tree_model_get_iter (model, &iter, path)) - open_selected_bookmark (sidebar, model, &iter, open_flags); - - gtk_tree_path_free (path); + emit_show_enter_location (sidebar); + else if (volume != NULL) + open_volume (sidebar, volume, open_flags); + else if (drive != NULL) + open_drive (sidebar, drive, open_flags); } /* Callback used for the "Open" menu item in the context menu */ static void -open_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +open_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - open_shortcut_from_menu (sidebar, GTK_PLACES_OPEN_NORMAL); + open_row (row, GTK_PLACES_OPEN_NORMAL); } /* Callback used for the "Open in new tab" menu item in the context menu */ static void -open_shortcut_in_new_tab_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +open_shortcut_in_new_tab_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - open_shortcut_from_menu (sidebar, GTK_PLACES_OPEN_NEW_TAB); + open_row (row, GTK_PLACES_OPEN_NEW_TAB); } /* Callback used for the "Open in new window" menu item in the context menu */ static void -open_shortcut_in_new_window_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +open_shortcut_in_new_window_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - open_shortcut_from_menu (sidebar, GTK_PLACES_OPEN_NEW_WINDOW); + open_row (row, GTK_PLACES_OPEN_NEW_WINDOW); } /* Add bookmark for the selected item - just used from mount points */ static void -add_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +add_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeModel *model; - GtkTreeIter iter; gchar *uri; gchar *name; GFile *location; + GtkPlacesSidebar *sidebar; - model = gtk_tree_view_get_model (sidebar->tree_view); + g_object_get (row, "sidebar", &sidebar, "uri", &uri, "label", &name, NULL); - if (get_selected_iter (sidebar, &iter)) - { - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - PLACES_SIDEBAR_COLUMN_NAME, &name, - -1); - - if (uri == NULL) - return; + if (uri == NULL) + return; - location = g_file_new_for_uri (uri); - if (_gtk_bookmarks_manager_insert_bookmark (sidebar->bookmarks_manager, location, -1, NULL)) - _gtk_bookmarks_manager_set_bookmark_label (sidebar->bookmarks_manager, location, name, NULL); + location = g_file_new_for_uri (uri); + if (_gtk_bookmarks_manager_insert_bookmark (sidebar->bookmarks_manager, location, -1, NULL)) + _gtk_bookmarks_manager_set_bookmark_label (sidebar->bookmarks_manager, location, name, NULL); - g_object_unref (location); - g_free (uri); - g_free (name); - } + g_object_unref (location); } static void rename_entry_changed (GtkEntry *entry, GtkPlacesSidebar *sidebar) { - GtkTreeIter iter; - PlaceType type; + GtkPlacesSidebarPlaceType type; gchar *name; gchar *uri; const gchar *new_name; gboolean found = FALSE; + GList *rows; + GList *l; new_name = gtk_entry_get_text (GTK_ENTRY (sidebar->rename_entry)); @@ -2634,27 +2309,27 @@ rename_entry_changed (GtkEntry *entry, gtk_label_set_label (GTK_LABEL (sidebar->rename_error), ""); return; } - - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter); - do { - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &type, - PLACES_SIDEBAR_COLUMN_URI, &uri, - PLACES_SIDEBAR_COLUMN_NAME, &name, - -1); - - if ((type == PLACES_XDG_DIR || type == PLACES_BOOKMARK) && - strcmp (uri, sidebar->rename_uri) != 0 && - strcmp (new_name, name) == 0) - found = TRUE; - - g_free (name); - g_free (uri); - } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter) && !found); + rows = gtk_container_get_children (GTK_CONTAINER (sidebar->list_box)); + l = rows; + while (l != NULL && !found) + { + g_object_get (GTK_SIDEBAR_ROW (l->data), + "place-type", &type, + "uri", &uri, + "label", &name, NULL); + if ((type == PLACES_XDG_DIR || type == PLACES_BOOKMARK) && + strcmp (uri, sidebar->rename_uri) != 0 && + strcmp (new_name, name) == 0) + found = TRUE; + + l = l->next; + } gtk_widget_set_sensitive (sidebar->rename_button, !found); gtk_label_set_label (GTK_LABEL (sidebar->rename_error), found ? _("This name is already taken") : ""); + + g_list_free (rows); } static void @@ -2731,88 +2406,61 @@ create_rename_popover (GtkPlacesSidebar *sidebar) } static void -show_rename_popover (GtkPlacesSidebar *sidebar, - GtkTreeIter *iter) +show_rename_popover (GtkSidebarRow *row) { - GtkTreeViewColumn *column; - GdkRectangle rect; gchar *name; gchar *uri; - GtkTreePath *path; + GtkPlacesSidebar *sidebar; - create_rename_popover (sidebar); + g_object_get (row, "sidebar", &sidebar, "label", &name, "uri", &uri, NULL); - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), iter, - PLACES_SIDEBAR_COLUMN_NAME, &name, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); + create_rename_popover (sidebar); if (sidebar->rename_uri) g_free (sidebar->rename_uri); sidebar->rename_uri = uri; - path = gtk_tree_model_get_path (GTK_TREE_MODEL (sidebar->store), iter); - column = gtk_tree_view_get_column (GTK_TREE_VIEW (sidebar->tree_view), 0); - gtk_tree_view_get_background_area (GTK_TREE_VIEW (sidebar->tree_view), path, column, &rect); - gtk_tree_path_free (path); - gtk_entry_set_text (GTK_ENTRY (sidebar->rename_entry), name); - gtk_popover_set_pointing_to (GTK_POPOVER (sidebar->rename_popover), &rect); + gtk_popover_set_relative_to (GTK_POPOVER (sidebar->rename_popover), GTK_WIDGET (row)); gtk_widget_show (sidebar->rename_popover); gtk_widget_grab_focus (sidebar->rename_entry); } -/* Rename the selected bookmark */ static void -rename_selected_bookmark (GtkPlacesSidebar *sidebar) +rename_bookmark (GtkSidebarRow *row) { - GtkTreeIter iter; - PlaceType type; + GtkPlacesSidebarPlaceType type; + GtkPlacesSidebar *sidebar; - if (get_selected_iter (sidebar, &iter)) - { - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &type, - -1); + g_object_get (row, "sidebar", &sidebar, "place-type", &type, NULL); - if (type != PLACES_BOOKMARK && type != PLACES_XDG_DIR) - return; + if (type != PLACES_BOOKMARK && type != PLACES_XDG_DIR) + return; - show_rename_popover (sidebar, &iter); - } + show_rename_popover (row); } static void -rename_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +rename_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - rename_selected_bookmark (sidebar); + rename_bookmark (row); } -/* Removes the selected bookmarks */ static void -remove_selected_bookmarks (GtkPlacesSidebar *sidebar) +remove_bookmark (GtkSidebarRow *row) { - GtkTreeIter iter; - PlaceType type; + GtkPlacesSidebarPlaceType type; gchar *uri; GFile *file; + GtkPlacesSidebar *sidebar; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &type, - -1); + g_object_get (row, "sidebar", &sidebar, "place-type", &type, "uri", &uri, NULL); if (type != PLACES_BOOKMARK) return; - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - file = g_file_new_for_uri (uri); _gtk_bookmarks_manager_remove_bookmark (sidebar->bookmarks_manager, file, NULL); @@ -2821,31 +2469,22 @@ remove_selected_bookmarks (GtkPlacesSidebar *sidebar) } static void -remove_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +remove_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - remove_selected_bookmarks (sidebar); + remove_bookmark (row); } static void -mount_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +mount_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeIter iter; GVolume *volume; + GtkPlacesSidebar *sidebar; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_VOLUME, &volume, - -1); - + g_object_get (row, "sidebar", &sidebar, "volume", &volume, NULL); if (volume != NULL) - { - mount_volume (sidebar, volume); - g_object_unref (volume); - } + mount_volume (sidebar, volume); } /* Callback used from g_mount_unmount_with_operation() */ @@ -3086,30 +2725,14 @@ do_unmount (GMount *mount, } static void -do_unmount_selection (GtkPlacesSidebar *sidebar) +unmount_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeIter iter; + GtkPlacesSidebar *sidebar; GMount *mount; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_MOUNT, &mount, - -1); - - if (mount != NULL) - { - do_unmount (mount, sidebar); - g_object_unref (mount); - } -} - -static void -unmount_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) -{ - do_unmount_selection (sidebar); + g_object_get (row, "sidebar", &sidebar, "mount", &mount, NULL); + do_unmount (mount, sidebar); } static void @@ -3268,52 +2891,40 @@ do_eject (GMount *mount, } static void -eject_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +eject_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeIter iter; GMount *mount; GVolume *volume; GDrive *drive; + GtkPlacesSidebar *sidebar; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_MOUNT, &mount, - PLACES_SIDEBAR_COLUMN_VOLUME, &volume, - PLACES_SIDEBAR_COLUMN_DRIVE, &drive, - -1); + g_object_get (row, + "sidebar", &sidebar, + "mount", &mount, + "volume", &volume, + "drive", &drive, + NULL); do_eject (mount, volume, drive, sidebar); } static gboolean -eject_or_unmount_bookmark (GtkPlacesSidebar *sidebar, - GtkTreePath *path) +eject_or_unmount_bookmark (GtkSidebarRow *row) { - GtkTreeModel *model; - GtkTreeIter iter; gboolean can_unmount, can_eject; GMount *mount; GVolume *volume; GDrive *drive; gboolean ret; + GtkPlacesSidebar *sidebar; - model = GTK_TREE_MODEL (sidebar->store); - - if (!path) - return FALSE; - - if (!gtk_tree_model_get_iter (model, &iter, path)) - return FALSE; - - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_MOUNT, &mount, - PLACES_SIDEBAR_COLUMN_VOLUME, &volume, - PLACES_SIDEBAR_COLUMN_DRIVE, &drive, - -1); - + g_object_get (row, + "sidebar", &sidebar, + "mount", &mount, + "volume", &volume, + "drive", &drive, + NULL); ret = FALSE; check_unmount_and_eject (mount, volume, drive, &can_unmount, &can_eject); @@ -3329,30 +2940,17 @@ eject_or_unmount_bookmark (GtkPlacesSidebar *sidebar, ret = TRUE; } - g_clear_object (&mount); - g_clear_object (&volume); - g_clear_object (&drive); - return ret; } static gboolean eject_or_unmount_selection (GtkPlacesSidebar *sidebar) { - GtkTreeIter iter; - GtkTreePath *path; gboolean ret; + GtkListBoxRow *row; - if (!get_selected_iter (sidebar, &iter)) - return FALSE; - - path = gtk_tree_model_get_path (GTK_TREE_MODEL (sidebar->store), &iter); - if (path == NULL) - return FALSE; - - ret = eject_or_unmount_bookmark (sidebar, path); - - gtk_tree_path_free (path); + row = gtk_list_box_get_selected_row (GTK_LIST_BOX (sidebar->list_box)); + ret = eject_or_unmount_bookmark (GTK_SIDEBAR_ROW (row)); return ret; } @@ -3387,24 +2985,16 @@ drive_poll_for_media_cb (GObject *source_object, } static void -rescan_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +rescan_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeIter iter; + GtkPlacesSidebar *sidebar; GDrive *drive; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_DRIVE, &drive, - -1); + g_object_get (row, "sidebar", &sidebar, "drive", &drive, NULL); if (drive != NULL) - { - g_drive_poll_for_media (drive, NULL, drive_poll_for_media_cb, g_object_ref (sidebar)); - g_object_unref (drive); - } + g_drive_poll_for_media (drive, NULL, drive_poll_for_media_cb, g_object_ref (sidebar)); } static void @@ -3437,18 +3027,13 @@ drive_start_cb (GObject *source_object, } static void -start_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +start_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeIter iter; + GtkPlacesSidebar *sidebar; GDrive *drive; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_DRIVE, &drive, - -1); + g_object_get (row, "sidebar", &sidebar, "drive", &drive, NULL); if (drive != NULL) { @@ -3459,23 +3044,17 @@ start_shortcut_cb (GtkMenuItem *item, g_drive_start (drive, G_DRIVE_START_NONE, mount_op, NULL, drive_start_cb, g_object_ref (sidebar)); g_object_unref (mount_op); - g_object_unref (drive); } } static void -stop_shortcut_cb (GtkMenuItem *item, - GtkPlacesSidebar *sidebar) +stop_shortcut_cb (GtkMenuItem *item, + GtkSidebarRow *row) { - GtkTreeIter iter; + GtkPlacesSidebar *sidebar; GDrive *drive; - if (!get_selected_iter (sidebar, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_DRIVE, &drive, - -1); + g_object_get (row, "sidebar", &sidebar, "drive", &drive, NULL); if (drive != NULL) { @@ -3486,151 +3065,90 @@ stop_shortcut_cb (GtkMenuItem *item, g_object_ref (sidebar)); g_object_unref (mount_op); - g_object_unref (drive); } } static gboolean -find_prev_or_next_row (GtkPlacesSidebar *sidebar, - GtkTreeIter *iter, - gboolean go_up) +on_key_press_event (GtkWidget *widget, + GdkEventKey *event, + GtkPlacesSidebar *sidebar) { - GtkTreeModel *model = GTK_TREE_MODEL (sidebar->store); - gboolean res; - gint place_type; - - if (go_up) - res = gtk_tree_model_iter_previous (model, iter); - else - res = gtk_tree_model_iter_next (model, iter); + guint modifiers; + GtkListBoxRow *row; + gchar *label; - if (res) + if (event) { - gtk_tree_model_get (model, iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - -1); - if (place_type == PLACES_HEADING) + row = gtk_list_box_get_selected_row (GTK_LIST_BOX (sidebar->list_box)); + if (row) { - if (go_up) - res = gtk_tree_model_iter_previous (model, iter); - else - res = gtk_tree_model_iter_next (model, iter); - } - } + g_object_get (row, "label", &label, NULL); + modifiers = gtk_accelerator_get_default_mod_mask (); - return res; -} - -static gboolean -find_prev_row (GtkPlacesSidebar *sidebar, - GtkTreeIter *iter) -{ - return find_prev_or_next_row (sidebar, iter, TRUE); -} - -static gboolean -find_next_row (GtkPlacesSidebar *sidebar, - GtkTreeIter *iter) -{ - return find_prev_or_next_row (sidebar, iter, FALSE); -} - -static gboolean -gtk_places_sidebar_focus (GtkWidget *widget, - GtkDirectionType direction) -{ - GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (widget); - GtkTreePath *path; - GtkTreeIter iter; - gboolean res; + if (event->keyval == GDK_KEY_Return || + event->keyval == GDK_KEY_KP_Enter || + event->keyval == GDK_KEY_ISO_Enter || + event->keyval == GDK_KEY_space) + { + GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL; - if (!get_selected_iter (sidebar, &iter)) - { - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter); - res = find_next_row (sidebar, &iter); - if (res) - { - path = gtk_tree_model_get_path (GTK_TREE_MODEL (sidebar->store), &iter); - gtk_tree_view_set_cursor (sidebar->tree_view, path, NULL, FALSE); - gtk_tree_path_free (path); - } - } + if ((event->state & modifiers) == GDK_SHIFT_MASK) + open_flags = GTK_PLACES_OPEN_NEW_TAB; + else if ((event->state & modifiers) == GDK_CONTROL_MASK) + open_flags = GTK_PLACES_OPEN_NEW_WINDOW; - return GTK_WIDGET_CLASS (gtk_places_sidebar_parent_class)->focus (widget, direction); -} + open_row (GTK_SIDEBAR_ROW (row), open_flags); -/* Handler for GtkWidget::key-press-event on the shortcuts list */ -static gboolean -bookmarks_key_press_event_cb (GtkWidget *widget, - GdkEventKey *event, - GtkPlacesSidebar *sidebar) -{ - guint modifiers; - GtkTreeIter selected_iter; - GtkTreePath *path; + return TRUE; + } - if (!get_selected_iter (sidebar, &selected_iter)) - return FALSE; + if (event->keyval == GDK_KEY_Down && + (event->state & modifiers) == GDK_MOD1_MASK) + return eject_or_unmount_selection (sidebar); - modifiers = gtk_accelerator_get_default_mod_mask (); + if (event->keyval == GDK_KEY_Up) + { + gint index; + GtkListBoxRow *previous_row; - if (event->keyval == GDK_KEY_Return || - event->keyval == GDK_KEY_KP_Enter || - event->keyval == GDK_KEY_ISO_Enter || - event->keyval == GDK_KEY_space) - { - GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL; + index = gtk_list_box_row_get_index (row); + previous_row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (sidebar->list_box), + index - 1); + if (previous_row != NULL) + gtk_list_box_select_row (GTK_LIST_BOX (sidebar->list_box), previous_row); - if ((event->state & modifiers) == GDK_SHIFT_MASK) - open_flags = GTK_PLACES_OPEN_NEW_TAB; - else if ((event->state & modifiers) == GDK_CONTROL_MASK) - open_flags = GTK_PLACES_OPEN_NEW_WINDOW; + return TRUE; + } - open_selected_bookmark (sidebar, GTK_TREE_MODEL (sidebar->store), - &selected_iter, open_flags); + if (event->keyval == GDK_KEY_Down) + { + gint index; + GtkListBoxRow *previous_row; - return TRUE; - } + index = gtk_list_box_row_get_index (row); + previous_row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (sidebar->list_box), + index + 1); + if (previous_row != NULL) + gtk_list_box_select_row (GTK_LIST_BOX (sidebar->list_box), previous_row); - if (event->keyval == GDK_KEY_Down && - (event->state & modifiers) == GDK_MOD1_MASK) - return eject_or_unmount_selection (sidebar); + return TRUE; + } - if (event->keyval == GDK_KEY_Up) - { - if (find_prev_row (sidebar, &selected_iter)) - { - path = gtk_tree_model_get_path (GTK_TREE_MODEL (sidebar->store), &selected_iter); - gtk_tree_view_set_cursor (sidebar->tree_view, path, NULL, FALSE); - gtk_tree_path_free (path); - } - return TRUE; - } + if ((event->keyval == GDK_KEY_Delete || + event->keyval == GDK_KEY_KP_Delete) && + (event->state & modifiers) == 0) + { + remove_bookmark (GTK_SIDEBAR_ROW (row)); + return TRUE; + } - if (event->keyval == GDK_KEY_Down) - { - if (find_next_row (sidebar, &selected_iter)) - { - path = gtk_tree_model_get_path (GTK_TREE_MODEL (sidebar->store), &selected_iter); - gtk_tree_view_set_cursor (sidebar->tree_view, path, NULL, FALSE); - gtk_tree_path_free (path); + if ((event->keyval == GDK_KEY_F2) && + (event->state & modifiers) == 0) + { + rename_bookmark (GTK_SIDEBAR_ROW (row)); + return TRUE; + } } - return TRUE; - } - - if ((event->keyval == GDK_KEY_Delete || - event->keyval == GDK_KEY_KP_Delete) && - (event->state & modifiers) == 0) - { - remove_selected_bookmarks (sidebar); - return TRUE; - } - - if ((event->keyval == GDK_KEY_F2) && - (event->state & modifiers) == 0) - { - rename_selected_bookmark (sidebar); - return TRUE; } return FALSE; @@ -3650,12 +3168,16 @@ append_menu_separator (GtkMenu *menu) /* Constructs the popup menu for the file list if needed */ static void -bookmarks_build_popup_menu (GtkPlacesSidebar *sidebar) +bookmarks_build_popup_menu (GtkSidebarRow *row) { PopupMenuData menu_data; GtkWidget *item; - SelectionInfo sel_info; GFile *file; + const gchar *uri; + GVolume *volume; + GtkPlacesSidebar *sidebar; + + g_object_get (row, "sidebar", &sidebar, "uri", &uri, "volume", &volume, NULL); sidebar->popup_menu = gtk_menu_new (); gtk_style_context_add_class (gtk_widget_get_style_context (sidebar->popup_menu), @@ -3667,7 +3189,7 @@ bookmarks_build_popup_menu (GtkPlacesSidebar *sidebar) item = gtk_menu_item_new_with_mnemonic (_("_Open")); g_signal_connect (item, "activate", - G_CALLBACK (open_shortcut_cb), sidebar); + G_CALLBACK (open_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); @@ -3675,7 +3197,7 @@ bookmarks_build_popup_menu (GtkPlacesSidebar *sidebar) { item = gtk_menu_item_new_with_mnemonic (_("Open in New _Tab")); g_signal_connect (item, "activate", - G_CALLBACK (open_shortcut_in_new_tab_cb), sidebar); + G_CALLBACK (open_shortcut_in_new_tab_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); } @@ -3684,7 +3206,7 @@ bookmarks_build_popup_menu (GtkPlacesSidebar *sidebar) { item = gtk_menu_item_new_with_mnemonic (_("Open in New _Window")); g_signal_connect (item, "activate", - G_CALLBACK (open_shortcut_in_new_window_cb), sidebar); + G_CALLBACK (open_shortcut_in_new_window_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); } @@ -3694,20 +3216,20 @@ bookmarks_build_popup_menu (GtkPlacesSidebar *sidebar) item = gtk_menu_item_new_with_mnemonic (_("_Add Bookmark")); menu_data.add_shortcut_item = item; g_signal_connect (item, "activate", - G_CALLBACK (add_shortcut_cb), sidebar); + G_CALLBACK (add_shortcut_cb), row); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_label (_("Remove")); menu_data.remove_item = item; g_signal_connect (item, "activate", - G_CALLBACK (remove_shortcut_cb), sidebar); + G_CALLBACK (remove_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_label (_("Rename…")); menu_data.rename_item = item; g_signal_connect (item, "activate", - G_CALLBACK (rename_shortcut_cb), sidebar); + G_CALLBACK (rename_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); @@ -3718,76 +3240,75 @@ bookmarks_build_popup_menu (GtkPlacesSidebar *sidebar) item = gtk_menu_item_new_with_mnemonic (_("_Mount")); menu_data.mount_item = item; g_signal_connect (item, "activate", - G_CALLBACK (mount_shortcut_cb), sidebar); + G_CALLBACK (mount_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_mnemonic (_("_Unmount")); menu_data.unmount_item = item; g_signal_connect (item, "activate", - G_CALLBACK (unmount_shortcut_cb), sidebar); + G_CALLBACK (unmount_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_mnemonic (_("_Eject")); menu_data.eject_item = item; g_signal_connect (item, "activate", - G_CALLBACK (eject_shortcut_cb), sidebar); + G_CALLBACK (eject_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_mnemonic (_("_Detect Media")); menu_data.rescan_item = item; g_signal_connect (item, "activate", - G_CALLBACK (rescan_shortcut_cb), sidebar); + G_CALLBACK (rescan_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_mnemonic (_("_Start")); menu_data.start_item = item; g_signal_connect (item, "activate", - G_CALLBACK (start_shortcut_cb), sidebar); + G_CALLBACK (start_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); item = gtk_menu_item_new_with_mnemonic (_("_Stop")); menu_data.stop_item = item; g_signal_connect (item, "activate", - G_CALLBACK (stop_shortcut_cb), sidebar); + G_CALLBACK (stop_shortcut_cb), row); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (sidebar->popup_menu), item); /* Update everything! */ - get_selection_info (sidebar, &sel_info); - - check_popup_sensitivity (sidebar, &menu_data, &sel_info); + check_popup_sensitivity (row, &menu_data); /* And let the caller spice things up */ - if (sel_info.uri) - file = g_file_new_for_uri (sel_info.uri); + if (uri) + file = g_file_new_for_uri (uri); else file = NULL; - emit_populate_popup (sidebar, GTK_MENU (sidebar->popup_menu), file, sel_info.volume); + emit_populate_popup (sidebar, GTK_MENU (sidebar->popup_menu), file, volume); if (file) g_object_unref (file); - - free_selection_info (&sel_info); } static void -bookmarks_popup_menu (GtkPlacesSidebar *sidebar, - GdkEventButton *event) +bookmarks_popup_menu (GtkSidebarRow *row, + GdkEventButton *event) { gint button; + GtkPlacesSidebar *sidebar; + + g_object_get (row, "sidebar", &sidebar, NULL); if (sidebar->popup_menu) gtk_widget_destroy (sidebar->popup_menu); - bookmarks_build_popup_menu (sidebar); + bookmarks_build_popup_menu (row); /* The event button needs to be 0 if we're popping up this menu from * a button release, else a 2nd click outside the menu with any button @@ -3815,243 +3336,166 @@ bookmarks_popup_menu (GtkPlacesSidebar *sidebar, event ? event->time : gtk_get_current_event_time ()); } -/* Callback used for the GtkWidget::popup-menu signal of the shortcuts list */ -static gboolean -bookmarks_popup_menu_cb (GtkWidget *widget, - GtkPlacesSidebar *sidebar) -{ - bookmarks_popup_menu (sidebar, NULL); - return TRUE; -} - static void -bookmarks_row_activated_cb (GtkWidget *widget, - GtkTreePath *path, - GtkTreeViewColumn *column, - GtkPlacesSidebar *sidebar) +on_row_activated (GtkListBox *list_box, + GtkListBoxRow *row, + gpointer user_data) { - GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); - GtkTreePath *dummy; + GtkSidebarRow *selected_row; - if (!gtk_tree_model_get_iter (model, &iter, path)) + /* Avoid to open a location if the user is dragging. Changing the location + * while dragging usually makes clients changing the view of the files, which + * is confusing while the user has the attention on the drag */ + if (GTK_PLACES_SIDEBAR (user_data)->dragging_over) return; - dummy = NULL; - if (!clicked_eject_button (sidebar, &dummy)) - { - open_selected_bookmark (sidebar, model, &iter, 0); - gtk_tree_path_free (dummy); - } + selected_row = GTK_SIDEBAR_ROW (gtk_list_box_get_selected_row (list_box)); + open_row (selected_row, 0); } static gboolean -bookmarks_button_release_event_cb (GtkWidget *widget, - GdkEventButton *event, - GtkPlacesSidebar *sidebar) -{ - GtkTreePath *path; - GtkTreeIter iter; - GtkTreeModel *model; - GtkTreeView *tree_view; - gboolean ret = FALSE; - gboolean res; - - path = NULL; - - if (event->type != GDK_BUTTON_RELEASE) - return TRUE; - - if (clicked_eject_button (sidebar, &path)) - { - eject_or_unmount_bookmark (sidebar, path); - gtk_tree_path_free (path); - return TRUE; - } - - if (event->button == 1) - return FALSE; +on_button_press_event (GtkWidget *widget, + GdkEventButton *event, + GtkSidebarRow *row) +{ + GtkPlacesSidebar *sidebar; + GtkPlacesSidebarSectionType section_type; - tree_view = GTK_TREE_VIEW (widget); - model = gtk_tree_view_get_model (tree_view); + g_object_get (GTK_SIDEBAR_ROW (row), "sidebar", &sidebar, "section_type", §ion_type, NULL); - if (event->window != gtk_tree_view_get_bin_window (tree_view)) + if (section_type != SECTION_BOOKMARKS) return FALSE; - res = gtk_tree_view_get_path_at_pos (tree_view, (int) event->x, (int) event->y, - &path, NULL, NULL, NULL); + sidebar->drag_row = GTK_WIDGET (row); + sidebar->drag_row_x = (gint)event->x; + sidebar->drag_row_y = (gint)event->y; - if (!res || path == NULL) - return FALSE; + sidebar->drag_root_x = event->x_root; + sidebar->drag_root_y = event->y_root; - res = gtk_tree_model_get_iter (model, &iter, path); - if (!res) - { - gtk_tree_path_free (path); - return FALSE; - } - - if (event->button == 2) - { - GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL; - - open_flags = (event->state & GDK_CONTROL_MASK) ? - GTK_PLACES_OPEN_NEW_WINDOW : - GTK_PLACES_OPEN_NEW_TAB; - - open_selected_bookmark (sidebar, model, &iter, open_flags); - ret = TRUE; - } - else if (event->button == 3) - { - PlaceType row_type; - - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &row_type, - -1); - - if (row_type != PLACES_HEADING && row_type != PLACES_CONNECT_TO_SERVER) - bookmarks_popup_menu (sidebar, event); - } - - gtk_tree_path_free (path); - - return ret; + return FALSE; } static gboolean -tree_selection_func (GtkTreeSelection *selection, - GtkTreeModel *model, - GtkTreePath *path, - gboolean path_currently_selected, - gpointer user_data) -{ - GtkTreeIter iter; - PlaceType row_type; - - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &row_type, - -1); - - if (row_type == PLACES_HEADING) - return FALSE; - - return TRUE; -} - -static int -bookmarks_get_first_index (GtkPlacesSidebar *sidebar) +on_button_release_event (GtkWidget *widget, + GdkEventButton *event, + GtkSidebarRow *row) { - GtkTreeIter iter; - - g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), -1); + gboolean ret = FALSE; + gchar *label; - if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) + if (event && row) { - int bookmarks_heading_index = 0; + g_object_get (GTK_SIDEBAR_ROW (row), "label", &label, NULL); + if (event->button == 1) + return FALSE; - do + if (event->button == 2) { - PlaceType place_type; - SectionType section_type; + GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL; - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type, - -1); - if (place_type == PLACES_HEADING && section_type == SECTION_BOOKMARKS) - return ++bookmarks_heading_index; + open_flags = (event->state & GDK_CONTROL_MASK) ? + GTK_PLACES_OPEN_NEW_WINDOW : + GTK_PLACES_OPEN_NEW_TAB; - bookmarks_heading_index++; + open_row (GTK_SIDEBAR_ROW (row), open_flags); + ret = TRUE; } - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter)); - } - - g_warning ("Index of bookmarks not calculable. No bookmarks heading"); - - return -1; -} + else if (event->button == 3) + { + GtkPlacesSidebarPlaceType row_type; -static void -icon_cell_renderer_func (GtkTreeViewColumn *column, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) -{ - PlaceType type; + g_object_get (row, "place-type", &row_type, NULL); - gtk_tree_model_get (model, iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &type, - -1); + if (row_type != PLACES_CONNECT_TO_SERVER) + bookmarks_popup_menu (GTK_SIDEBAR_ROW (row), event); + } + } - g_object_set (cell, "visible", type != PLACES_HEADING, NULL); + return ret; } static gint -places_sidebar_sort_func (GtkTreeModel *model, - GtkTreeIter *iter_a, - GtkTreeIter *iter_b, - gpointer user_data) -{ - SectionType section_type_a, section_type_b; - PlaceType place_type_a, place_type_b; +list_box_sort_func (GtkListBoxRow *row1, + GtkListBoxRow *row2, + gpointer user_data) +{ + GtkPlacesSidebarSectionType section_type_1, section_type_2; + GtkPlacesSidebarPlaceType place_type_1, place_type_2; + const gchar *label_1, *label_2; + gint index_1, index_2; gint retval = 0; - gtk_tree_model_get (model, iter_a, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type_a, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type_a, - -1); - gtk_tree_model_get (model, iter_b, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type_b, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type_b, - -1); - - /* fall back to the default order if we're not in the - * XDG part of the computer section. - */ - if ((section_type_a == section_type_b) && - (section_type_a == SECTION_COMPUTER) && - (place_type_a == place_type_b) && - (place_type_a == PLACES_XDG_DIR)) - { - gchar *name_a, *name_b; - - gtk_tree_model_get (model, iter_a, - PLACES_SIDEBAR_COLUMN_NAME, &name_a, - -1); - gtk_tree_model_get (model, iter_b, - PLACES_SIDEBAR_COLUMN_NAME, &name_b, - -1); - - retval = g_utf8_collate (name_a, name_b); + g_object_get (GTK_SIDEBAR_ROW (row1), + "label", &label_1, + "place-type", &place_type_1, + "section-type", §ion_type_1, + "order-index", &index_1, + NULL); + g_object_get (GTK_SIDEBAR_ROW (row2), + "label", &label_2, + "place-type", &place_type_2, + "section-type", §ion_type_2, + "order-index", &index_2, + NULL); - g_free (name_a); - g_free (name_b); - } - else if ((place_type_a == place_type_b) && - (place_type_a == PLACES_BOOKMARK)) - { - gint pos_a, pos_b; - - gtk_tree_model_get (model, iter_a, - PLACES_SIDEBAR_COLUMN_INDEX, &pos_a, - -1); - gtk_tree_model_get (model, iter_b, - PLACES_SIDEBAR_COLUMN_INDEX, &pos_b, - -1); - - retval = pos_a - pos_b; - } - else if (place_type_a == PLACES_CONNECT_TO_SERVER) + /* Always last position for "connect to server" */ + if (place_type_1 == PLACES_CONNECT_TO_SERVER) { retval = 1; } - else if (place_type_b == PLACES_CONNECT_TO_SERVER) + else if (place_type_2 == PLACES_CONNECT_TO_SERVER) { retval = -1; } + else + { + if (section_type_1 == section_type_2) + { + if ((section_type_1 == section_type_2) && + (section_type_1 == SECTION_COMPUTER) && + (place_type_1 == place_type_2) && + (place_type_1 == PLACES_XDG_DIR)) + { + retval = g_utf8_collate (label_1, label_2); + } + else if ((place_type_1 == PLACES_BOOKMARK || place_type_2 == PLACES_DROP_FEEDBACK) && + (place_type_1 == PLACES_DROP_FEEDBACK || place_type_2 == PLACES_BOOKMARK)) + { + retval = index_1 - index_2; + } + /* We order the bookmarks sections based on the bookmark index that we + * set on the row as a order-index property, but we have to deal with + * the placeholder row wanted to be between two consecutive bookmarks, + * with two consecutive order-index values which is the usual case. + * For that, in the list box sort func we give priority to the placeholder row, + * that means that if the index-order is the same as another bookmark + * the placeholder row goes before. However if we want to show it after + * the current row, for instance when the cursor is in the lower half + * of the row, we need to increase the order-index. + */ + else if (place_type_1 == PLACES_BOOKMARK_PLACEHOLDER && place_type_2 == PLACES_BOOKMARK) + { + if (index_1 == index_2) + retval = index_1 - index_2 - 1; + else + retval = index_1 - index_2; + } + else if (place_type_1 == PLACES_BOOKMARK && place_type_2 == PLACES_BOOKMARK_PLACEHOLDER) + { + if (index_1 == index_2) + retval = index_1 - index_2 + 1; + else + retval = index_1 - index_2; + } + } + else + { + /* Order by section. That means the order in the enum of section types + * define the actual order of them in the list */ + retval = section_type_1 - section_type_2; + } + } return retval; } @@ -4167,30 +3611,12 @@ shell_shows_desktop_changed (GtkSettings *settings, } } -static gboolean -row_separator_func (GtkTreeModel *model, - GtkTreeIter *iter, - gpointer data) -{ - PlaceType type; - - gtk_tree_model_get (model, iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &type, - -1); - - return type == PLACES_HEADING; -} - static void gtk_places_sidebar_init (GtkPlacesSidebar *sidebar) { - GtkTreeView *tree_view; - GtkTreeViewColumn *col; - GtkCellRenderer *cell; - GtkTreeSelection *selection; - GIcon *eject; GtkTargetList *target_list; gboolean b; + GtkStyleContext *context; gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (sidebar)), GTK_STYLE_CLASS_SIDEBAR); @@ -4206,8 +3632,6 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar) sidebar->trash_monitor_changed_id = g_signal_connect_swapped (sidebar->trash_monitor, "trash-state-changed", G_CALLBACK (update_places), sidebar); - sidebar->shortcuts = NULL; - gtk_widget_set_size_request (GTK_WIDGET (sidebar), 140, 280); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sidebar), @@ -4220,144 +3644,64 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar) gtk_style_context_set_junction_sides (gtk_widget_get_style_context (GTK_WIDGET (sidebar)), GTK_JUNCTION_RIGHT | GTK_JUNCTION_LEFT); - /* tree view */ - tree_view = GTK_TREE_VIEW (gtk_tree_view_new ()); - gtk_tree_view_set_headers_visible (tree_view, FALSE); - - gtk_tree_view_set_row_separator_func (tree_view, - row_separator_func, - sidebar, - NULL); - - col = gtk_tree_view_column_new (); - - /* icon renderer */ - cell = gtk_cell_renderer_pixbuf_new (); - g_object_set (cell, - "xpad", 10, - "ypad", 8, - NULL); - gtk_tree_view_column_pack_start (col, cell, FALSE); - gtk_tree_view_column_set_attributes (col, cell, - "gicon", PLACES_SIDEBAR_COLUMN_GICON, - "sensitive", PLACES_SIDEBAR_COLUMN_SENSITIVE, - NULL); - gtk_tree_view_column_set_cell_data_func (col, cell, - icon_cell_renderer_func, - sidebar, NULL); - - /* eject text renderer */ - cell = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (col, cell, TRUE); - gtk_tree_view_column_set_attributes (col, cell, - "text", PLACES_SIDEBAR_COLUMN_NAME, - "visible", PLACES_SIDEBAR_COLUMN_EJECT, - NULL); - g_object_set (cell, - "ellipsize", PANGO_ELLIPSIZE_END, - "ellipsize-set", TRUE, - NULL); - - /* eject icon renderer */ - cell = gtk_cell_renderer_pixbuf_new (); - sidebar->eject_icon_cell_renderer = cell; - eject = g_themed_icon_new_with_default_fallbacks ("media-eject-symbolic"); - g_object_set (cell, - "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, - "stock-size", GTK_ICON_SIZE_MENU, - "xpad", EJECT_BUTTON_XPAD, - /* align right, because for some reason gtk+ expands - this even though we tell it not to. */ - "xalign", 1.0, - "gicon", eject, - NULL); - gtk_tree_view_column_pack_start (col, cell, FALSE); - gtk_tree_view_column_set_attributes (col, cell, - "visible", PLACES_SIDEBAR_COLUMN_EJECT, - NULL); - g_object_unref (eject); - - /* normal text renderer */ - cell = gtk_cell_renderer_text_new (); - sidebar->text_cell_renderer = cell; - gtk_tree_view_column_pack_start (col, cell, TRUE); - g_object_set (G_OBJECT (cell), "editable", FALSE, NULL); - gtk_tree_view_column_set_attributes (col, cell, - "text", PLACES_SIDEBAR_COLUMN_NAME, - "visible", PLACES_SIDEBAR_COLUMN_NO_EJECT, - "editable-set", PLACES_SIDEBAR_COLUMN_BOOKMARK, - "sensitive", PLACES_SIDEBAR_COLUMN_SENSITIVE, - NULL); - g_object_set (cell, - "ellipsize", PANGO_ELLIPSIZE_END, - "ellipsize-set", TRUE, - NULL); - - /* this is required to align the eject buttons to the right */ - gtk_tree_view_column_set_max_width (GTK_TREE_VIEW_COLUMN (col), 24); - gtk_tree_view_append_column (tree_view, col); - - sidebar->store = shortcuts_model_new (sidebar); - gtk_tree_view_set_tooltip_column (tree_view, PLACES_SIDEBAR_COLUMN_TOOLTIP); - - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sidebar->store), - PLACES_SIDEBAR_COLUMN_NAME, - GTK_SORT_ASCENDING); - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sidebar->store), - PLACES_SIDEBAR_COLUMN_NAME, - places_sidebar_sort_func, - sidebar, NULL); - - gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL (sidebar->store)); - gtk_container_add (GTK_CONTAINER (sidebar), GTK_WIDGET (tree_view)); - gtk_widget_show (GTK_WIDGET (tree_view)); - gtk_tree_view_set_enable_search (tree_view, FALSE); - - gtk_widget_show (GTK_WIDGET (sidebar)); - sidebar->tree_view = tree_view; - - gtk_tree_view_set_search_column (tree_view, PLACES_SIDEBAR_COLUMN_NAME); - selection = gtk_tree_view_get_selection (tree_view); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); - - gtk_tree_selection_set_select_function (selection, - tree_selection_func, - sidebar, - NULL); - - gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (tree_view), - GDK_BUTTON1_MASK, - dnd_source_targets, G_N_ELEMENTS (dnd_source_targets), - GDK_ACTION_MOVE); - gtk_drag_dest_set (GTK_WIDGET (tree_view), + /* list box */ + sidebar->list_box = gtk_list_box_new (); + context = gtk_widget_get_style_context (sidebar->list_box); + gtk_style_context_add_class (context, "sidebar"); + + gtk_list_box_set_header_func (GTK_LIST_BOX (sidebar->list_box), + list_box_header_func, sidebar, NULL); + gtk_list_box_set_sort_func (GTK_LIST_BOX (sidebar->list_box), + list_box_sort_func, NULL, NULL); + gtk_list_box_set_selection_mode (GTK_LIST_BOX (sidebar->list_box), + GTK_SELECTION_SINGLE); + gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (sidebar->list_box), + TRUE); + g_signal_connect (sidebar->list_box, + "row-activated", + G_CALLBACK (on_row_activated), + sidebar); + g_signal_connect (sidebar->list_box, + "key-press-event", + G_CALLBACK (on_key_press_event), + sidebar); + + /* DND support */ + gtk_drag_dest_set (sidebar->list_box, 0, NULL, 0, GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK); target_list = gtk_target_list_new (dnd_drop_targets, G_N_ELEMENTS (dnd_drop_targets)); - gtk_target_list_add_uri_targets (target_list, TEXT_URI_LIST); - gtk_drag_dest_set_target_list (GTK_WIDGET (tree_view), target_list); + gtk_target_list_add_uri_targets (target_list, DND_TEXT_URI_LIST); + gtk_drag_dest_set_target_list (sidebar->list_box, target_list); gtk_target_list_unref (target_list); + sidebar->source_targets = gtk_target_list_new (dnd_source_targets, G_N_ELEMENTS (dnd_source_targets)); + gtk_target_list_add_text_targets (sidebar->source_targets, 0); - g_signal_connect (tree_view, "key-press-event", - G_CALLBACK (bookmarks_key_press_event_cb), sidebar); + gtk_drag_dest_set_track_motion (GTK_WIDGET (sidebar->list_box), TRUE); - g_signal_connect (tree_view, "drag-motion", + g_signal_connect (sidebar->list_box, "motion-notify-event", + G_CALLBACK (on_motion_notify_event), sidebar); + g_signal_connect (sidebar->list_box, "drag-begin", + G_CALLBACK (drag_begin_callback), sidebar); + g_signal_connect (sidebar->list_box, "drag-motion", G_CALLBACK (drag_motion_callback), sidebar); - g_signal_connect (tree_view, "drag-leave", - G_CALLBACK (drag_leave_callback), sidebar); - g_signal_connect (tree_view, "drag-data-received", + g_signal_connect (sidebar->list_box, "drag-data-get", + G_CALLBACK (drag_data_get_callback), sidebar); + g_signal_connect (sidebar->list_box, "drag-data-received", G_CALLBACK (drag_data_received_callback), sidebar); - g_signal_connect (tree_view, "drag-drop", + g_signal_connect (sidebar->list_box, "drag-drop", G_CALLBACK (drag_drop_callback), sidebar); + g_signal_connect (sidebar->list_box, "drag-end", + G_CALLBACK (drag_end_callback), sidebar); + g_signal_connect (sidebar->list_box, "drag-leave", + G_CALLBACK (drag_leave_callback), sidebar); + sidebar->drag_row = NULL; + sidebar->row_placeholder = NULL; + sidebar->dragging_over = FALSE; + sidebar->drag_data_info = DND_UNKNOWN; - g_signal_connect (tree_view, "popup-menu", - G_CALLBACK (bookmarks_popup_menu_cb), sidebar); - g_signal_connect (tree_view, "button-release-event", - G_CALLBACK (bookmarks_button_release_event_cb), sidebar); - g_signal_connect (tree_view, "row-activated", - G_CALLBACK (bookmarks_row_activated_cb), sidebar); - - gtk_tree_view_set_activate_on_single_click (sidebar->tree_view, TRUE); + gtk_container_add (GTK_CONTAINER (sidebar), sidebar->list_box); sidebar->hostname = g_strdup (_("Computer")); sidebar->hostnamed_cancellable = g_cancellable_new (); @@ -4486,9 +3830,7 @@ gtk_places_sidebar_dispose (GObject *object) sidebar->cancellable = NULL; } - on_drag_end (sidebar); - - sidebar->tree_view = NULL; + free_drag_data (sidebar); if (sidebar->bookmarks_manager != NULL) { @@ -4509,11 +3851,6 @@ gtk_places_sidebar_dispose (GObject *object) g_clear_object (&sidebar->trash_monitor); } - g_clear_object (&sidebar->store); - - g_slist_free_full (sidebar->shortcuts, g_object_unref); - sidebar->shortcuts = NULL; - if (sidebar->volume_monitor != NULL) { g_signal_handlers_disconnect_by_func (sidebar->volume_monitor, @@ -4554,8 +3891,6 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class) gobject_class->set_property = gtk_places_sidebar_set_property; gobject_class->get_property = gtk_places_sidebar_get_property; - GTK_WIDGET_CLASS (class)->focus = gtk_places_sidebar_focus; - /** * GtkPlacesSidebar::open-location: * @sidebar: the object which received the signal. @@ -4838,86 +4173,6 @@ gtk_places_sidebar_new (void) return GTK_WIDGET (g_object_new (gtk_places_sidebar_get_type (), NULL)); } - - -/* Drag and drop interfaces */ - -/* GtkTreeDragSource::row_draggable implementation for the shortcuts model */ -static gboolean -shortcuts_model_row_draggable (GtkTreeDragSource *drag_source, - GtkTreePath *path) -{ - GtkTreeModel *model; - GtkTreeIter iter; - PlaceType place_type; - SectionType section_type; - - model = GTK_TREE_MODEL (drag_source); - - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_SECTION_TYPE, §ion_type, - -1); - - if (place_type != PLACES_HEADING && section_type == SECTION_BOOKMARKS) - return TRUE; - - return FALSE; -} - -/* Fill the GtkTreeDragSourceIface vtable */ -static void -shortcuts_model_class_init (ShortcutsModelClass *klass) -{ -} - -static void -shortcuts_model_init (ShortcutsModel *model) -{ - model->sidebar = NULL; -} - -static void -shortcuts_model_drag_source_iface_init (GtkTreeDragSourceIface *iface) -{ - iface->row_draggable = shortcuts_model_row_draggable; -} - -static GtkListStore * -shortcuts_model_new (GtkPlacesSidebar *sidebar) -{ - ShortcutsModel *model; - GType model_types[PLACES_SIDEBAR_COLUMN_COUNT] = { - G_TYPE_INT, - G_TYPE_STRING, - G_TYPE_DRIVE, - G_TYPE_VOLUME, - G_TYPE_MOUNT, - G_TYPE_STRING, - G_TYPE_ICON, - G_TYPE_INT, - G_TYPE_BOOLEAN, - G_TYPE_BOOLEAN, - G_TYPE_BOOLEAN, - G_TYPE_STRING, - G_TYPE_INT, - G_TYPE_STRING, - G_TYPE_BOOLEAN - }; - - model = g_object_new (shortcuts_model_get_type (), NULL); - model->sidebar = sidebar; - - gtk_list_store_set_column_types (GTK_LIST_STORE (model), - PLACES_SIDEBAR_COLUMN_COUNT, - model_types); - - return GTK_LIST_STORE (model); -} - - - /* Public methods for GtkPlacesSidebar */ /** @@ -4991,16 +4246,14 @@ void gtk_places_sidebar_set_location (GtkPlacesSidebar *sidebar, GFile *location) { - GtkTreeSelection *selection; - GtkTreeIter iter; - gboolean valid; - gchar *iter_uri; - gchar *uri; + GList *children; + GList *child; + gchar *row_uri; + gchar *uri; g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar)); - selection = gtk_tree_view_get_selection (sidebar->tree_view); - gtk_tree_selection_unselect_all (selection); + gtk_list_box_unselect_all (GTK_LIST_BOX (sidebar->list_box)); if (sidebar->current_location != NULL) g_object_unref (sidebar->current_location); @@ -5009,30 +4262,24 @@ gtk_places_sidebar_set_location (GtkPlacesSidebar *sidebar, g_object_ref (sidebar->current_location); if (location == NULL) - goto out; + goto out; uri = g_file_get_uri (location); - valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter); - while (valid) + children = gtk_container_get_children (GTK_CONTAINER (sidebar->list_box)); + for (child = children; child != NULL; child = child->next) { - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_URI, &iter_uri, - -1); - if (iter_uri != NULL) + g_object_get (GTK_SIDEBAR_ROW (child->data), "uri", &row_uri, NULL); + if (row_uri != NULL && g_strcmp0 (row_uri, uri) == 0) { - if (strcmp (iter_uri, uri) == 0) - { - g_free (iter_uri); - gtk_tree_selection_select_iter (selection, &iter); - break; - } - g_free (iter_uri); + gtk_list_box_select_row (GTK_LIST_BOX (sidebar->list_box), + GTK_LIST_BOX_ROW (child->data)); + break; } - valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter); } g_free (uri); + g_list_free (children); out: g_object_notify_by_pspec (G_OBJECT (sidebar), properties[PROP_LOCATION]); @@ -5060,23 +4307,20 @@ gtk_places_sidebar_set_location (GtkPlacesSidebar *sidebar, GFile * gtk_places_sidebar_get_location (GtkPlacesSidebar *sidebar) { - GtkTreeIter iter; + GtkListBoxRow *selected; GFile *file; g_return_val_if_fail (sidebar != NULL, NULL); file = NULL; + selected = gtk_list_box_get_selected_row (GTK_LIST_BOX (sidebar->list_box)); - if (get_selected_iter (sidebar, &iter)) + if (selected) { gchar *uri; - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - + g_object_get (GTK_SIDEBAR_ROW (selected), "uri", &uri, NULL); file = g_file_new_for_uri (uri); - g_free (uri); } return file; @@ -5434,43 +4678,41 @@ GFile * gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, gint n) { - GtkTreeIter iter; + GList *rows; + GList *l; int k; GFile *file; g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), NULL); file = NULL; + rows = gtk_container_get_children (GTK_CONTAINER (sidebar->list_box)); + l = rows; - if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) + k = 0; + while (l != NULL) { - k = 0; + GtkPlacesSidebarPlaceType place_type; + gchar *uri; - do + g_object_get (GTK_SIDEBAR_ROW (l->data), + "place-type", &place_type, + "uri", &uri, + NULL); + if (place_type == PLACES_BOOKMARK) { - PlaceType place_type; - gchar *uri; - - gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, - PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type, - PLACES_SIDEBAR_COLUMN_URI, &uri, - -1); - - if (place_type == PLACES_BOOKMARK) + if (k == n) { - if (k == n) - { - file = g_file_new_for_uri (uri); - g_free (uri); - break; - } - g_free (uri); - k++; + file = g_file_new_for_uri (uri); + break; } + k++; } - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter)); + l = l->next; } + g_list_free (rows); + return file; } @@ -5500,9 +4742,8 @@ gtk_places_sidebar_set_drop_targets_visible (GtkPlacesSidebar *sidebar, { if (visible) { - show_new_bookmark_row (sidebar, NULL); - update_possible_drop_targets (sidebar, TRUE); sidebar->drop_state = DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT; + start_drop_feedback (sidebar, NULL, context); } else { @@ -5511,7 +4752,8 @@ gtk_places_sidebar_set_drop_targets_visible (GtkPlacesSidebar *sidebar, { if (!sidebar->dragging_over) { - on_drag_end (sidebar); + sidebar->drop_state = DROP_STATE_NORMAL; + stop_drop_feedback (sidebar); } else { diff --git a/gtk/gtkplacessidebarprivate.h b/gtk/gtkplacessidebarprivate.h new file mode 100644 index 0000000000..dd5f34b571 --- /dev/null +++ b/gtk/gtkplacessidebarprivate.h @@ -0,0 +1,54 @@ +/* gtkplacessidebarprivate.h + * + * Copyright (C) 2015 Red Hat + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * Authors: Carlos Soriano <csoriano@gnome.org> + */ + +#ifndef __GTK_PLACES_SIDEBAR_PRIVATE_H__ +#define __GTK_PLACES_SIDEBAR_PRIVATE_H__ + +#include <glib.h> + +G_BEGIN_DECLS + +/* Keep order, since it's used for the sort functions */ +typedef enum { + SECTION_INVALID, + SECTION_COMPUTER, + SECTION_DEVICES, + SECTION_NETWORK, + SECTION_BOOKMARKS, + N_SECTIONS +} GtkPlacesSidebarSectionType; + +typedef enum { + PLACES_INVALID, + PLACES_BUILT_IN, + PLACES_XDG_DIR, + PLACES_MOUNTED_VOLUME, + PLACES_BOOKMARK, + PLACES_HEADING, + PLACES_CONNECT_TO_SERVER, + PLACES_ENTER_LOCATION, + PLACES_DROP_FEEDBACK, + PLACES_BOOKMARK_PLACEHOLDER, + N_PLACES +} GtkPlacesSidebarPlaceType; + +G_END_DECLS + +#endif /* __GTK_PLACES_SIDEBAR_PRIVATE_H__ */ diff --git a/gtk/gtksidebarrow.c b/gtk/gtksidebarrow.c new file mode 100644 index 0000000000..e56180c538 --- /dev/null +++ b/gtk/gtksidebarrow.c @@ -0,0 +1,629 @@ +/* gtksidebarrow.c + * + * Copyright (C) 2015 Carlos Soriano <csoriano@gnome.org> + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "gtksidebarrowprivate.h" +/* For section and place type enums */ +#include "gtkplacessidebarprivate.h" +#include "gtkplacessidebar.h" +#include "gtkwidget.h" +#include "gtkimage.h" +#include "gtklabel.h" +#include "gtkstylecontext.h" +#include "gtkrevealer.h" +#include "gtkselection.h" + +struct _GtkSidebarRow +{ + GtkListBoxRow parent_instance; + GIcon *icon; + GtkWidget *icon_widget; + gchar *label; + gchar *tooltip; + GtkWidget *label_widget; + gboolean ejectable; + GtkWidget *eject_button; + gint order_index; + GtkPlacesSidebarSectionType section_type; + GtkPlacesSidebarPlaceType place_type; + gchar *uri; + GDrive *drive; + GVolume *volume; + GMount *mount; + gboolean sensitive; + gboolean placeholder; + GtkPlacesSidebar *sidebar; + GtkWidget *event_box; + GtkWidget *revealer; +}; + +G_DEFINE_TYPE (GtkSidebarRow, gtk_sidebar_row, GTK_TYPE_LIST_BOX_ROW) + +enum +{ + PROP_0, + PROP_ICON, + PROP_LABEL, + PROP_TOOLTIP, + PROP_EJECTABLE, + PROP_SIDEBAR, + PROP_ORDER_INDEX, + PROP_SECTION_TYPE, + PROP_PLACE_TYPE, + PROP_URI, + PROP_DRIVE, + PROP_VOLUME, + PROP_MOUNT, + PROP_SENSITIVE, + PROP_PLACEHOLDER, + PROP_EJECT_BUTTON, + PROP_EVENT_BOX, + LAST_PROP +}; + +static GParamSpec *gParamSpecs [LAST_PROP]; + +static void +gtk_sidebar_row_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkSidebarRow *self = GTK_SIDEBAR_ROW (object); + + switch (prop_id) + { + case PROP_SIDEBAR: + { + g_value_set_object (value, self->sidebar); + break; + } + + case PROP_ICON: + { + g_value_set_object (value, self->icon); + break; + } + + case PROP_LABEL: + { + g_value_set_string (value, self->label); + break; + } + + case PROP_TOOLTIP: + { + g_value_set_string (value, self->tooltip); + break; + } + + case PROP_EJECTABLE: + { + g_value_set_boolean (value, self->ejectable); + break; + } + + case PROP_ORDER_INDEX: + { + g_value_set_int (value, self->order_index); + break; + } + + case PROP_SECTION_TYPE: + { + g_value_set_int (value, self->section_type); + break; + } + + case PROP_PLACE_TYPE: + { + g_value_set_int (value, self->place_type); + break; + } + + case PROP_URI: + { + g_value_set_string (value, self->uri); + break; + } + + case PROP_DRIVE: + { + g_value_set_object (value, self->drive); + break; + } + + case PROP_VOLUME: + { + g_value_set_object (value, self->volume); + break; + } + + case PROP_MOUNT: + { + g_value_set_object (value, self->mount); + break; + } + + case PROP_SENSITIVE: + { + g_value_set_boolean (value, self->sensitive); + break; + } + + case PROP_PLACEHOLDER: + { + g_value_set_boolean (value, self->placeholder); + break; + } + + case PROP_EJECT_BUTTON: + { + g_value_set_object (value, self->eject_button); + break; + } + + case PROP_EVENT_BOX: + { + g_value_set_object (value, self->event_box); + break; + } + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +gtk_sidebar_row_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkSidebarRow *self = GTK_SIDEBAR_ROW (object); + + switch (prop_id) + { + case PROP_SIDEBAR: + { + self->sidebar = g_value_get_object (value); + break; + } + + case PROP_ICON: + { + g_clear_object (&self->icon); + if (value != NULL) + { + self->icon = g_object_ref (g_value_get_object (value)); + gtk_image_set_from_gicon (GTK_IMAGE (self->icon_widget), self->icon, GTK_ICON_SIZE_MENU); + } + else + { + self->icon = NULL; + gtk_image_clear (GTK_IMAGE (self->icon_widget)); + } + break; + } + + case PROP_LABEL: + { + g_free (self->label); + self->label = g_strdup (g_value_get_string (value)); + gtk_label_set_text (GTK_LABEL (self->label_widget), self->label); + break; + } + + case PROP_TOOLTIP: + { + g_free (self->tooltip); + self->tooltip = g_strdup (g_value_get_string (value)); + gtk_widget_set_tooltip_text (GTK_WIDGET (self), self->tooltip); + break; + } + + case PROP_EJECTABLE: + { + self->ejectable = g_value_get_boolean (value); + if (self->ejectable) + gtk_widget_show (self->eject_button); + else + gtk_widget_hide (self->eject_button); + break; + } + + case PROP_ORDER_INDEX: + { + self->order_index = g_value_get_int (value); + break; + } + + case PROP_SECTION_TYPE: + { + self->section_type = g_value_get_int (value); + if (self->section_type != SECTION_COMPUTER) + gtk_label_set_ellipsize (GTK_LABEL (self->label_widget), PANGO_ELLIPSIZE_END); + else + gtk_label_set_ellipsize (GTK_LABEL (self->label_widget), PANGO_ELLIPSIZE_NONE); + break; + } + + case PROP_PLACE_TYPE: + { + self->place_type = g_value_get_int (value); + break; + } + + case PROP_URI: + { + g_free (self->uri); + self->uri = g_strdup (g_value_get_string (value)); + break; + } + + case PROP_DRIVE: + { + gpointer *object; + + g_clear_object (&self->drive); + object = g_value_get_object (value); + if (object != NULL) + self->drive = g_object_ref (object); + break; + } + + case PROP_VOLUME: + { + gpointer *object; + + g_clear_object (&self->volume); + object = g_value_get_object (value); + if (object != NULL) + self->volume = g_object_ref (object); + break; + } + + case PROP_MOUNT: + { + gpointer *object; + + g_clear_object (&self->mount); + object = g_value_get_object (value); + if (object != NULL) + self->mount = g_object_ref (object); + break; + } + + case PROP_SENSITIVE: + { + GtkStyleContext *style_context; + + self->sensitive = g_value_get_boolean (value); + style_context = gtk_widget_get_style_context (GTK_WIDGET (self)); + /* Modifying the actual sensitivity of the widget makes the drag state + * to change and calling drag-leave wich modifies the gtklistbox and a + * style race ocurs. So since we only use it for show which rows are + * drop targets, we can simple use a dim-label style */ + if (self->sensitive) + gtk_style_context_remove_class (style_context, "dim-label"); + else + gtk_style_context_add_class (style_context, "dim-label"); + + break; + } + + case PROP_PLACEHOLDER: + { + GtkStyleContext *context; + + self->placeholder = g_value_get_boolean (value); + if (self->placeholder) + { + g_clear_object (&self->icon); + g_free (self->label); + self->label = NULL; + g_free (self->tooltip); + self->tooltip = NULL; + gtk_widget_set_tooltip_text (GTK_WIDGET (self), NULL); + self->ejectable = FALSE; + self->section_type = SECTION_BOOKMARKS; + self->place_type = PLACES_BOOKMARK_PLACEHOLDER; + g_free (self->uri); + self->uri = NULL; + g_clear_object (&self->drive); + g_clear_object (&self->volume); + g_clear_object (&self->mount); + + gtk_container_foreach (GTK_CONTAINER (self), + (GtkCallback) gtk_widget_destroy, + NULL); + + context = gtk_widget_get_style_context (GTK_WIDGET (self)); + gtk_style_context_add_class (context, "sidebar-placeholder-row"); + } + + break; + } + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +on_child_revealed (GObject *self, + GParamSpec *pspec, + gpointer user_data) +{ + /* We need to hide the actual widget because if not the GtkListBoxRow will + * still allocate the paddings, even if the revealer is not revealed, and + * therefore the row will be still somewhat visible. */ + if (!gtk_revealer_get_reveal_child (GTK_REVEALER (self))) + gtk_widget_hide (GTK_WIDGET (GTK_SIDEBAR_ROW (user_data))); +} + +void +gtk_sidebar_row_reveal (GtkSidebarRow *self) +{ + gtk_widget_show_all (GTK_WIDGET (self)); + gtk_revealer_set_reveal_child (GTK_REVEALER (self->revealer), TRUE); +} + +void +gtk_sidebar_row_hide (GtkSidebarRow *self, + gboolean inmediate) +{ + guint transition_duration; + + transition_duration = gtk_revealer_get_transition_duration (GTK_REVEALER (self->revealer)); + if (inmediate) + gtk_revealer_set_transition_duration (GTK_REVEALER (self->revealer), 0); + + gtk_revealer_set_reveal_child (GTK_REVEALER (self->revealer), FALSE); + + gtk_revealer_set_transition_duration (GTK_REVEALER (self->revealer), transition_duration); +} + +static void +gtk_sidebar_row_finalize (GObject *object) +{ + GtkSidebarRow *self = GTK_SIDEBAR_ROW (object); + + g_clear_object (&self->icon); + g_free (self->label); + self->label = NULL; + g_free (self->tooltip); + self->tooltip = NULL; + g_free (self->uri); + self->uri = NULL; + g_clear_object (&self->drive); + g_clear_object (&self->volume); + g_clear_object (&self->mount); +} + +static void +gtk_sidebar_row_init (GtkSidebarRow *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); +} + +static void +gtk_sidebar_row_class_init (GtkSidebarRowClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->get_property = gtk_sidebar_row_get_property; + object_class->set_property = gtk_sidebar_row_set_property; + object_class->finalize = gtk_sidebar_row_finalize; + + gParamSpecs [PROP_SIDEBAR] = + g_param_spec_object ("sidebar", + "Sidebar", + "Sidebar", + GTK_TYPE_PLACES_SIDEBAR, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_SIDEBAR, + gParamSpecs [PROP_SIDEBAR]); + gParamSpecs [PROP_ICON] = + g_param_spec_object ("icon", + "icon", + "The place icon.", + G_TYPE_ICON, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_ICON, + gParamSpecs [PROP_ICON]); + + gParamSpecs [PROP_LABEL] = + g_param_spec_string ("label", + "label", + "The label text.", + NULL, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_LABEL, + gParamSpecs [PROP_LABEL]); + + gParamSpecs [PROP_TOOLTIP] = + g_param_spec_string ("tooltip", + "Tooltip", + "Tooltip", + NULL, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_TOOLTIP, + gParamSpecs [PROP_TOOLTIP]); + + gParamSpecs [PROP_EJECTABLE] = + g_param_spec_boolean ("ejectable", + "Ejectable", + "Ejectable", + FALSE, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_EJECTABLE, + gParamSpecs [PROP_EJECTABLE]); + + gParamSpecs [PROP_ORDER_INDEX] = + g_param_spec_int ("order-index", + "OrderIndex", + "Order Index", + 0, G_MAXINT, 0, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_ORDER_INDEX, + gParamSpecs [PROP_ORDER_INDEX]); + + gParamSpecs [PROP_SECTION_TYPE] = + g_param_spec_int ("section-type", + "section type", + "The section type.", + SECTION_INVALID, N_SECTIONS, SECTION_INVALID, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, PROP_SECTION_TYPE, + gParamSpecs [PROP_SECTION_TYPE]); + + gParamSpecs [PROP_PLACE_TYPE] = + g_param_spec_int ("place-type", + "place type", + "The place type.", + PLACES_INVALID, N_PLACES, PLACES_INVALID, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, PROP_PLACE_TYPE, + gParamSpecs [PROP_PLACE_TYPE]); + + gParamSpecs [PROP_URI] = + g_param_spec_string ("uri", + "Uri", + "Uri", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_URI, + gParamSpecs [PROP_URI]); + gParamSpecs [PROP_DRIVE] = + g_param_spec_object ("drive", + "Drive", + "Drive", + G_TYPE_DRIVE, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_DRIVE, + gParamSpecs [PROP_DRIVE]); + + gParamSpecs [PROP_VOLUME] = + g_param_spec_object ("volume", + "Volume", + "Volume", + G_TYPE_VOLUME, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_VOLUME, + gParamSpecs [PROP_VOLUME]); + + gParamSpecs [PROP_MOUNT] = + g_param_spec_object ("mount", + "Mount", + "Mount", + G_TYPE_MOUNT, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_MOUNT, + gParamSpecs [PROP_MOUNT]); + gParamSpecs [PROP_SENSITIVE] = + g_param_spec_boolean ("sensitive", + "Sensitive", + "Make the row sensitive or not", + TRUE, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_SENSITIVE, + gParamSpecs [PROP_SENSITIVE]); + + gParamSpecs [PROP_PLACEHOLDER] = + g_param_spec_boolean ("placeholder", + "Placeholder", + "Placeholder", + FALSE, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_PLACEHOLDER, + gParamSpecs [PROP_PLACEHOLDER]); + + gParamSpecs [PROP_EJECT_BUTTON] = + g_param_spec_object ("eject-button", + "Eject Button", + "Eject button", + GTK_TYPE_WIDGET, + (G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_EJECT_BUTTON, + gParamSpecs [PROP_EJECT_BUTTON]); + + gParamSpecs [PROP_EVENT_BOX] = + g_param_spec_object ("event-box", + "Event Box", + "Event Box", + GTK_TYPE_WIDGET, + (G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_EVENT_BOX, + gParamSpecs [PROP_EVENT_BOX]); + + gtk_widget_class_set_template_from_resource (widget_class, + "/org/gtk/libgtk/ui/gtksidebarrow.ui"); + + gtk_widget_class_bind_template_child (widget_class, GtkSidebarRow, icon_widget); + gtk_widget_class_bind_template_child (widget_class, GtkSidebarRow, label_widget); + gtk_widget_class_bind_template_child (widget_class, GtkSidebarRow, eject_button); + gtk_widget_class_bind_template_child (widget_class, GtkSidebarRow, event_box); + gtk_widget_class_bind_template_child (widget_class, GtkSidebarRow, revealer); + + gtk_widget_class_bind_template_callback (widget_class, on_child_revealed); +} + + +GtkSidebarRow* +gtk_sidebar_row_clone (GtkSidebarRow *self) +{ + return g_object_new (GTK_TYPE_SIDEBAR_ROW, + "sidebar", self->sidebar, + "icon", self->icon, + "label", self->label, + "tooltip", self->tooltip, + "ejectable", self->ejectable, + "order-index", self->order_index, + "section-type", self->section_type, + "place-type", self->place_type, + "uri", self->uri, + "drive", self->drive, + "volume", self->volume, + "mount", self->mount, + NULL); +} diff --git a/gtk/gtksidebarrowprivate.h b/gtk/gtksidebarrowprivate.h new file mode 100644 index 0000000000..b513184e7a --- /dev/null +++ b/gtk/gtksidebarrowprivate.h @@ -0,0 +1,53 @@ +/* gtksidebarrowprivate.h + * + * Copyright (C) 2015 Carlos Soriano <csoriano@gnome.org> + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#ifndef GTK_SIDEBAR_ROW_PRIVATE_H +#define GTK_SIDEBAR_ROW_PRIVATE_H + +#include <glib.h> +#include "gtklistbox.h" + +G_BEGIN_DECLS + +#define GTK_TYPE_SIDEBAR_ROW (gtk_sidebar_row_get_type()) +#define GTK_SIDEBAR_ROW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SIDEBAR_ROW, GtkSidebarRow)) +#define GTK_SIDEBAR_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SIDEBAR_ROW, GtkSidebarRowClass)) +#define GTK_IS_SIDEBAR_ROW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SIDEBAR_ROW)) +#define GTK_IS_SIDEBAR_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SIDEBAR_ROW)) +#define GTK_SIDEBAR_ROW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SIDEBAR_ROW, GtkSidebarRowClass)) + +typedef struct _GtkSidebarRow GtkSidebarRow; +typedef struct _GtkSidebarRowClass GtkSidebarRowClass; + +struct _GtkSidebarRowClass +{ + GtkListBoxRowClass parent; +}; + +GType gtk_sidebar_row_get_type (void) G_GNUC_CONST; + +GtkSidebarRow *gtk_sidebar_row_new (void); +GtkSidebarRow *gtk_sidebar_row_clone (GtkSidebarRow *self); + +/* Use these methods instead of gtk_widget_hide/show to use an animation */ +void gtk_sidebar_row_hide (GtkSidebarRow *self, + gboolean inmediate); +void gtk_sidebar_row_reveal (GtkSidebarRow *self); + +G_END_DECLS + +#endif /* GTK_SIDEBAR_ROW_PRIVATE_H */ diff --git a/gtk/theme/Adwaita/_colors.scss b/gtk/theme/Adwaita/_colors.scss index 4590c1e264..1479064ecd 100644 --- a/gtk/theme/Adwaita/_colors.scss +++ b/gtk/theme/Adwaita/_colors.scss @@ -30,7 +30,7 @@ $osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_col $osd_insensitive_fg_color: mix($osd_fg_color, opacify($osd_bg_color, 1), 50%); $osd_borders_color: transparentize(black, 0.3); -$sidebar_bg_color: lighten($bg_color,5%); +$sidebar_bg_color: lighten($bg_color, 2%); $tooltip_borders_color: transparentize(white, 0.9); @@ -48,6 +48,6 @@ $backdrop_insensitive_color: if($variant == 'light', darken($backdrop_bg_color, $backdrop_selected_fg_color: $selected_fg_color; $backdrop_borders_color: mix($borders_color, $bg_color, 90%); $backdrop_dark_fill: mix($backdrop_borders_color, $backdrop_bg_color, 35%); -$backdrop_sidebar_bg_color: lighten($backdrop_bg_color,5%); +$backdrop_sidebar_bg_color: lighten($backdrop_bg_color, 2%); $backdrop_scrollbar_bg_color: darken($backdrop_bg_color, 3%); diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss index 6494235e8b..5eec84eb23 100644 --- a/gtk/theme/Adwaita/_common.scss +++ b/gtk/theme/Adwaita/_common.scss @@ -2893,7 +2893,8 @@ GtkFileChooserDialog { .sidebar { border: none; - background-color: $sidebar_bg_color; + // Popover background color + background-color: mix($bg_color, $base_color, 50%); &:backdrop { background-color: $backdrop_sidebar_bg_color; @@ -2904,47 +2905,61 @@ GtkFileChooserDialog { } } -// Places sidebar is a special case, since the view here have to look like chrome not content, so we override text color -GtkPlacesSidebar.sidebar .view { - - color: $fg_color; - background-color: transparent; - - .separator, - .separator:backdrop { @extend .separator; } - - .image { // icons color - color: mix($fg_color, $sidebar_bg_color, 70%); - - &:selected { - color: mix($selected_fg_color, $selected_bg_color, 90%); - - &:backdrop { color: mix($backdrop_selected_fg_color, $selected_bg_color, 90%); } - } - - &:insensitive { color: mix($insensitive_fg_color, $sidebar_bg_color, 70%); } - - &:backdrop { - color: mix($backdrop_fg_color, $sidebar_bg_color, 70%); +$_placesidebar_icons_opacity: 0.7; +GtkSidebarRow { + // Needs overriding of the GtkListBoxRow padding + @at-root .list-row { + padding: 0px; + } + // Using margins/padding directly in the SidebarRow + // will make the animation of the new bookmark row jump + .sidebar-revealer { + padding: 4px 14px 4px 12px; + } + .sidebar-icon { + padding-right: 8px; + opacity: $_placesidebar_icons_opacity; // dim the device icons + } + .sidebar-label { + padding-right: 2px; + } +} - &:insensitive { color: mix($backdrop_insensitive_color, $sidebar_bg_color, 70%); } +GtkPlacesSidebar.sidebar { + .sidebar-placeholder-row { + border: solid 1px $selected_bg_color; + } + .sidebar-new-bookmark-row { + background-color: darken($sidebar_bg_color, 10%); + } + // Preserve everything else of the list-row class + @at-root .list-row.button { + // Popover menuitem color + &:hover { + background-color: mix($fg_color, $bg_color, 10%); } } + @at-root .sidebar-button.button { // @at-root needded to not change the specificity making button styling inheritance broken + // so istead of "GtkPlacesSidebar.sidebar .sidebar-button.button" [specificity 0,0,3,1] + // the extended selector ".sidebar-button.button" [specificity 0,0,2,0] - &:insensitive { color: $insensitive_fg_color; } - - &:backdrop { - color: $backdrop_fg_color; - - &:insensitive { color: $backdrop_insensitive_color; } - } + &.image-button { padding: 5px; } - &:selected { - @extend %selected_items; + @extend .button.flat; + border-radius: 100%; + outline-radius: 100%; +/* &:hover:not(:active):not(:backdrop) { + background-image: none; + background-color: gtkalpha(currentColor, 0.1); + border-color: transparentize($borders_color, 1); + box-shadow: inset 0 0 transparentize(white, 1); + icon-shadow: none; + } */ + &:not(:hover):not(:active) > GtkImage, + &:backdrop > GtkImage { opacity: $_placesidebar_icons_opacity }; } } - .sidebar-item { padding: 10px 4px; > .label { @@ -2957,7 +2972,6 @@ GtkPlacesSidebar.sidebar .view { } } - /********* * Paned * *********/ diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css index 22e36f7c06..f3a83fbfd0 100644 --- a/gtk/theme/Adwaita/gtk-contained-dark.css +++ b/gtk/theme/Adwaita/gtk-contained-dark.css @@ -77,16 +77,16 @@ border: 1px solid #215d9c; background-color: rgba(33, 93, 156, 0.2); } -.label.separator, GtkPlacesSidebar.sidebar .view .label.separator { +.label.separator { color: #eeeeec; } - .label.separator:backdrop, GtkPlacesSidebar.sidebar .view .label.separator:backdrop { + .label.separator:backdrop { color: #949796; } .label:insensitive { color: #949796; } .label:insensitive:backdrop { color: #5d6767; } -.dim-label, .label.separator, GtkPlacesSidebar.sidebar .view .label.separator, .titlebar .subtitle, +.dim-label, .label.separator, .titlebar .subtitle, .header-bar .subtitle { opacity: 0.55; text-shadow: none; } @@ -325,7 +325,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.81176); icon-shadow: 0 -1px rgba(0, 0, 0, 0.81176); box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(238, 238, 236, 0.1); } - .button.flat, .header-bar .titlebutton.button, + .button.flat, .sidebar-button.button, .header-bar .titlebutton.button, .titlebar .titlebutton.button { border-color: transparent; background-color: transparent; @@ -334,11 +334,11 @@ GtkTextView { text-shadow: none; icon-shadow: none; transition: none; } - .button.flat:hover, .header-bar .titlebutton.button:hover, + .button.flat:hover, .sidebar-button.button:hover, .header-bar .titlebutton.button:hover, .titlebar .titlebutton.button:hover { transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); transition-duration: 500ms; } - .button.flat:hover:active, .header-bar .titlebutton.button:hover:active, + .button.flat:hover:active, .sidebar-button.button:hover:active, .header-bar .titlebutton.button:hover:active, .titlebar .titlebutton.button:hover:active { transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); } .button:hover, .header-bar .button.titlebutton:hover, @@ -363,7 +363,7 @@ GtkTextView { box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px rgba(238, 238, 236, 0.1); transition-duration: 50ms; } .button:backdrop, .header-bar .button.titlebutton:backdrop, - .titlebar .button.titlebutton:backdrop, .button.flat:backdrop, .header-bar .titlebutton.button:backdrop, + .titlebar .button.titlebutton:backdrop, .button.flat:backdrop, .sidebar-button.button:backdrop, .header-bar .titlebutton.button:backdrop, .titlebar .titlebutton.button:backdrop { color: #949796; border-color: #1f2222; @@ -372,14 +372,14 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); -gtk-image-effect: none; } - .button:backdrop:active, .button:backdrop:checked, .button.flat:backdrop:active, .header-bar .titlebutton.button:backdrop:active, - .titlebar .titlebutton.button:backdrop:active, .button.flat:backdrop:checked, .header-bar .titlebutton.button:backdrop:checked, + .button:backdrop:active, .button:backdrop:checked, .button.flat:backdrop:active, .sidebar-button.button:backdrop:active, .header-bar .titlebutton.button:backdrop:active, + .titlebar .titlebutton.button:backdrop:active, .button.flat:backdrop:checked, .sidebar-button.button:backdrop:checked, .header-bar .titlebutton.button:backdrop:checked, .titlebar .titlebutton.button:backdrop:checked { color: #949796; border-color: #1f2222; background-image: linear-gradient(to bottom, #303535); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } - .button:backdrop:insensitive, .button.flat:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, + .button:backdrop:insensitive, .button.flat:backdrop:insensitive, .sidebar-button.button:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, .titlebar .titlebutton.button:backdrop:insensitive { color: #5d6767; border-color: #1f2222; @@ -388,11 +388,11 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } .button:backdrop:insensitive > .label, .header-bar .button.titlebutton:backdrop:insensitive > .label, - .titlebar .button.titlebutton:backdrop:insensitive > .label, .button.flat:backdrop:insensitive > .label, .header-bar .titlebutton.button:backdrop:insensitive > .label, + .titlebar .button.titlebutton:backdrop:insensitive > .label, .button.flat:backdrop:insensitive > .label, .sidebar-button.button:backdrop:insensitive > .label, .header-bar .titlebutton.button:backdrop:insensitive > .label, .titlebar .titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .button:backdrop:insensitive:active, .button:backdrop:insensitive:checked, .button.flat:backdrop:insensitive:active, .header-bar .titlebutton.button:backdrop:insensitive:active, - .titlebar .titlebutton.button:backdrop:insensitive:active, .button.flat:backdrop:insensitive:checked, .header-bar .titlebutton.button:backdrop:insensitive:checked, + .button:backdrop:insensitive:active, .button:backdrop:insensitive:checked, .button.flat:backdrop:insensitive:active, .sidebar-button.button:backdrop:insensitive:active, .header-bar .titlebutton.button:backdrop:insensitive:active, + .titlebar .titlebutton.button:backdrop:insensitive:active, .button.flat:backdrop:insensitive:checked, .sidebar-button.button:backdrop:insensitive:checked, .header-bar .titlebutton.button:backdrop:insensitive:checked, .titlebar .titlebutton.button:backdrop:insensitive:checked { color: #5d6767; border-color: #1f2222; @@ -400,13 +400,13 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } .button:backdrop:insensitive:active > .label, .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .titlebar .button.titlebutton:backdrop:insensitive:active > .label, .button:backdrop:insensitive:checked > .label, .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, - .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .button.flat:backdrop:insensitive:active > .label, .header-bar .titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .titlebutton.button:backdrop:insensitive:active > .label, .button.flat:backdrop:insensitive:checked > .label, .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .button.flat:backdrop:insensitive:active > .label, .sidebar-button.button:backdrop:insensitive:active > .label, .header-bar .titlebutton.button:backdrop:insensitive:active > .label, + .titlebar .titlebutton.button:backdrop:insensitive:active > .label, .button.flat:backdrop:insensitive:checked > .label, .sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .button.flat:backdrop, .header-bar .titlebutton.button:backdrop, - .titlebar .titlebutton.button:backdrop, .button.flat:insensitive, .header-bar .titlebutton.button:insensitive, - .titlebar .titlebutton.button:insensitive, .button.flat:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, + .button.flat:backdrop, .sidebar-button.button:backdrop, .header-bar .titlebutton.button:backdrop, + .titlebar .titlebutton.button:backdrop, .button.flat:insensitive, .sidebar-button.button:insensitive, .header-bar .titlebutton.button:insensitive, + .titlebar .titlebutton.button:insensitive, .button.flat:backdrop:insensitive, .sidebar-button.button:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, .titlebar .titlebutton.button:backdrop:insensitive { border-color: transparent; background-color: transparent; @@ -553,7 +553,7 @@ GtkTextView { box-shadow: none; text-shadow: none; icon-shadow: none; } - .osd .button.flat, .osd .header-bar .titlebutton.button, .header-bar .osd .titlebutton.button, + .osd .button.flat, .osd .sidebar-button.button, .osd .header-bar .titlebutton.button, .header-bar .osd .titlebutton.button, .osd .titlebar .titlebutton.button, .titlebar .osd .titlebutton.button { border-color: transparent; @@ -565,7 +565,7 @@ GtkTextView { box-shadow: none; text-shadow: 0 1px black; icon-shadow: 0 1px black; } - .osd .button.flat:hover, .osd .header-bar .titlebutton.button:hover, .header-bar .osd .titlebutton.button:hover, + .osd .button.flat:hover, .osd .sidebar-button.button:hover, .osd .header-bar .titlebutton.button:hover, .header-bar .osd .titlebutton.button:hover, .osd .titlebar .titlebutton.button:hover, .titlebar .osd .titlebutton.button:hover { color: white; @@ -579,7 +579,7 @@ GtkTextView { background-clip: padding-box; border-color: transparent; box-shadow: none; } - .osd .button.flat:insensitive, .osd .header-bar .titlebutton.button:insensitive, .header-bar .osd .titlebutton.button:insensitive, + .osd .button.flat:insensitive, .osd .sidebar-button.button:insensitive, .osd .header-bar .titlebutton.button:insensitive, .header-bar .osd .titlebutton.button:insensitive, .osd .titlebar .titlebutton.button:insensitive, .titlebar .osd .titlebutton.button:insensitive { color: #878a89; @@ -592,7 +592,7 @@ GtkTextView { background-image: none; border-color: transparent; box-shadow: none; } - .osd .button.flat:backdrop, .osd .header-bar .titlebutton.button:backdrop, .header-bar .osd .titlebutton.button:backdrop, + .osd .button.flat:backdrop, .osd .sidebar-button.button:backdrop, .osd .header-bar .titlebutton.button:backdrop, .header-bar .osd .titlebutton.button:backdrop, .osd .titlebar .titlebutton.button:backdrop, .titlebar .osd .titlebutton.button:backdrop { border-color: transparent; @@ -601,9 +601,9 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); text-shadow: none; icon-shadow: none; } - .osd .button.flat:active, .osd .header-bar .titlebutton.button:active, .header-bar .osd .titlebutton.button:active, + .osd .button.flat:active, .osd .sidebar-button.button:active, .osd .header-bar .titlebutton.button:active, .header-bar .osd .titlebutton.button:active, .osd .titlebar .titlebutton.button:active, - .titlebar .osd .titlebutton.button:active, .osd .button.flat:checked, .osd .header-bar .titlebutton.button:checked, .header-bar .osd .titlebutton.button:checked, + .titlebar .osd .titlebutton.button:active, .osd .button.flat:checked, .osd .sidebar-button.button:checked, .osd .header-bar .titlebutton.button:checked, .header-bar .osd .titlebutton.button:checked, .osd .titlebar .titlebutton.button:checked, .titlebar .osd .titlebutton.button:checked { color: white; @@ -626,7 +626,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.70353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.70353); box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(238, 238, 236, 0.1); } - .button.suggested-action.flat, .header-bar .suggested-action.titlebutton.button, + .button.suggested-action.flat, .suggested-action.sidebar-button.button, .header-bar .suggested-action.titlebutton.button, .titlebar .suggested-action.titlebutton.button { border-color: transparent; background-color: transparent; @@ -651,7 +651,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.78353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.78353); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px rgba(238, 238, 236, 0.1); } - .button.suggested-action:backdrop, .button.suggested-action.flat:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, + .button.suggested-action:backdrop, .button.suggested-action.flat:backdrop, .suggested-action.sidebar-button.button:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, .titlebar .suggested-action.titlebutton.button:backdrop { color: #d3dfeb; border-color: #0b1e33; @@ -659,14 +659,14 @@ GtkTextView { text-shadow: none; icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } - .button.suggested-action:backdrop:active, .button.suggested-action:backdrop:checked, .button.suggested-action.flat:backdrop:active, .header-bar .suggested-action.titlebutton.button:backdrop:active, - .titlebar .suggested-action.titlebutton.button:backdrop:active, .button.suggested-action.flat:backdrop:checked, .header-bar .suggested-action.titlebutton.button:backdrop:checked, + .button.suggested-action:backdrop:active, .button.suggested-action:backdrop:checked, .button.suggested-action.flat:backdrop:active, .suggested-action.sidebar-button.button:backdrop:active, .header-bar .suggested-action.titlebutton.button:backdrop:active, + .titlebar .suggested-action.titlebutton.button:backdrop:active, .button.suggested-action.flat:backdrop:checked, .suggested-action.sidebar-button.button:backdrop:checked, .header-bar .suggested-action.titlebutton.button:backdrop:checked, .titlebar .suggested-action.titlebutton.button:backdrop:checked { color: #d1dae3; border-color: #0b1e33; background-image: linear-gradient(to bottom, #184472); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } - .button.suggested-action:backdrop:insensitive, .button.suggested-action.flat:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, + .button.suggested-action:backdrop:insensitive, .button.suggested-action.flat:backdrop:insensitive, .suggested-action.sidebar-button.button:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive { color: #5d6767; border-color: #1f2222; @@ -675,11 +675,11 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } .button.suggested-action:backdrop:insensitive > .label, .header-bar .suggested-action.button.titlebutton:backdrop:insensitive > .label, - .titlebar .suggested-action.button.titlebutton:backdrop:insensitive > .label, .button.suggested-action.flat:backdrop:insensitive > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive > .label, + .titlebar .suggested-action.button.titlebutton:backdrop:insensitive > .label, .button.suggested-action.flat:backdrop:insensitive > .label, .suggested-action.sidebar-button.button:backdrop:insensitive > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive > .label, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .button.suggested-action:backdrop:insensitive:active, .button.suggested-action:backdrop:insensitive:checked, .button.suggested-action.flat:backdrop:insensitive:active, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active, - .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active, .button.suggested-action.flat:backdrop:insensitive:checked, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked, + .button.suggested-action:backdrop:insensitive:active, .button.suggested-action:backdrop:insensitive:checked, .button.suggested-action.flat:backdrop:insensitive:active, .suggested-action.sidebar-button.button:backdrop:insensitive:active, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active, + .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active, .button.suggested-action.flat:backdrop:insensitive:checked, .suggested-action.sidebar-button.button:backdrop:insensitive:checked, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:checked { color: #6c88a7; border-color: #0b1e33; @@ -687,13 +687,13 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } .button.suggested-action:backdrop:insensitive:active > .label, .header-bar .suggested-action.button.titlebutton:backdrop:insensitive:active > .label, .titlebar .suggested-action.button.titlebutton:backdrop:insensitive:active > .label, .button.suggested-action:backdrop:insensitive:checked > .label, .header-bar .suggested-action.button.titlebutton:backdrop:insensitive:checked > .label, - .titlebar .suggested-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.suggested-action.flat:backdrop:insensitive:active > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, .button.suggested-action.flat:backdrop:insensitive:checked > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .suggested-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.suggested-action.flat:backdrop:insensitive:active > .label, .suggested-action.sidebar-button.button:backdrop:insensitive:active > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, + .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, .button.suggested-action.flat:backdrop:insensitive:checked > .label, .suggested-action.sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .button.suggested-action.flat:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, - .titlebar .suggested-action.titlebutton.button:backdrop, .button.suggested-action.flat:insensitive, .header-bar .suggested-action.titlebutton.button:insensitive, - .titlebar .suggested-action.titlebutton.button:insensitive, .button.suggested-action.flat:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, + .button.suggested-action.flat:backdrop, .suggested-action.sidebar-button.button:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, + .titlebar .suggested-action.titlebutton.button:backdrop, .button.suggested-action.flat:insensitive, .suggested-action.sidebar-button.button:insensitive, .header-bar .suggested-action.titlebutton.button:insensitive, + .titlebar .suggested-action.titlebutton.button:insensitive, .button.suggested-action.flat:backdrop:insensitive, .suggested-action.sidebar-button.button:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive { border-color: transparent; background-color: transparent; @@ -773,7 +773,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.64078); icon-shadow: 0 -1px rgba(0, 0, 0, 0.64078); box-shadow: inset 0 1px rgba(255, 255, 255, 0.3), 0 1px rgba(238, 238, 236, 0.1); } - .button.destructive-action.flat, .header-bar .destructive-action.titlebutton.button, + .button.destructive-action.flat, .destructive-action.sidebar-button.button, .header-bar .destructive-action.titlebutton.button, .titlebar .destructive-action.titlebutton.button { border-color: transparent; background-color: transparent; @@ -798,7 +798,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.72078); icon-shadow: 0 -1px rgba(0, 0, 0, 0.72078); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px rgba(238, 238, 236, 0.1); } - .button.destructive-action:backdrop, .button.destructive-action.flat:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, + .button.destructive-action:backdrop, .button.destructive-action.flat:backdrop, .destructive-action.sidebar-button.button:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, .titlebar .destructive-action.titlebutton.button:backdrop { color: #f7cfcf; border-color: #5e0707; @@ -806,14 +806,14 @@ GtkTextView { text-shadow: none; icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } - .button.destructive-action:backdrop:active, .button.destructive-action:backdrop:checked, .button.destructive-action.flat:backdrop:active, .header-bar .destructive-action.titlebutton.button:backdrop:active, - .titlebar .destructive-action.titlebutton.button:backdrop:active, .button.destructive-action.flat:backdrop:checked, .header-bar .destructive-action.titlebutton.button:backdrop:checked, + .button.destructive-action:backdrop:active, .button.destructive-action:backdrop:checked, .button.destructive-action.flat:backdrop:active, .destructive-action.sidebar-button.button:backdrop:active, .header-bar .destructive-action.titlebutton.button:backdrop:active, + .titlebar .destructive-action.titlebutton.button:backdrop:active, .button.destructive-action.flat:backdrop:checked, .destructive-action.sidebar-button.button:backdrop:checked, .header-bar .destructive-action.titlebutton.button:backdrop:checked, .titlebar .destructive-action.titlebutton.button:backdrop:checked { color: #edcece; border-color: #5e0707; background-image: linear-gradient(to bottom, #a60c0c); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } - .button.destructive-action:backdrop:insensitive, .button.destructive-action.flat:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, + .button.destructive-action:backdrop:insensitive, .button.destructive-action.flat:backdrop:insensitive, .destructive-action.sidebar-button.button:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive { color: #5d6767; border-color: #1f2222; @@ -822,11 +822,11 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } .button.destructive-action:backdrop:insensitive > .label, .header-bar .destructive-action.button.titlebutton:backdrop:insensitive > .label, - .titlebar .destructive-action.button.titlebutton:backdrop:insensitive > .label, .button.destructive-action.flat:backdrop:insensitive > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive > .label, + .titlebar .destructive-action.button.titlebutton:backdrop:insensitive > .label, .button.destructive-action.flat:backdrop:insensitive > .label, .destructive-action.sidebar-button.button:backdrop:insensitive > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive > .label, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .button.destructive-action:backdrop:insensitive:active, .button.destructive-action:backdrop:insensitive:checked, .button.destructive-action.flat:backdrop:insensitive:active, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active, - .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active, .button.destructive-action.flat:backdrop:insensitive:checked, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked, + .button.destructive-action:backdrop:insensitive:active, .button.destructive-action:backdrop:insensitive:checked, .button.destructive-action.flat:backdrop:insensitive:active, .destructive-action.sidebar-button.button:backdrop:insensitive:active, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active, + .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active, .button.destructive-action.flat:backdrop:insensitive:checked, .destructive-action.sidebar-button.button:backdrop:insensitive:checked, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:checked { color: #c46565; border-color: #5e0707; @@ -834,13 +834,13 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(238, 238, 236, 0); } .button.destructive-action:backdrop:insensitive:active > .label, .header-bar .destructive-action.button.titlebutton:backdrop:insensitive:active > .label, .titlebar .destructive-action.button.titlebutton:backdrop:insensitive:active > .label, .button.destructive-action:backdrop:insensitive:checked > .label, .header-bar .destructive-action.button.titlebutton:backdrop:insensitive:checked > .label, - .titlebar .destructive-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.destructive-action.flat:backdrop:insensitive:active > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, .button.destructive-action.flat:backdrop:insensitive:checked > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .destructive-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.destructive-action.flat:backdrop:insensitive:active > .label, .destructive-action.sidebar-button.button:backdrop:insensitive:active > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, + .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, .button.destructive-action.flat:backdrop:insensitive:checked > .label, .destructive-action.sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .button.destructive-action.flat:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, - .titlebar .destructive-action.titlebutton.button:backdrop, .button.destructive-action.flat:insensitive, .header-bar .destructive-action.titlebutton.button:insensitive, - .titlebar .destructive-action.titlebutton.button:insensitive, .button.destructive-action.flat:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, + .button.destructive-action.flat:backdrop, .destructive-action.sidebar-button.button:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, + .titlebar .destructive-action.titlebutton.button:backdrop, .button.destructive-action.flat:insensitive, .destructive-action.sidebar-button.button:insensitive, .header-bar .destructive-action.titlebutton.button:insensitive, + .titlebar .destructive-action.titlebutton.button:insensitive, .button.destructive-action.flat:backdrop:insensitive, .destructive-action.sidebar-button.button:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive { border-color: transparent; background-color: transparent; @@ -1052,13 +1052,17 @@ GtkTextView { .inline-toolbar GtkToolButton > .button:backdrop:insensitive:active > .label, .inline-toolbar GtkToolButton > .button:backdrop:insensitive:checked > .label { color: inherit; } -.inline-toolbar.toolbar GtkToolButton > .button.flat, .inline-toolbar GtkToolButton > .button.flat, .inline-toolbar.search-bar GtkToolButton > .button.flat, .inline-toolbar.location-bar GtkToolButton > .button.flat, .inline-toolbar .header-bar GtkToolButton > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton > .button.titlebutton, +.inline-toolbar.toolbar GtkToolButton > .button.flat, .inline-toolbar GtkToolButton > .button.flat, .inline-toolbar.search-bar GtkToolButton > .button.flat, .inline-toolbar.location-bar GtkToolButton > .button.flat, .inline-toolbar.toolbar GtkToolButton > .sidebar-button.button, .inline-toolbar GtkToolButton > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop > .button.flat, .inline-toolbar GtkToolButton:backdrop > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop > .button.titlebutton, @@ -1072,13 +1076,17 @@ GtkTextView { border-right-style: none; } .linked > .entry:first-child, .osd .button:first-child:hover, .osd .button:first-child:active, .osd .button:first-child:checked, .osd .button:first-child:insensitive, .osd .button:first-child:backdrop, .osd .button.suggested-action:first-child, .osd .button.destructive-action:first-child, .inline-toolbar .button:first-child, .linked > .button:first-child, .header-bar .linked > .button.titlebutton:first-child, -.titlebar .linked > .button.titlebutton:first-child, .inline-toolbar.toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:first-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:first-child > .button.flat, .inline-toolbar .header-bar GtkToolButton:first-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:first-child > .button.titlebutton, +.titlebar .linked > .button.titlebutton:first-child, .inline-toolbar.toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:first-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:first-child > .button.flat, .inline-toolbar.toolbar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:first-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:first-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:first-child > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton:first-child > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop:first-child > .button.flat, .inline-toolbar GtkToolButton:backdrop:first-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop:first-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop:first-child > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop:first-child > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop:first-child > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop:first-child > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop:first-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop:first-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop:first-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop:first-child > .button.titlebutton, @@ -1087,13 +1095,17 @@ GtkTextView { border-top-left-radius: 3px; border-bottom-left-radius: 3px; } .linked > .entry:last-child, .osd .button:last-child:hover, .osd .button:last-child:active, .osd .button:last-child:checked, .osd .button:last-child:insensitive, .osd .button:last-child:backdrop, .osd .button.suggested-action:last-child, .osd .button.destructive-action:last-child, .inline-toolbar .button:last-child, .linked > .button:last-child, .header-bar .linked > .button.titlebutton:last-child, -.titlebar .linked > .button.titlebutton:last-child, .inline-toolbar.toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:last-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:last-child > .button.flat, .inline-toolbar .header-bar GtkToolButton:last-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:last-child > .button.titlebutton, +.titlebar .linked > .button.titlebutton:last-child, .inline-toolbar.toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:last-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:last-child > .button.flat, .inline-toolbar.toolbar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:last-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:last-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:last-child > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton:last-child > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop:last-child > .button.flat, .inline-toolbar GtkToolButton:backdrop:last-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop:last-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop:last-child > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop:last-child > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop:last-child > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop:last-child > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop:last-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop:last-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop:last-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop:last-child > .button.titlebutton, @@ -1103,13 +1115,17 @@ GtkTextView { border-bottom-right-radius: 3px; border-right-style: solid; } .linked > .entry:only-child, .osd .button:only-child:hover, .osd .button:only-child:active, .osd .button:only-child:checked, .osd .button:only-child:insensitive, .osd .button:only-child:backdrop, .osd .button.suggested-action:only-child, .osd .button.destructive-action:only-child, .inline-toolbar .button:only-child, .linked > .button:only-child, .header-bar .linked > .button.titlebutton:only-child, -.titlebar .linked > .button.titlebutton:only-child, .inline-toolbar.toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:only-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:only-child > .button.flat, .inline-toolbar .header-bar GtkToolButton:only-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:only-child > .button.titlebutton, +.titlebar .linked > .button.titlebutton:only-child, .inline-toolbar.toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:only-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:only-child > .button.flat, .inline-toolbar.toolbar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:only-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:only-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:only-child > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton:only-child > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop:only-child > .button.flat, .inline-toolbar GtkToolButton:backdrop:only-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop:only-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop:only-child > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop:only-child > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop:only-child > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop:only-child > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop:only-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop:only-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop:only-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop:only-child > .button.titlebutton, @@ -1141,8 +1157,9 @@ GtkTextView { border-radius: 3px; border-style: solid; } -.menuitem.button.flat, .header-bar .menuitem.titlebutton.button, -.titlebar .menuitem.titlebutton.button, .menuitem.button.flat:backdrop, .menuitem.button.flat:backdrop:hover, .header-bar .menuitem.titlebutton.button:backdrop:hover, +.menuitem.button.flat, .menuitem.sidebar-button.button, .header-bar .menuitem.titlebutton.button, +.titlebar .menuitem.titlebutton.button, .menuitem.button.flat:backdrop, .menuitem.sidebar-button.button:backdrop, .header-bar .menuitem.titlebutton.button:backdrop, +.titlebar .menuitem.titlebutton.button:backdrop, .menuitem.button.flat:backdrop:hover, .menuitem.sidebar-button.button:backdrop:hover, .header-bar .menuitem.titlebutton.button:backdrop:hover, .titlebar .menuitem.titlebutton.button:backdrop:hover, .button:link, .header-bar .button.titlebutton:link, .titlebar .button.titlebutton:link, .button:visited, .header-bar .button.titlebutton:visited, .titlebar .button.titlebutton:visited, .button:link:hover, .button:link:active, .button:link:checked, .button:visited:hover, .button:visited:active, .button:visited:checked, .button:link:backdrop, .button:visited:backdrop, .menu.button, .header-bar .menu.button.titlebutton, @@ -1157,24 +1174,42 @@ GtkTextView { .list-row.button:backdrop:insensitive:active, .list-row.button:backdrop:insensitive:checked, .list-row.button:insensitive:active, -.list-row.button:insensitive:checked, .app-notification .button.flat, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, +.list-row.button:insensitive:checked, .app-notification .button.flat, .app-notification .sidebar-button.button, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, .app-notification .titlebar .titlebutton.button, .titlebar .app-notification .titlebutton.button, -.app-notification.frame .button.flat, .app-notification .button.flat:backdrop, .app-notification .button.flat:insensitive, .app-notification .button.flat:backdrop:insensitive, .app-notification .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .app-notification .titlebutton.button:backdrop:insensitive, +.app-notification.frame .button.flat, +.app-notification.frame .sidebar-button.button, +.app-notification.frame .header-bar .button.titlebutton, +.header-bar .app-notification.frame .button.titlebutton, +.app-notification.frame .titlebar .button.titlebutton, +.titlebar .app-notification.frame .button.titlebutton, .app-notification .button.flat:backdrop, .app-notification .sidebar-button.button:backdrop, .app-notification .header-bar .titlebutton.button:backdrop, .header-bar .app-notification .titlebutton.button:backdrop, +.app-notification .titlebar .titlebutton.button:backdrop, +.titlebar .app-notification .titlebutton.button:backdrop, .app-notification .button.flat:insensitive, .app-notification .sidebar-button.button:insensitive, .app-notification .header-bar .titlebutton.button:insensitive, .header-bar .app-notification .titlebutton.button:insensitive, +.app-notification .titlebar .titlebutton.button:insensitive, +.titlebar .app-notification .titlebutton.button:insensitive, .app-notification .button.flat:backdrop:insensitive, .app-notification .sidebar-button.button:backdrop:insensitive, .app-notification .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .app-notification .titlebutton.button:backdrop:insensitive, .app-notification .titlebar .titlebutton.button:backdrop:insensitive, .titlebar .app-notification .titlebutton.button:backdrop:insensitive, .app-notification.frame .button.flat:backdrop, +.app-notification.frame .sidebar-button.button:backdrop, .app-notification.frame .header-bar .button.titlebutton:backdrop, .header-bar .app-notification.frame .button.titlebutton:backdrop, .app-notification.frame .titlebar .button.titlebutton:backdrop, .titlebar .app-notification.frame .button.titlebutton:backdrop, .app-notification.frame .button.flat:insensitive, +.app-notification.frame .sidebar-button.button:insensitive, .app-notification.frame .header-bar .button.titlebutton:insensitive, .header-bar .app-notification.frame .button.titlebutton:insensitive, .app-notification.frame .titlebar .button.titlebutton:insensitive, .titlebar .app-notification.frame .button.titlebutton:insensitive, -.app-notification.frame .button.flat:backdrop:insensitive, GtkCalendar.button, .header-bar GtkCalendar.button.titlebutton, -.titlebar GtkCalendar.button.titlebutton, GtkCalendar.button:hover, GtkCalendar.button:backdrop, .scale-popup .button:hover, .scale-popup .button:backdrop, .scale-popup .button:backdrop:hover, .scale-popup .button:backdrop:insensitive { +.app-notification.frame .button.flat:backdrop:insensitive, +.app-notification.frame .sidebar-button.button:backdrop:insensitive, +.app-notification.frame .header-bar .button.titlebutton:backdrop:insensitive, +.header-bar .app-notification.frame .button.titlebutton:backdrop:insensitive, +.app-notification.frame .titlebar .button.titlebutton:backdrop:insensitive, +.titlebar .app-notification.frame .button.titlebutton:backdrop:insensitive, GtkCalendar.button, .header-bar GtkCalendar.button.titlebutton, +.titlebar GtkCalendar.button.titlebutton, GtkCalendar.button:hover, .header-bar GtkCalendar.button.titlebutton:hover, +.titlebar GtkCalendar.button.titlebutton:hover, GtkCalendar.button:backdrop, .header-bar GtkCalendar.button.titlebutton:backdrop, +.titlebar GtkCalendar.button.titlebutton:backdrop, .scale-popup .button:hover, .scale-popup .button:backdrop, .scale-popup .button:backdrop:hover, .scale-popup .button:backdrop:insensitive { border-color: transparent; background-color: transparent; background-image: none; @@ -1183,10 +1218,10 @@ GtkTextView { icon-shadow: none; } /* menu buttons */ -.menuitem.button.flat, .header-bar .menuitem.titlebutton.button, +.menuitem.button.flat, .menuitem.sidebar-button.button, .header-bar .menuitem.titlebutton.button, .titlebar .menuitem.titlebutton.button { outline-offset: -1px; } - .menuitem.button.flat:hover, .header-bar .menuitem.titlebutton.button:hover, + .menuitem.button.flat:hover, .menuitem.sidebar-button.button:hover, .header-bar .menuitem.titlebutton.button:hover, .titlebar .menuitem.titlebutton.button:hover { background-color: #4b5150; } @@ -1458,7 +1493,7 @@ GtkComboBox { color: #5d6767; } GtkComboBox .menuitem { text-shadow: none; } - GtkComboBox .separator.vertical, GtkComboBox GtkPlacesSidebar.sidebar .view .vertical.separator, GtkPlacesSidebar.sidebar .view GtkComboBox .vertical.separator { + GtkComboBox .separator.vertical { -GtkWidget-wide-separators: true; } GtkComboBox.combobox-entry .entry:dir(ltr) { border-top-right-radius: 0; @@ -1537,10 +1572,8 @@ GtkComboBox { padding-left: 12px; padding-right: 12px; } .titlebar .header-bar-separator, .titlebar > GtkBox > .separator.vertical, - GtkPlacesSidebar.sidebar .view .titlebar > GtkBox > .vertical.separator:backdrop, .header-bar .header-bar-separator, - .header-bar > GtkBox > .separator.vertical, - GtkPlacesSidebar.sidebar .view .header-bar > GtkBox > .vertical.separator:backdrop { + .header-bar > GtkBox > .separator.vertical { -GtkWidget-wide-separators: true; -GtkWidget-separator-width: 1px; border-width: 0 1px; @@ -1569,9 +1602,10 @@ GtkComboBox { text-shadow: 0 -1px rgba(0, 0, 0, 0.70353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.70353); box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(43, 100, 160, 0.55); } - .titlebar.selection-mode .button.flat, + .titlebar.selection-mode .button.flat, .titlebar.selection-mode .sidebar-button.button, .titlebar.selection-mode .titlebutton.button, .header-bar.selection-mode .button.flat, + .header-bar.selection-mode .sidebar-button.button, .header-bar.selection-mode .titlebutton.button { border-color: transparent; background-color: transparent; @@ -1598,10 +1632,11 @@ GtkComboBox { text-shadow: 0 -1px rgba(0, 0, 0, 0.78353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.78353); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px rgba(43, 100, 160, 0.55); } - .titlebar.selection-mode .button:backdrop, .titlebar.selection-mode .button.flat:backdrop, + .titlebar.selection-mode .button:backdrop, .titlebar.selection-mode .button.flat:backdrop, .titlebar.selection-mode .sidebar-button.button:backdrop, .titlebar.selection-mode .titlebutton.button:backdrop, .header-bar.selection-mode .button:backdrop, .header-bar.selection-mode .button.flat:backdrop, + .header-bar.selection-mode .sidebar-button.button:backdrop, .header-bar.selection-mode .titlebutton.button:backdrop { color: #d3dfeb; border-color: #0b1e33; @@ -1611,24 +1646,27 @@ GtkComboBox { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(43, 100, 160, 0); -gtk-image-effect: none; border-color: #0f2b48; } - .titlebar.selection-mode .button:backdrop:active, .titlebar.selection-mode .button:backdrop:checked, .titlebar.selection-mode .button.flat:backdrop:active, - .titlebar.selection-mode .titlebutton.button:backdrop:active, .titlebar.selection-mode .button.flat:backdrop:checked, + .titlebar.selection-mode .button:backdrop:active, .titlebar.selection-mode .button:backdrop:checked, .titlebar.selection-mode .button.flat:backdrop:active, .titlebar.selection-mode .sidebar-button.button:backdrop:active, + .titlebar.selection-mode .titlebutton.button:backdrop:active, .titlebar.selection-mode .button.flat:backdrop:checked, .titlebar.selection-mode .sidebar-button.button:backdrop:checked, .titlebar.selection-mode .titlebutton.button:backdrop:checked, .header-bar.selection-mode .button:backdrop:active, .header-bar.selection-mode .button:backdrop:checked, .header-bar.selection-mode .button.flat:backdrop:active, + .header-bar.selection-mode .sidebar-button.button:backdrop:active, .header-bar.selection-mode .titlebutton.button:backdrop:active, .header-bar.selection-mode .button.flat:backdrop:checked, + .header-bar.selection-mode .sidebar-button.button:backdrop:checked, .header-bar.selection-mode .titlebutton.button:backdrop:checked { color: #d1dae3; border-color: #0b1e33; background-image: linear-gradient(to bottom, #184472); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(43, 100, 160, 0); border-color: #0f2b48; } - .titlebar.selection-mode .button:backdrop:insensitive, .titlebar.selection-mode .button.flat:backdrop:insensitive, + .titlebar.selection-mode .button:backdrop:insensitive, .titlebar.selection-mode .button.flat:backdrop:insensitive, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive, .header-bar.selection-mode .button:backdrop:insensitive, .header-bar.selection-mode .button.flat:backdrop:insensitive, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive { color: #6f91b4; border-color: #0b1e33; @@ -1637,51 +1675,59 @@ GtkComboBox { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(43, 100, 160, 0); border-color: #0f2b48; } - .titlebar.selection-mode .button:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive > .label, + .titlebar.selection-mode .button:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive > .label, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive > .label, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive > .label, .header-bar.selection-mode .button:backdrop:insensitive > .label, .header-bar.selection-mode .titlebar .button.titlebutton:backdrop:insensitive > .label, .header-bar.selection-mode .button.flat:backdrop:insensitive > .label, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive > .label, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive > .label, .header-bar.selection-mode .titlebar .titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .titlebar.selection-mode .button:backdrop:insensitive:active, .titlebar.selection-mode .button:backdrop:insensitive:checked, .titlebar.selection-mode .button.flat:backdrop:insensitive:active, - .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked, + .titlebar.selection-mode .button:backdrop:insensitive:active, .titlebar.selection-mode .button:backdrop:insensitive:checked, .titlebar.selection-mode .button.flat:backdrop:insensitive:active, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:active, + .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:checked, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:checked, .header-bar.selection-mode .button:backdrop:insensitive:active, .header-bar.selection-mode .button:backdrop:insensitive:checked, .header-bar.selection-mode .button.flat:backdrop:insensitive:active, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:active, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:active, .header-bar.selection-mode .button.flat:backdrop:insensitive:checked, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:checked, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:checked { color: #6c88a7; border-color: #0b1e33; background-image: linear-gradient(to bottom, #1d4877); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(43, 100, 160, 0); border-color: #0f2b48; } - .titlebar.selection-mode .button:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .titlebar.selection-mode .button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:active > .label, - .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar.selection-mode .button:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .titlebar.selection-mode .button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:active > .label, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:active > .label, + .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked > .label, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .button:backdrop:insensitive:active > .label, .header-bar.selection-mode .titlebar .button.titlebutton:backdrop:insensitive:active > .label, .header-bar.selection-mode .button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .header-bar.selection-mode .button.flat:backdrop:insensitive:active > .label, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:active > .label, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:active > .label, .header-bar.selection-mode .titlebar .titlebutton.button:backdrop:insensitive:active > .label, .header-bar.selection-mode .button.flat:backdrop:insensitive:checked > .label, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .titlebar .titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .titlebar.selection-mode .button.flat:backdrop, - .titlebar.selection-mode .titlebutton.button:backdrop, .titlebar.selection-mode .button.flat:insensitive, - .titlebar.selection-mode .titlebutton.button:insensitive, .titlebar.selection-mode .button.flat:insensitive:backdrop, + .titlebar.selection-mode .button.flat:backdrop, .titlebar.selection-mode .sidebar-button.button:backdrop, + .titlebar.selection-mode .titlebutton.button:backdrop, .titlebar.selection-mode .button.flat:insensitive, .titlebar.selection-mode .sidebar-button.button:insensitive, + .titlebar.selection-mode .titlebutton.button:insensitive, .titlebar.selection-mode .button.flat:insensitive:backdrop, .titlebar.selection-mode .sidebar-button.button:insensitive:backdrop, .titlebar.selection-mode .titlebutton.button:insensitive:backdrop, .header-bar.selection-mode .button.flat:backdrop, + .header-bar.selection-mode .sidebar-button.button:backdrop, .header-bar.selection-mode .titlebutton.button:backdrop, .header-bar.selection-mode .button.flat:insensitive, + .header-bar.selection-mode .sidebar-button.button:insensitive, .header-bar.selection-mode .titlebutton.button:insensitive, .header-bar.selection-mode .button.flat:insensitive:backdrop, + .header-bar.selection-mode .sidebar-button.button:insensitive:backdrop, .header-bar.selection-mode .titlebutton.button:insensitive:backdrop { border-color: transparent; background-color: transparent; @@ -2042,10 +2088,11 @@ column-header .titlebar .button.titlebutton, .popover > .location-bar, .popover.osd > .toolbar, .popover.osd > .inline-toolbar, .popover.osd > .search-bar, .popover.osd > .location-bar { border-style: none; background-color: transparent; } - .popover .button.flat, .popover .header-bar .titlebutton.button, .header-bar .popover .titlebutton.button, + .popover .button.flat, .popover .sidebar-button.button, .popover .header-bar .titlebutton.button, .header-bar .popover .titlebutton.button, .popover .titlebar .titlebutton.button, .titlebar .popover .titlebutton.button, .popover .button.flat:hover, + .popover .sidebar-button.button:hover, .popover .header-bar .titlebutton.button:hover, .header-bar .popover .titlebutton.button:hover, .popover .titlebar .titlebutton.button:hover, @@ -2563,126 +2610,126 @@ GtkSwitch { .check { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-dark.png"), url("assets/checkbox-unchecked-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check.button.flat, .header-bar .check.titlebutton.button, + .check.button.flat, .check.sidebar-button.button, .header-bar .check.titlebutton.button, .titlebar .check.titlebutton.button { icon-shadow: none; } .check:hover { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-hover-dark.png"), url("assets/checkbox-unchecked-hover-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:hover.button.flat, .header-bar .check.titlebutton.button:hover, + .check:hover.button.flat, .check.sidebar-button.button:hover, .header-bar .check.titlebutton.button:hover, .titlebar .check.titlebutton.button:hover { icon-shadow: none; } .check:active { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-active-dark.png"), url("assets/checkbox-unchecked-active-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:active.button.flat, .header-bar .check.titlebutton.button:active, + .check:active.button.flat, .check.sidebar-button.button:active, .header-bar .check.titlebutton.button:active, .titlebar .check.titlebutton.button:active { icon-shadow: none; } .check:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-insensitive-dark.png"), url("assets/checkbox-unchecked-insensitive-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:insensitive.button.flat, .header-bar .check.titlebutton.button:insensitive, + .check:insensitive.button.flat, .check.sidebar-button.button:insensitive, .header-bar .check.titlebutton.button:insensitive, .titlebar .check.titlebutton.button:insensitive { icon-shadow: none; } .check:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-backdrop-dark.png"), url("assets/checkbox-unchecked-backdrop-dark@2.png")); icon-shadow: none; } - .check:backdrop.button.flat, .header-bar .check.titlebutton.button:backdrop, + .check:backdrop.button.flat, .check.sidebar-button.button:backdrop, .header-bar .check.titlebutton.button:backdrop, .titlebar .check.titlebutton.button:backdrop { icon-shadow: none; } .check:backdrop:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-backdrop-insensitive-dark.png"), url("assets/checkbox-unchecked-backdrop-insensitive-dark@2.png")); icon-shadow: none; } - .check:backdrop:insensitive.button.flat, .header-bar .check.titlebutton.button:backdrop:insensitive, + .check:backdrop:insensitive.button.flat, .check.sidebar-button.button:backdrop:insensitive, .header-bar .check.titlebutton.button:backdrop:insensitive, .titlebar .check.titlebutton.button:backdrop:insensitive { icon-shadow: none; } .check:inconsistent { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-dark.png"), url("assets/checkbox-mixed-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:inconsistent.button.flat, .header-bar .check.titlebutton.button:inconsistent, + .check:inconsistent.button.flat, .check.sidebar-button.button:inconsistent, .header-bar .check.titlebutton.button:inconsistent, .titlebar .check.titlebutton.button:inconsistent { icon-shadow: none; } .check:inconsistent:hover { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-hover-dark.png"), url("assets/checkbox-mixed-hover-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:inconsistent:hover.button.flat, .header-bar .check.titlebutton.button:inconsistent:hover, + .check:inconsistent:hover.button.flat, .check.sidebar-button.button:inconsistent:hover, .header-bar .check.titlebutton.button:inconsistent:hover, .titlebar .check.titlebutton.button:inconsistent:hover { icon-shadow: none; } .check:inconsistent:selected { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-active-dark.png"), url("assets/checkbox-mixed-active-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:inconsistent:selected.button.flat, .header-bar .check.titlebutton.button:inconsistent:selected, + .check:inconsistent:selected.button.flat, .check.sidebar-button.button:inconsistent:selected, .header-bar .check.titlebutton.button:inconsistent:selected, .titlebar .check.titlebutton.button:inconsistent:selected { icon-shadow: none; } .check:inconsistent:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-backdrop-dark.png"), url("assets/checkbox-mixed-backdrop-dark@2.png")); icon-shadow: none; } - .check:inconsistent:backdrop.button.flat, .header-bar .check.titlebutton.button:inconsistent:backdrop, + .check:inconsistent:backdrop.button.flat, .check.sidebar-button.button:inconsistent:backdrop, .header-bar .check.titlebutton.button:inconsistent:backdrop, .titlebar .check.titlebutton.button:inconsistent:backdrop { icon-shadow: none; } .check:inconsistent:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-insensitive-dark.png"), url("assets/checkbox-mixed-insensitive-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:inconsistent:insensitive.button.flat, .header-bar .check.titlebutton.button:inconsistent:insensitive, + .check:inconsistent:insensitive.button.flat, .check.sidebar-button.button:inconsistent:insensitive, .header-bar .check.titlebutton.button:inconsistent:insensitive, .titlebar .check.titlebutton.button:inconsistent:insensitive { icon-shadow: none; } .check:inconsistent:insensitive:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-backdrop-insensitive-dark.png"), url("assets/checkbox-mixed-backdrop-insensitive-dark@2.png")); icon-shadow: none; } - .check:inconsistent:insensitive:backdrop.button.flat, .header-bar .check.titlebutton.button:inconsistent:insensitive:backdrop, + .check:inconsistent:insensitive:backdrop.button.flat, .check.sidebar-button.button:inconsistent:insensitive:backdrop, .header-bar .check.titlebutton.button:inconsistent:insensitive:backdrop, .titlebar .check.titlebutton.button:inconsistent:insensitive:backdrop { icon-shadow: none; } .check:checked { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-dark.png"), url("assets/checkbox-checked-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:checked.button.flat, .header-bar .check.titlebutton.button:checked, + .check:checked.button.flat, .check.sidebar-button.button:checked, .header-bar .check.titlebutton.button:checked, .titlebar .check.titlebutton.button:checked { icon-shadow: none; } .check:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-insensitive-dark.png"), url("assets/checkbox-checked-insensitive-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:checked:insensitive.button.flat, .header-bar .check.titlebutton.button:checked:insensitive, + .check:checked:insensitive.button.flat, .check.sidebar-button.button:checked:insensitive, .header-bar .check.titlebutton.button:checked:insensitive, .titlebar .check.titlebutton.button:checked:insensitive { icon-shadow: none; } .check:checked:hover { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-hover-dark.png"), url("assets/checkbox-checked-hover-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:checked:hover.button.flat, .header-bar .check.titlebutton.button:checked:hover, + .check:checked:hover.button.flat, .check.sidebar-button.button:checked:hover, .header-bar .check.titlebutton.button:checked:hover, .titlebar .check.titlebutton.button:checked:hover { icon-shadow: none; } .check:checked:active { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-active-dark.png"), url("assets/checkbox-checked-active-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .check:checked:active.button.flat, .header-bar .check.titlebutton.button:checked:active, + .check:checked:active.button.flat, .check.sidebar-button.button:checked:active, .header-bar .check.titlebutton.button:checked:active, .titlebar .check.titlebutton.button:checked:active { icon-shadow: none; } .check:backdrop:checked { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-backdrop-dark.png"), url("assets/checkbox-checked-backdrop-dark@2.png")); icon-shadow: none; } - .check:backdrop:checked.button.flat, .header-bar .check.titlebutton.button:backdrop:checked, + .check:backdrop:checked.button.flat, .check.sidebar-button.button:backdrop:checked, .header-bar .check.titlebutton.button:backdrop:checked, .titlebar .check.titlebutton.button:backdrop:checked { icon-shadow: none; } .check:backdrop:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-backdrop-insensitive-dark.png"), url("assets/checkbox-checked-backdrop-insensitive-dark@2.png")); icon-shadow: none; } - .check:backdrop:checked:insensitive.button.flat, .header-bar .check.titlebutton.button:backdrop:checked:insensitive, + .check:backdrop:checked:insensitive.button.flat, .check.sidebar-button.button:backdrop:checked:insensitive, .header-bar .check.titlebutton.button:backdrop:checked:insensitive, .titlebar .check.titlebutton.button:backdrop:checked:insensitive { icon-shadow: none; } @@ -2702,126 +2749,126 @@ GtkSwitch { .radio { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-dark.png"), url("assets/radio-unchecked-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio.button.flat, .header-bar .radio.titlebutton.button, + .radio.button.flat, .radio.sidebar-button.button, .header-bar .radio.titlebutton.button, .titlebar .radio.titlebutton.button { icon-shadow: none; } .radio:hover { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-hover-dark.png"), url("assets/radio-unchecked-hover-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:hover.button.flat, .header-bar .radio.titlebutton.button:hover, + .radio:hover.button.flat, .radio.sidebar-button.button:hover, .header-bar .radio.titlebutton.button:hover, .titlebar .radio.titlebutton.button:hover { icon-shadow: none; } .radio:active { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-active-dark.png"), url("assets/radio-unchecked-active-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:active.button.flat, .header-bar .radio.titlebutton.button:active, + .radio:active.button.flat, .radio.sidebar-button.button:active, .header-bar .radio.titlebutton.button:active, .titlebar .radio.titlebutton.button:active { icon-shadow: none; } .radio:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-insensitive-dark.png"), url("assets/radio-unchecked-insensitive-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:insensitive.button.flat, .header-bar .radio.titlebutton.button:insensitive, + .radio:insensitive.button.flat, .radio.sidebar-button.button:insensitive, .header-bar .radio.titlebutton.button:insensitive, .titlebar .radio.titlebutton.button:insensitive { icon-shadow: none; } .radio:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-backdrop-dark.png"), url("assets/radio-unchecked-backdrop-dark@2.png")); icon-shadow: none; } - .radio:backdrop.button.flat, .header-bar .radio.titlebutton.button:backdrop, + .radio:backdrop.button.flat, .radio.sidebar-button.button:backdrop, .header-bar .radio.titlebutton.button:backdrop, .titlebar .radio.titlebutton.button:backdrop { icon-shadow: none; } .radio:backdrop:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-backdrop-insensitive-dark.png"), url("assets/radio-unchecked-backdrop-insensitive-dark@2.png")); icon-shadow: none; } - .radio:backdrop:insensitive.button.flat, .header-bar .radio.titlebutton.button:backdrop:insensitive, + .radio:backdrop:insensitive.button.flat, .radio.sidebar-button.button:backdrop:insensitive, .header-bar .radio.titlebutton.button:backdrop:insensitive, .titlebar .radio.titlebutton.button:backdrop:insensitive { icon-shadow: none; } .radio:inconsistent { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-dark.png"), url("assets/radio-mixed-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:inconsistent.button.flat, .header-bar .radio.titlebutton.button:inconsistent, + .radio:inconsistent.button.flat, .radio.sidebar-button.button:inconsistent, .header-bar .radio.titlebutton.button:inconsistent, .titlebar .radio.titlebutton.button:inconsistent { icon-shadow: none; } .radio:inconsistent:hover { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-hover-dark.png"), url("assets/radio-mixed-hover-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:inconsistent:hover.button.flat, .header-bar .radio.titlebutton.button:inconsistent:hover, + .radio:inconsistent:hover.button.flat, .radio.sidebar-button.button:inconsistent:hover, .header-bar .radio.titlebutton.button:inconsistent:hover, .titlebar .radio.titlebutton.button:inconsistent:hover { icon-shadow: none; } .radio:inconsistent:selected { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-active-dark.png"), url("assets/radio-mixed-active-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:inconsistent:selected.button.flat, .header-bar .radio.titlebutton.button:inconsistent:selected, + .radio:inconsistent:selected.button.flat, .radio.sidebar-button.button:inconsistent:selected, .header-bar .radio.titlebutton.button:inconsistent:selected, .titlebar .radio.titlebutton.button:inconsistent:selected { icon-shadow: none; } .radio:inconsistent:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-backdrop-dark.png"), url("assets/radio-mixed-backdrop-dark@2.png")); icon-shadow: none; } - .radio:inconsistent:backdrop.button.flat, .header-bar .radio.titlebutton.button:inconsistent:backdrop, + .radio:inconsistent:backdrop.button.flat, .radio.sidebar-button.button:inconsistent:backdrop, .header-bar .radio.titlebutton.button:inconsistent:backdrop, .titlebar .radio.titlebutton.button:inconsistent:backdrop { icon-shadow: none; } .radio:inconsistent:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-insensitive-dark.png"), url("assets/radio-mixed-insensitive-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:inconsistent:insensitive.button.flat, .header-bar .radio.titlebutton.button:inconsistent:insensitive, + .radio:inconsistent:insensitive.button.flat, .radio.sidebar-button.button:inconsistent:insensitive, .header-bar .radio.titlebutton.button:inconsistent:insensitive, .titlebar .radio.titlebutton.button:inconsistent:insensitive { icon-shadow: none; } .radio:inconsistent:insensitive:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-backdrop-insensitive-dark.png"), url("assets/radio-mixed-backdrop-insensitive-dark@2.png")); icon-shadow: none; } - .radio:inconsistent:insensitive:backdrop.button.flat, .header-bar .radio.titlebutton.button:inconsistent:insensitive:backdrop, + .radio:inconsistent:insensitive:backdrop.button.flat, .radio.sidebar-button.button:inconsistent:insensitive:backdrop, .header-bar .radio.titlebutton.button:inconsistent:insensitive:backdrop, .titlebar .radio.titlebutton.button:inconsistent:insensitive:backdrop { icon-shadow: none; } .radio:checked { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-dark.png"), url("assets/radio-checked-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:checked.button.flat, .header-bar .radio.titlebutton.button:checked, + .radio:checked.button.flat, .radio.sidebar-button.button:checked, .header-bar .radio.titlebutton.button:checked, .titlebar .radio.titlebutton.button:checked { icon-shadow: none; } .radio:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-insensitive-dark.png"), url("assets/radio-checked-insensitive-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:checked:insensitive.button.flat, .header-bar .radio.titlebutton.button:checked:insensitive, + .radio:checked:insensitive.button.flat, .radio.sidebar-button.button:checked:insensitive, .header-bar .radio.titlebutton.button:checked:insensitive, .titlebar .radio.titlebutton.button:checked:insensitive { icon-shadow: none; } .radio:checked:hover { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-hover-dark.png"), url("assets/radio-checked-hover-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:checked:hover.button.flat, .header-bar .radio.titlebutton.button:checked:hover, + .radio:checked:hover.button.flat, .radio.sidebar-button.button:checked:hover, .header-bar .radio.titlebutton.button:checked:hover, .titlebar .radio.titlebutton.button:checked:hover { icon-shadow: none; } .radio:checked:active { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-active-dark.png"), url("assets/radio-checked-active-dark@2.png")); icon-shadow: 0 1px 0 rgba(238, 238, 236, 0.1); } - .radio:checked:active.button.flat, .header-bar .radio.titlebutton.button:checked:active, + .radio:checked:active.button.flat, .radio.sidebar-button.button:checked:active, .header-bar .radio.titlebutton.button:checked:active, .titlebar .radio.titlebutton.button:checked:active { icon-shadow: none; } .radio:backdrop:checked { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-backdrop-dark.png"), url("assets/radio-checked-backdrop-dark@2.png")); icon-shadow: none; } - .radio:backdrop:checked.button.flat, .header-bar .radio.titlebutton.button:backdrop:checked, + .radio:backdrop:checked.button.flat, .radio.sidebar-button.button:backdrop:checked, .header-bar .radio.titlebutton.button:backdrop:checked, .titlebar .radio.titlebutton.button:backdrop:checked { icon-shadow: none; } .radio:backdrop:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-backdrop-insensitive-dark.png"), url("assets/radio-checked-backdrop-insensitive-dark@2.png")); icon-shadow: none; } - .radio:backdrop:checked:insensitive.button.flat, .header-bar .radio.titlebutton.button:backdrop:checked:insensitive, + .radio:backdrop:checked:insensitive.button.flat, .radio.sidebar-button.button:backdrop:checked:insensitive, .header-bar .radio.titlebutton.button:backdrop:checked:insensitive, .titlebar .radio.titlebutton.button:backdrop:checked:insensitive { icon-shadow: none; } @@ -3464,10 +3511,9 @@ GtkProgressBar { GtkScrolledWindow GtkViewport.frame { border-style: none; } -.separator, GtkPlacesSidebar.sidebar .view .separator, -GtkPlacesSidebar.sidebar .view .separator:backdrop { +.separator { color: rgba(0, 0, 0, 0.1); } - GtkFileChooserButton .separator.vertical, GtkFileChooserButton GtkPlacesSidebar.sidebar .view .vertical.separator, GtkPlacesSidebar.sidebar .view GtkFileChooserButton .vertical.separator, GtkFontButton .separator.vertical, GtkFontButton GtkPlacesSidebar.sidebar .view .vertical.separator, GtkPlacesSidebar.sidebar .view GtkFontButton .vertical.separator { + GtkFileChooserButton .separator.vertical, GtkFontButton .separator.vertical { -GtkWidget-wide-separators: true; } /********* @@ -3520,7 +3566,7 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { text-shadow: 0 -1px rgba(0, 0, 0, 0.81176); icon-shadow: 0 -1px rgba(0, 0, 0, 0.81176); box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); } - .list-row:selected .button.flat, .list-row:selected .header-bar .titlebutton.button, .header-bar .list-row:selected .titlebutton.button, + .list-row:selected .button.flat, .list-row:selected .sidebar-button.button, .list-row:selected .header-bar .titlebutton.button, .header-bar .list-row:selected .titlebutton.button, .list-row:selected .titlebar .titlebutton.button, .titlebar .list-row:selected .titlebutton.button { border-color: transparent; @@ -3546,7 +3592,7 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { text-shadow: 0 -1px rgba(0, 0, 0, 0.89176); icon-shadow: 0 -1px rgba(0, 0, 0, 0.89176); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6); } - .list-row:selected .button:backdrop, .list-row:selected .button.flat:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, + .list-row:selected .button:backdrop, .list-row:selected .button.flat:backdrop, .list-row:selected .sidebar-button.button:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, .list-row:selected .titlebar .titlebutton.button:backdrop, .titlebar .list-row:selected .titlebutton.button:backdrop { color: #949796; @@ -3555,16 +3601,16 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { text-shadow: none; icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); } - .list-row:selected .button:backdrop:active, .list-row:selected .button:backdrop:checked, .list-row:selected .button.flat:backdrop:active, .list-row:selected .header-bar .titlebutton.button:backdrop:active, .header-bar .list-row:selected .titlebutton.button:backdrop:active, + .list-row:selected .button:backdrop:active, .list-row:selected .button:backdrop:checked, .list-row:selected .button.flat:backdrop:active, .list-row:selected .sidebar-button.button:backdrop:active, .list-row:selected .header-bar .titlebutton.button:backdrop:active, .header-bar .list-row:selected .titlebutton.button:backdrop:active, .list-row:selected .titlebar .titlebutton.button:backdrop:active, - .titlebar .list-row:selected .titlebutton.button:backdrop:active, .list-row:selected .button.flat:backdrop:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:checked, + .titlebar .list-row:selected .titlebutton.button:backdrop:active, .list-row:selected .button.flat:backdrop:checked, .list-row:selected .sidebar-button.button:backdrop:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:checked, .list-row:selected .titlebar .titlebutton.button:backdrop:checked, .titlebar .list-row:selected .titlebutton.button:backdrop:checked { color: #949796; border-color: #1f2222; background-image: linear-gradient(to bottom, #303535); box-shadow: inset 0 1px rgba(255, 255, 255, 0); } - .list-row:selected .button:backdrop:insensitive, .list-row:selected .button.flat:backdrop:insensitive, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive, + .list-row:selected .button:backdrop:insensitive, .list-row:selected .button.flat:backdrop:insensitive, .list-row:selected .sidebar-button.button:backdrop:insensitive, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive { color: #5d6767; @@ -3574,13 +3620,13 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); } .list-row:selected .button:backdrop:insensitive > .label, .list-row:selected .header-bar .button.titlebutton:backdrop:insensitive > .label, - .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive > .label, .list-row:selected .button.flat:backdrop:insensitive > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive > .label, + .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive > .label, .list-row:selected .button.flat:backdrop:insensitive > .label, .list-row:selected .sidebar-button.button:backdrop:insensitive > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive > .label, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive > .label, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .list-row:selected .button:backdrop:insensitive:active, .list-row:selected .button:backdrop:insensitive:checked, .list-row:selected .button.flat:backdrop:insensitive:active, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active, + .list-row:selected .button:backdrop:insensitive:active, .list-row:selected .button:backdrop:insensitive:checked, .list-row:selected .button.flat:backdrop:insensitive:active, .list-row:selected .sidebar-button.button:backdrop:insensitive:active, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:active, - .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active, .list-row:selected .button.flat:backdrop:insensitive:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked, + .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active, .list-row:selected .button.flat:backdrop:insensitive:checked, .list-row:selected .sidebar-button.button:backdrop:insensitive:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:checked, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:checked { color: #5d6767; @@ -3589,13 +3635,13 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { box-shadow: inset 0 1px rgba(255, 255, 255, 0); } .list-row:selected .button:backdrop:insensitive:active > .label, .list-row:selected .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive:active > .label, .list-row:selected .button:backdrop:insensitive:checked > .label, .list-row:selected .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, - .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .list-row:selected .button.flat:backdrop:insensitive:active > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, + .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .list-row:selected .button.flat:backdrop:insensitive:active > .label, .list-row:selected .sidebar-button.button:backdrop:insensitive:active > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, .list-row:selected .button.flat:backdrop:insensitive:checked > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, .list-row:selected .button.flat:backdrop:insensitive:checked > .label, .list-row:selected .sidebar-button.button:backdrop:insensitive:checked > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked > .label, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .list-row:selected .button.flat:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, + .list-row:selected .button.flat:backdrop, .list-row:selected .sidebar-button.button:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, .list-row:selected .titlebar .titlebutton.button:backdrop, .titlebar .list-row:selected .titlebutton.button:backdrop { border-color: transparent; @@ -3658,10 +3704,11 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { text-shadow: 0 1px black; icon-shadow: 0 1px black; outline-color: rgba(238, 238, 236, 0.3); } - .app-notification .button.flat, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, + .app-notification .button.flat, .app-notification .sidebar-button.button, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, .app-notification .titlebar .titlebutton.button, .titlebar .app-notification .titlebutton.button, .app-notification.frame .button.flat, + .app-notification.frame .sidebar-button.button, .app-notification.frame .header-bar .titlebutton.button, .header-bar .app-notification.frame .titlebutton.button, .app-notification.frame .titlebar .titlebutton.button, @@ -3947,31 +3994,44 @@ GtkFileChooserDialog .dialog-action-box { ***********/ .sidebar { border: none; - background-color: #454c4c; } + background-color: #313434; } .sidebar:backdrop { - background-color: #454c4c; } - -GtkPlacesSidebar.sidebar .view { - color: #eeeeec; - background-color: transparent; } - GtkPlacesSidebar.sidebar .view .image { - color: #bbbdbc; } - GtkPlacesSidebar.sidebar .view .image:selected { - color: #e9eff5; } - GtkPlacesSidebar.sidebar .view .image:selected:backdrop { - color: #e9eff5; } - GtkPlacesSidebar.sidebar .view .image:insensitive { - color: #7c8180; } - GtkPlacesSidebar.sidebar .view .image:backdrop { - color: #7c8180; } - GtkPlacesSidebar.sidebar .view .image:backdrop:insensitive { - color: #565f5f; } - GtkPlacesSidebar.sidebar .view:insensitive { - color: #949796; } - GtkPlacesSidebar.sidebar .view:backdrop { - color: #949796; } - GtkPlacesSidebar.sidebar .view:backdrop:insensitive { - color: #5d6767; } + background-color: #3e4444; } + +.list-row { + padding: 0px; } +GtkSidebarRow .sidebar-revealer { + padding: 4px 14px 4px 12px; } +GtkSidebarRow .sidebar-icon { + padding-right: 8px; + opacity: 0.7; } +GtkSidebarRow .sidebar-label { + padding-right: 2px; } + +GtkPlacesSidebar.sidebar .sidebar-placeholder-row { + border: solid 1px #215d9c; } +GtkPlacesSidebar.sidebar .sidebar-new-bookmark-row { + background-color: #262a2a; } +.list-row.button:hover { + background-color: #4b5150; } +.sidebar-button.button, .header-bar .sidebar-button.button.titlebutton, +.titlebar .sidebar-button.button.titlebutton { + border-radius: 100%; + outline-radius: 100%; + /* &:hover:not(:active):not(:backdrop) { + background-image: none; + background-color: gtkalpha(currentColor, 0.1); + border-color: transparentize($borders_color, 1); + box-shadow: inset 0 0 transparentize(white, 1); + icon-shadow: none; + } */ } + .sidebar-button.button.image-button, .header-bar .sidebar-button.titlebutton.button, + .titlebar .sidebar-button.titlebutton.button { + padding: 5px; } + .sidebar-button.button:not(:hover):not(:active) > GtkImage, .header-bar .sidebar-button.button.titlebutton:not(:hover):not(:active) > GtkImage, + .titlebar .sidebar-button.button.titlebutton:not(:hover):not(:active) > GtkImage, .sidebar-button.button:backdrop > GtkImage, .header-bar .sidebar-button.button.titlebutton:backdrop > GtkImage, + .titlebar .sidebar-button.button.titlebutton:backdrop > GtkImage { + opacity: 0.7; } .sidebar-item { padding: 10px 4px; } @@ -4328,12 +4388,12 @@ GtkVolumeButton.button, .header-bar GtkVolumeButton.button.titlebutton, .titlebar.selection-mode .titlebutton.button:backdrop { icon-shadow: none; } -.view:selected, GtkCalendar:selected, .label:selected, .label:selected:focus, .label:selected:hover, .grid-child:selected, .entry:selected, .entry:selected:focus, .menuitem.button.flat:selected, .header-bar .menuitem.titlebutton.button:selected, -.titlebar .menuitem.titlebutton.button:selected, .list-row:selected, .sidebar:selected, GtkPlacesSidebar.sidebar .view:selected, GtkPlacesSidebar.sidebar GtkCalendar:selected { +.view:selected, GtkCalendar:selected, .label:selected, .label:selected:focus, .label:selected:hover, .grid-child:selected, .entry:selected, .entry:selected:focus, .menuitem.button.flat:selected, .menuitem.sidebar-button.button:selected, .header-bar .menuitem.titlebutton.button:selected, +.titlebar .menuitem.titlebutton.button:selected, .list-row:selected, .sidebar:selected { background-color: #215d9c; color: #ffffff; } - .view:backdrop:selected, GtkCalendar:backdrop:selected, .label:backdrop:selected, .grid-child:backdrop:selected, .entry:backdrop:selected, .menuitem.button.flat:backdrop:selected, .header-bar .menuitem.titlebutton.button:backdrop:selected, - .titlebar .menuitem.titlebutton.button:backdrop:selected, .list-row:backdrop:selected, .sidebar:backdrop:selected, GtkPlacesSidebar.sidebar .view:backdrop:selected, GtkPlacesSidebar.sidebar GtkCalendar:backdrop:selected { + .view:backdrop:selected, GtkCalendar:backdrop:selected, .label:backdrop:selected, .grid-child:backdrop:selected, .entry:backdrop:selected, .menuitem.button.flat:backdrop:selected, .menuitem.sidebar-button.button:backdrop:selected, .header-bar .menuitem.titlebutton.button:backdrop:selected, + .titlebar .menuitem.titlebutton.button:backdrop:selected, .list-row:backdrop:selected, .sidebar:backdrop:selected { color: #ffffff; } /* Decouple the font of context menus from their entry/textview */ diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css index b477889cde..022e24364a 100644 --- a/gtk/theme/Adwaita/gtk-contained.css +++ b/gtk/theme/Adwaita/gtk-contained.css @@ -77,16 +77,16 @@ border: 1px solid #4a90d9; background-color: rgba(74, 144, 217, 0.2); } -.label.separator, GtkPlacesSidebar.sidebar .view .label.separator { +.label.separator { color: #2e3436; } - .label.separator:backdrop, GtkPlacesSidebar.sidebar .view .label.separator:backdrop { + .label.separator:backdrop { color: #8e9192; } .label:insensitive { color: #8e9192; } .label:insensitive:backdrop { color: #c7c7c7; } -.dim-label, .label.separator, GtkPlacesSidebar.sidebar .view .label.separator, .titlebar .subtitle, +.dim-label, .label.separator, .titlebar .subtitle, .header-bar .subtitle { opacity: 0.55; text-shadow: none; } @@ -325,7 +325,7 @@ GtkTextView { text-shadow: 0 1px rgba(255, 255, 255, 0.76923); icon-shadow: 0 1px rgba(255, 255, 255, 0.76923); box-shadow: inset 0 1px white, 0 1px white; } - .button.flat, .header-bar .titlebutton.button, + .button.flat, .sidebar-button.button, .header-bar .titlebutton.button, .titlebar .titlebutton.button { border-color: transparent; background-color: transparent; @@ -334,11 +334,11 @@ GtkTextView { text-shadow: none; icon-shadow: none; transition: none; } - .button.flat:hover, .header-bar .titlebutton.button:hover, + .button.flat:hover, .sidebar-button.button:hover, .header-bar .titlebutton.button:hover, .titlebar .titlebutton.button:hover { transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); transition-duration: 500ms; } - .button.flat:hover:active, .header-bar .titlebutton.button:hover:active, + .button.flat:hover:active, .sidebar-button.button:hover:active, .header-bar .titlebutton.button:hover:active, .titlebar .titlebutton.button:hover:active { transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); } .button:hover, .header-bar .button.titlebutton:hover, @@ -363,7 +363,7 @@ GtkTextView { box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px white; transition-duration: 50ms; } .button:backdrop, .header-bar .button.titlebutton:backdrop, - .titlebar .button.titlebutton:backdrop, .button.flat:backdrop, .header-bar .titlebutton.button:backdrop, + .titlebar .button.titlebutton:backdrop, .button.flat:backdrop, .sidebar-button.button:backdrop, .header-bar .titlebutton.button:backdrop, .titlebar .titlebutton.button:backdrop { color: #8e9192; border-color: darkgray; @@ -372,14 +372,14 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); -gtk-image-effect: none; } - .button:backdrop:active, .button:backdrop:checked, .button.flat:backdrop:active, .header-bar .titlebutton.button:backdrop:active, - .titlebar .titlebutton.button:backdrop:active, .button.flat:backdrop:checked, .header-bar .titlebutton.button:backdrop:checked, + .button:backdrop:active, .button:backdrop:checked, .button.flat:backdrop:active, .sidebar-button.button:backdrop:active, .header-bar .titlebutton.button:backdrop:active, + .titlebar .titlebutton.button:backdrop:active, .button.flat:backdrop:checked, .sidebar-button.button:backdrop:checked, .header-bar .titlebutton.button:backdrop:checked, .titlebar .titlebutton.button:backdrop:checked { color: #8e9192; border-color: darkgray; background-image: linear-gradient(to bottom, #d5d5d5); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } - .button:backdrop:insensitive, .button.flat:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, + .button:backdrop:insensitive, .button.flat:backdrop:insensitive, .sidebar-button.button:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, .titlebar .titlebutton.button:backdrop:insensitive { color: #c7c7c7; border-color: darkgray; @@ -388,11 +388,11 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } .button:backdrop:insensitive > .label, .header-bar .button.titlebutton:backdrop:insensitive > .label, - .titlebar .button.titlebutton:backdrop:insensitive > .label, .button.flat:backdrop:insensitive > .label, .header-bar .titlebutton.button:backdrop:insensitive > .label, + .titlebar .button.titlebutton:backdrop:insensitive > .label, .button.flat:backdrop:insensitive > .label, .sidebar-button.button:backdrop:insensitive > .label, .header-bar .titlebutton.button:backdrop:insensitive > .label, .titlebar .titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .button:backdrop:insensitive:active, .button:backdrop:insensitive:checked, .button.flat:backdrop:insensitive:active, .header-bar .titlebutton.button:backdrop:insensitive:active, - .titlebar .titlebutton.button:backdrop:insensitive:active, .button.flat:backdrop:insensitive:checked, .header-bar .titlebutton.button:backdrop:insensitive:checked, + .button:backdrop:insensitive:active, .button:backdrop:insensitive:checked, .button.flat:backdrop:insensitive:active, .sidebar-button.button:backdrop:insensitive:active, .header-bar .titlebutton.button:backdrop:insensitive:active, + .titlebar .titlebutton.button:backdrop:insensitive:active, .button.flat:backdrop:insensitive:checked, .sidebar-button.button:backdrop:insensitive:checked, .header-bar .titlebutton.button:backdrop:insensitive:checked, .titlebar .titlebutton.button:backdrop:insensitive:checked { color: #c7c7c7; border-color: darkgray; @@ -400,13 +400,13 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } .button:backdrop:insensitive:active > .label, .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .titlebar .button.titlebutton:backdrop:insensitive:active > .label, .button:backdrop:insensitive:checked > .label, .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, - .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .button.flat:backdrop:insensitive:active > .label, .header-bar .titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .titlebutton.button:backdrop:insensitive:active > .label, .button.flat:backdrop:insensitive:checked > .label, .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .button.flat:backdrop:insensitive:active > .label, .sidebar-button.button:backdrop:insensitive:active > .label, .header-bar .titlebutton.button:backdrop:insensitive:active > .label, + .titlebar .titlebutton.button:backdrop:insensitive:active > .label, .button.flat:backdrop:insensitive:checked > .label, .sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .button.flat:backdrop, .header-bar .titlebutton.button:backdrop, - .titlebar .titlebutton.button:backdrop, .button.flat:insensitive, .header-bar .titlebutton.button:insensitive, - .titlebar .titlebutton.button:insensitive, .button.flat:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, + .button.flat:backdrop, .sidebar-button.button:backdrop, .header-bar .titlebutton.button:backdrop, + .titlebar .titlebutton.button:backdrop, .button.flat:insensitive, .sidebar-button.button:insensitive, .header-bar .titlebutton.button:insensitive, + .titlebar .titlebutton.button:insensitive, .button.flat:backdrop:insensitive, .sidebar-button.button:backdrop:insensitive, .header-bar .titlebutton.button:backdrop:insensitive, .titlebar .titlebutton.button:backdrop:insensitive { border-color: transparent; background-color: transparent; @@ -553,7 +553,7 @@ GtkTextView { box-shadow: none; text-shadow: none; icon-shadow: none; } - .osd .button.flat, .osd .header-bar .titlebutton.button, .header-bar .osd .titlebutton.button, + .osd .button.flat, .osd .sidebar-button.button, .osd .header-bar .titlebutton.button, .header-bar .osd .titlebutton.button, .osd .titlebar .titlebutton.button, .titlebar .osd .titlebutton.button { border-color: transparent; @@ -565,7 +565,7 @@ GtkTextView { box-shadow: none; text-shadow: 0 1px black; icon-shadow: 0 1px black; } - .osd .button.flat:hover, .osd .header-bar .titlebutton.button:hover, .header-bar .osd .titlebutton.button:hover, + .osd .button.flat:hover, .osd .sidebar-button.button:hover, .osd .header-bar .titlebutton.button:hover, .header-bar .osd .titlebutton.button:hover, .osd .titlebar .titlebutton.button:hover, .titlebar .osd .titlebutton.button:hover { color: white; @@ -579,7 +579,7 @@ GtkTextView { background-clip: padding-box; border-color: transparent; box-shadow: none; } - .osd .button.flat:insensitive, .osd .header-bar .titlebutton.button:insensitive, .header-bar .osd .titlebutton.button:insensitive, + .osd .button.flat:insensitive, .osd .sidebar-button.button:insensitive, .osd .header-bar .titlebutton.button:insensitive, .header-bar .osd .titlebutton.button:insensitive, .osd .titlebar .titlebutton.button:insensitive, .titlebar .osd .titlebutton.button:insensitive { color: #878a89; @@ -592,7 +592,7 @@ GtkTextView { background-image: none; border-color: transparent; box-shadow: none; } - .osd .button.flat:backdrop, .osd .header-bar .titlebutton.button:backdrop, .header-bar .osd .titlebutton.button:backdrop, + .osd .button.flat:backdrop, .osd .sidebar-button.button:backdrop, .osd .header-bar .titlebutton.button:backdrop, .header-bar .osd .titlebutton.button:backdrop, .osd .titlebar .titlebutton.button:backdrop, .titlebar .osd .titlebutton.button:backdrop { border-color: transparent; @@ -601,9 +601,9 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); text-shadow: none; icon-shadow: none; } - .osd .button.flat:active, .osd .header-bar .titlebutton.button:active, .header-bar .osd .titlebutton.button:active, + .osd .button.flat:active, .osd .sidebar-button.button:active, .osd .header-bar .titlebutton.button:active, .header-bar .osd .titlebutton.button:active, .osd .titlebar .titlebutton.button:active, - .titlebar .osd .titlebutton.button:active, .osd .button.flat:checked, .osd .header-bar .titlebutton.button:checked, .header-bar .osd .titlebutton.button:checked, + .titlebar .osd .titlebutton.button:active, .osd .button.flat:checked, .osd .sidebar-button.button:checked, .osd .header-bar .titlebutton.button:checked, .header-bar .osd .titlebutton.button:checked, .osd .titlebar .titlebutton.button:checked, .titlebar .osd .titlebutton.button:checked { color: white; @@ -626,7 +626,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.54353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.54353); box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 1px white; } - .button.suggested-action.flat, .header-bar .suggested-action.titlebutton.button, + .button.suggested-action.flat, .suggested-action.sidebar-button.button, .header-bar .suggested-action.titlebutton.button, .titlebar .suggested-action.titlebutton.button { border-color: transparent; background-color: transparent; @@ -651,7 +651,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.62353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.62353); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px white; } - .button.suggested-action:backdrop, .button.suggested-action.flat:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, + .button.suggested-action:backdrop, .button.suggested-action.flat:backdrop, .suggested-action.sidebar-button.button:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, .titlebar .suggested-action.titlebutton.button:backdrop { color: #dbe9f7; border-color: #4a90d9; @@ -659,14 +659,14 @@ GtkTextView { text-shadow: none; icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } - .button.suggested-action:backdrop:active, .button.suggested-action:backdrop:checked, .button.suggested-action.flat:backdrop:active, .header-bar .suggested-action.titlebutton.button:backdrop:active, - .titlebar .suggested-action.titlebutton.button:backdrop:active, .button.suggested-action.flat:backdrop:checked, .header-bar .suggested-action.titlebutton.button:backdrop:checked, + .button.suggested-action:backdrop:active, .button.suggested-action:backdrop:checked, .button.suggested-action.flat:backdrop:active, .suggested-action.sidebar-button.button:backdrop:active, .header-bar .suggested-action.titlebutton.button:backdrop:active, + .titlebar .suggested-action.titlebutton.button:backdrop:active, .button.suggested-action.flat:backdrop:checked, .suggested-action.sidebar-button.button:backdrop:checked, .header-bar .suggested-action.titlebutton.button:backdrop:checked, .titlebar .suggested-action.titlebutton.button:backdrop:checked { color: #d4e4f4; border-color: #2a76c6; background-image: linear-gradient(to bottom, #2a76c6); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } - .button.suggested-action:backdrop:insensitive, .button.suggested-action.flat:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, + .button.suggested-action:backdrop:insensitive, .button.suggested-action.flat:backdrop:insensitive, .suggested-action.sidebar-button.button:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive { color: #c7c7c7; border-color: darkgray; @@ -675,11 +675,11 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } .button.suggested-action:backdrop:insensitive > .label, .header-bar .suggested-action.button.titlebutton:backdrop:insensitive > .label, - .titlebar .suggested-action.button.titlebutton:backdrop:insensitive > .label, .button.suggested-action.flat:backdrop:insensitive > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive > .label, + .titlebar .suggested-action.button.titlebutton:backdrop:insensitive > .label, .button.suggested-action.flat:backdrop:insensitive > .label, .suggested-action.sidebar-button.button:backdrop:insensitive > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive > .label, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .button.suggested-action:backdrop:insensitive:active, .button.suggested-action:backdrop:insensitive:checked, .button.suggested-action.flat:backdrop:insensitive:active, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active, - .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active, .button.suggested-action.flat:backdrop:insensitive:checked, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked, + .button.suggested-action:backdrop:insensitive:active, .button.suggested-action:backdrop:insensitive:checked, .button.suggested-action.flat:backdrop:insensitive:active, .suggested-action.sidebar-button.button:backdrop:insensitive:active, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active, + .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active, .button.suggested-action.flat:backdrop:insensitive:checked, .suggested-action.sidebar-button.button:backdrop:insensitive:checked, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:checked { color: #8db9e8; border-color: #5094db; @@ -687,13 +687,13 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } .button.suggested-action:backdrop:insensitive:active > .label, .header-bar .suggested-action.button.titlebutton:backdrop:insensitive:active > .label, .titlebar .suggested-action.button.titlebutton:backdrop:insensitive:active > .label, .button.suggested-action:backdrop:insensitive:checked > .label, .header-bar .suggested-action.button.titlebutton:backdrop:insensitive:checked > .label, - .titlebar .suggested-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.suggested-action.flat:backdrop:insensitive:active > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, .button.suggested-action.flat:backdrop:insensitive:checked > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .suggested-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.suggested-action.flat:backdrop:insensitive:active > .label, .suggested-action.sidebar-button.button:backdrop:insensitive:active > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, + .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:active > .label, .button.suggested-action.flat:backdrop:insensitive:checked > .label, .suggested-action.sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .button.suggested-action.flat:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, - .titlebar .suggested-action.titlebutton.button:backdrop, .button.suggested-action.flat:insensitive, .header-bar .suggested-action.titlebutton.button:insensitive, - .titlebar .suggested-action.titlebutton.button:insensitive, .button.suggested-action.flat:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, + .button.suggested-action.flat:backdrop, .suggested-action.sidebar-button.button:backdrop, .header-bar .suggested-action.titlebutton.button:backdrop, + .titlebar .suggested-action.titlebutton.button:backdrop, .button.suggested-action.flat:insensitive, .suggested-action.sidebar-button.button:insensitive, .header-bar .suggested-action.titlebutton.button:insensitive, + .titlebar .suggested-action.titlebutton.button:insensitive, .button.suggested-action.flat:backdrop:insensitive, .suggested-action.sidebar-button.button:backdrop:insensitive, .header-bar .suggested-action.titlebutton.button:backdrop:insensitive, .titlebar .suggested-action.titlebutton.button:backdrop:insensitive { border-color: transparent; background-color: transparent; @@ -773,7 +773,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.56078); icon-shadow: 0 -1px rgba(0, 0, 0, 0.56078); box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 1px white; } - .button.destructive-action.flat, .header-bar .destructive-action.titlebutton.button, + .button.destructive-action.flat, .destructive-action.sidebar-button.button, .header-bar .destructive-action.titlebutton.button, .titlebar .destructive-action.titlebutton.button { border-color: transparent; background-color: transparent; @@ -798,7 +798,7 @@ GtkTextView { text-shadow: 0 -1px rgba(0, 0, 0, 0.64078); icon-shadow: 0 -1px rgba(0, 0, 0, 0.64078); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px white; } - .button.destructive-action:backdrop, .button.destructive-action.flat:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, + .button.destructive-action:backdrop, .button.destructive-action.flat:backdrop, .destructive-action.sidebar-button.button:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, .titlebar .destructive-action.titlebutton.button:backdrop { color: #fcd4d4; border-color: #ef2929; @@ -806,14 +806,14 @@ GtkTextView { text-shadow: none; icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } - .button.destructive-action:backdrop:active, .button.destructive-action:backdrop:checked, .button.destructive-action.flat:backdrop:active, .header-bar .destructive-action.titlebutton.button:backdrop:active, - .titlebar .destructive-action.titlebutton.button:backdrop:active, .button.destructive-action.flat:backdrop:checked, .header-bar .destructive-action.titlebutton.button:backdrop:checked, + .button.destructive-action:backdrop:active, .button.destructive-action:backdrop:checked, .button.destructive-action.flat:backdrop:active, .destructive-action.sidebar-button.button:backdrop:active, .header-bar .destructive-action.titlebutton.button:backdrop:active, + .titlebar .destructive-action.titlebutton.button:backdrop:active, .button.destructive-action.flat:backdrop:checked, .destructive-action.sidebar-button.button:backdrop:checked, .header-bar .destructive-action.titlebutton.button:backdrop:checked, .titlebar .destructive-action.titlebutton.button:backdrop:checked { color: #f7cfcf; border-color: #d51010; background-image: linear-gradient(to bottom, #d51010); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } - .button.destructive-action:backdrop:insensitive, .button.destructive-action.flat:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, + .button.destructive-action:backdrop:insensitive, .button.destructive-action.flat:backdrop:insensitive, .destructive-action.sidebar-button.button:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive { color: #c7c7c7; border-color: darkgray; @@ -822,11 +822,11 @@ GtkTextView { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } .button.destructive-action:backdrop:insensitive > .label, .header-bar .destructive-action.button.titlebutton:backdrop:insensitive > .label, - .titlebar .destructive-action.button.titlebutton:backdrop:insensitive > .label, .button.destructive-action.flat:backdrop:insensitive > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive > .label, + .titlebar .destructive-action.button.titlebutton:backdrop:insensitive > .label, .button.destructive-action.flat:backdrop:insensitive > .label, .destructive-action.sidebar-button.button:backdrop:insensitive > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive > .label, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .button.destructive-action:backdrop:insensitive:active, .button.destructive-action:backdrop:insensitive:checked, .button.destructive-action.flat:backdrop:insensitive:active, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active, - .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active, .button.destructive-action.flat:backdrop:insensitive:checked, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked, + .button.destructive-action:backdrop:insensitive:active, .button.destructive-action:backdrop:insensitive:checked, .button.destructive-action.flat:backdrop:insensitive:active, .destructive-action.sidebar-button.button:backdrop:insensitive:active, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active, + .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active, .button.destructive-action.flat:backdrop:insensitive:checked, .destructive-action.sidebar-button.button:backdrop:insensitive:checked, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:checked { color: #f57979; border-color: #ef3131; @@ -834,13 +834,13 @@ GtkTextView { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(255, 255, 255, 0); } .button.destructive-action:backdrop:insensitive:active > .label, .header-bar .destructive-action.button.titlebutton:backdrop:insensitive:active > .label, .titlebar .destructive-action.button.titlebutton:backdrop:insensitive:active > .label, .button.destructive-action:backdrop:insensitive:checked > .label, .header-bar .destructive-action.button.titlebutton:backdrop:insensitive:checked > .label, - .titlebar .destructive-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.destructive-action.flat:backdrop:insensitive:active > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, .button.destructive-action.flat:backdrop:insensitive:checked > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .destructive-action.button.titlebutton:backdrop:insensitive:checked > .label, .button.destructive-action.flat:backdrop:insensitive:active > .label, .destructive-action.sidebar-button.button:backdrop:insensitive:active > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, + .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:active > .label, .button.destructive-action.flat:backdrop:insensitive:checked > .label, .destructive-action.sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .button.destructive-action.flat:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, - .titlebar .destructive-action.titlebutton.button:backdrop, .button.destructive-action.flat:insensitive, .header-bar .destructive-action.titlebutton.button:insensitive, - .titlebar .destructive-action.titlebutton.button:insensitive, .button.destructive-action.flat:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, + .button.destructive-action.flat:backdrop, .destructive-action.sidebar-button.button:backdrop, .header-bar .destructive-action.titlebutton.button:backdrop, + .titlebar .destructive-action.titlebutton.button:backdrop, .button.destructive-action.flat:insensitive, .destructive-action.sidebar-button.button:insensitive, .header-bar .destructive-action.titlebutton.button:insensitive, + .titlebar .destructive-action.titlebutton.button:insensitive, .button.destructive-action.flat:backdrop:insensitive, .destructive-action.sidebar-button.button:backdrop:insensitive, .header-bar .destructive-action.titlebutton.button:backdrop:insensitive, .titlebar .destructive-action.titlebutton.button:backdrop:insensitive { border-color: transparent; background-color: transparent; @@ -1052,13 +1052,17 @@ GtkTextView { .inline-toolbar GtkToolButton > .button:backdrop:insensitive:active > .label, .inline-toolbar GtkToolButton > .button:backdrop:insensitive:checked > .label { color: inherit; } -.inline-toolbar.toolbar GtkToolButton > .button.flat, .inline-toolbar GtkToolButton > .button.flat, .inline-toolbar.search-bar GtkToolButton > .button.flat, .inline-toolbar.location-bar GtkToolButton > .button.flat, .inline-toolbar .header-bar GtkToolButton > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton > .button.titlebutton, +.inline-toolbar.toolbar GtkToolButton > .button.flat, .inline-toolbar GtkToolButton > .button.flat, .inline-toolbar.search-bar GtkToolButton > .button.flat, .inline-toolbar.location-bar GtkToolButton > .button.flat, .inline-toolbar.toolbar GtkToolButton > .sidebar-button.button, .inline-toolbar GtkToolButton > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop > .button.flat, .inline-toolbar GtkToolButton:backdrop > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop > .button.titlebutton, @@ -1072,13 +1076,17 @@ GtkTextView { border-right-style: none; } .linked > .entry:first-child, .osd .button:first-child:hover, .osd .button:first-child:active, .osd .button:first-child:checked, .osd .button:first-child:insensitive, .osd .button:first-child:backdrop, .osd .button.suggested-action:first-child, .osd .button.destructive-action:first-child, .inline-toolbar .button:first-child, .linked > .button:first-child, .header-bar .linked > .button.titlebutton:first-child, -.titlebar .linked > .button.titlebutton:first-child, .inline-toolbar.toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:first-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:first-child > .button.flat, .inline-toolbar .header-bar GtkToolButton:first-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:first-child > .button.titlebutton, +.titlebar .linked > .button.titlebutton:first-child, .inline-toolbar.toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar GtkToolButton:first-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:first-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:first-child > .button.flat, .inline-toolbar.toolbar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton:first-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:first-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:first-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:first-child > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton:first-child > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop:first-child > .button.flat, .inline-toolbar GtkToolButton:backdrop:first-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop:first-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop:first-child > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop:first-child > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop:first-child > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop:first-child > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop:first-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop:first-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop:first-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop:first-child > .button.titlebutton, @@ -1087,13 +1095,17 @@ GtkTextView { border-top-left-radius: 3px; border-bottom-left-radius: 3px; } .linked > .entry:last-child, .osd .button:last-child:hover, .osd .button:last-child:active, .osd .button:last-child:checked, .osd .button:last-child:insensitive, .osd .button:last-child:backdrop, .osd .button.suggested-action:last-child, .osd .button.destructive-action:last-child, .inline-toolbar .button:last-child, .linked > .button:last-child, .header-bar .linked > .button.titlebutton:last-child, -.titlebar .linked > .button.titlebutton:last-child, .inline-toolbar.toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:last-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:last-child > .button.flat, .inline-toolbar .header-bar GtkToolButton:last-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:last-child > .button.titlebutton, +.titlebar .linked > .button.titlebutton:last-child, .inline-toolbar.toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar GtkToolButton:last-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:last-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:last-child > .button.flat, .inline-toolbar.toolbar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton:last-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:last-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:last-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:last-child > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton:last-child > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop:last-child > .button.flat, .inline-toolbar GtkToolButton:backdrop:last-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop:last-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop:last-child > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop:last-child > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop:last-child > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop:last-child > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop:last-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop:last-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop:last-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop:last-child > .button.titlebutton, @@ -1103,13 +1115,17 @@ GtkTextView { border-bottom-right-radius: 3px; border-right-style: solid; } .linked > .entry:only-child, .osd .button:only-child:hover, .osd .button:only-child:active, .osd .button:only-child:checked, .osd .button:only-child:insensitive, .osd .button:only-child:backdrop, .osd .button.suggested-action:only-child, .osd .button.destructive-action:only-child, .inline-toolbar .button:only-child, .linked > .button:only-child, .header-bar .linked > .button.titlebutton:only-child, -.titlebar .linked > .button.titlebutton:only-child, .inline-toolbar.toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:only-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:only-child > .button.flat, .inline-toolbar .header-bar GtkToolButton:only-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:only-child > .button.titlebutton, +.titlebar .linked > .button.titlebutton:only-child, .inline-toolbar.toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar GtkToolButton:only-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:only-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:only-child > .button.flat, .inline-toolbar.toolbar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar.search-bar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar.location-bar GtkToolButton:only-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:only-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:only-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:only-child > .button.titlebutton, .titlebar .inline-toolbar GtkToolButton:only-child > .button.titlebutton, .inline-toolbar.toolbar GtkToolButton:backdrop:only-child > .button.flat, .inline-toolbar GtkToolButton:backdrop:only-child > .button.flat, .inline-toolbar.search-bar GtkToolButton:backdrop:only-child > .button.flat, .inline-toolbar.location-bar GtkToolButton:backdrop:only-child > .button.flat, +.inline-toolbar.toolbar GtkToolButton:backdrop:only-child > .sidebar-button.button, +.inline-toolbar GtkToolButton:backdrop:only-child > .sidebar-button.button, +.inline-toolbar.search-bar GtkToolButton:backdrop:only-child > .sidebar-button.button, +.inline-toolbar.location-bar GtkToolButton:backdrop:only-child > .sidebar-button.button, .inline-toolbar .header-bar GtkToolButton:backdrop:only-child > .button.titlebutton, .header-bar .inline-toolbar GtkToolButton:backdrop:only-child > .button.titlebutton, .inline-toolbar .titlebar GtkToolButton:backdrop:only-child > .button.titlebutton, @@ -1141,8 +1157,9 @@ GtkTextView { border-radius: 3px; border-style: solid; } -.menuitem.button.flat, .header-bar .menuitem.titlebutton.button, -.titlebar .menuitem.titlebutton.button, .menuitem.button.flat:backdrop, .menuitem.button.flat:backdrop:hover, .header-bar .menuitem.titlebutton.button:backdrop:hover, +.menuitem.button.flat, .menuitem.sidebar-button.button, .header-bar .menuitem.titlebutton.button, +.titlebar .menuitem.titlebutton.button, .menuitem.button.flat:backdrop, .menuitem.sidebar-button.button:backdrop, .header-bar .menuitem.titlebutton.button:backdrop, +.titlebar .menuitem.titlebutton.button:backdrop, .menuitem.button.flat:backdrop:hover, .menuitem.sidebar-button.button:backdrop:hover, .header-bar .menuitem.titlebutton.button:backdrop:hover, .titlebar .menuitem.titlebutton.button:backdrop:hover, .button:link, .header-bar .button.titlebutton:link, .titlebar .button.titlebutton:link, .button:visited, .header-bar .button.titlebutton:visited, .titlebar .button.titlebutton:visited, .button:link:hover, .button:link:active, .button:link:checked, .button:visited:hover, .button:visited:active, .button:visited:checked, .button:link:backdrop, .button:visited:backdrop, .menu.button, .header-bar .menu.button.titlebutton, @@ -1157,24 +1174,42 @@ GtkTextView { .list-row.button:backdrop:insensitive:active, .list-row.button:backdrop:insensitive:checked, .list-row.button:insensitive:active, -.list-row.button:insensitive:checked, .app-notification .button.flat, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, +.list-row.button:insensitive:checked, .app-notification .button.flat, .app-notification .sidebar-button.button, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, .app-notification .titlebar .titlebutton.button, .titlebar .app-notification .titlebutton.button, -.app-notification.frame .button.flat, .app-notification .button.flat:backdrop, .app-notification .button.flat:insensitive, .app-notification .button.flat:backdrop:insensitive, .app-notification .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .app-notification .titlebutton.button:backdrop:insensitive, +.app-notification.frame .button.flat, +.app-notification.frame .sidebar-button.button, +.app-notification.frame .header-bar .button.titlebutton, +.header-bar .app-notification.frame .button.titlebutton, +.app-notification.frame .titlebar .button.titlebutton, +.titlebar .app-notification.frame .button.titlebutton, .app-notification .button.flat:backdrop, .app-notification .sidebar-button.button:backdrop, .app-notification .header-bar .titlebutton.button:backdrop, .header-bar .app-notification .titlebutton.button:backdrop, +.app-notification .titlebar .titlebutton.button:backdrop, +.titlebar .app-notification .titlebutton.button:backdrop, .app-notification .button.flat:insensitive, .app-notification .sidebar-button.button:insensitive, .app-notification .header-bar .titlebutton.button:insensitive, .header-bar .app-notification .titlebutton.button:insensitive, +.app-notification .titlebar .titlebutton.button:insensitive, +.titlebar .app-notification .titlebutton.button:insensitive, .app-notification .button.flat:backdrop:insensitive, .app-notification .sidebar-button.button:backdrop:insensitive, .app-notification .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .app-notification .titlebutton.button:backdrop:insensitive, .app-notification .titlebar .titlebutton.button:backdrop:insensitive, .titlebar .app-notification .titlebutton.button:backdrop:insensitive, .app-notification.frame .button.flat:backdrop, +.app-notification.frame .sidebar-button.button:backdrop, .app-notification.frame .header-bar .button.titlebutton:backdrop, .header-bar .app-notification.frame .button.titlebutton:backdrop, .app-notification.frame .titlebar .button.titlebutton:backdrop, .titlebar .app-notification.frame .button.titlebutton:backdrop, .app-notification.frame .button.flat:insensitive, +.app-notification.frame .sidebar-button.button:insensitive, .app-notification.frame .header-bar .button.titlebutton:insensitive, .header-bar .app-notification.frame .button.titlebutton:insensitive, .app-notification.frame .titlebar .button.titlebutton:insensitive, .titlebar .app-notification.frame .button.titlebutton:insensitive, -.app-notification.frame .button.flat:backdrop:insensitive, GtkCalendar.button, .header-bar GtkCalendar.button.titlebutton, -.titlebar GtkCalendar.button.titlebutton, GtkCalendar.button:hover, GtkCalendar.button:backdrop, .scale-popup .button:hover, .scale-popup .button:backdrop, .scale-popup .button:backdrop:hover, .scale-popup .button:backdrop:insensitive { +.app-notification.frame .button.flat:backdrop:insensitive, +.app-notification.frame .sidebar-button.button:backdrop:insensitive, +.app-notification.frame .header-bar .button.titlebutton:backdrop:insensitive, +.header-bar .app-notification.frame .button.titlebutton:backdrop:insensitive, +.app-notification.frame .titlebar .button.titlebutton:backdrop:insensitive, +.titlebar .app-notification.frame .button.titlebutton:backdrop:insensitive, GtkCalendar.button, .header-bar GtkCalendar.button.titlebutton, +.titlebar GtkCalendar.button.titlebutton, GtkCalendar.button:hover, .header-bar GtkCalendar.button.titlebutton:hover, +.titlebar GtkCalendar.button.titlebutton:hover, GtkCalendar.button:backdrop, .header-bar GtkCalendar.button.titlebutton:backdrop, +.titlebar GtkCalendar.button.titlebutton:backdrop, .scale-popup .button:hover, .scale-popup .button:backdrop, .scale-popup .button:backdrop:hover, .scale-popup .button:backdrop:insensitive { border-color: transparent; background-color: transparent; background-image: none; @@ -1183,10 +1218,10 @@ GtkTextView { icon-shadow: none; } /* menu buttons */ -.menuitem.button.flat, .header-bar .menuitem.titlebutton.button, +.menuitem.button.flat, .menuitem.sidebar-button.button, .header-bar .menuitem.titlebutton.button, .titlebar .menuitem.titlebutton.button { outline-offset: -1px; } - .menuitem.button.flat:hover, .header-bar .menuitem.titlebutton.button:hover, + .menuitem.button.flat:hover, .menuitem.sidebar-button.button:hover, .header-bar .menuitem.titlebutton.button:hover, .titlebar .menuitem.titlebutton.button:hover { background-color: #dadbdb; } @@ -1458,7 +1493,7 @@ GtkComboBox { color: #c7c7c7; } GtkComboBox .menuitem { text-shadow: none; } - GtkComboBox .separator.vertical, GtkComboBox GtkPlacesSidebar.sidebar .view .vertical.separator, GtkPlacesSidebar.sidebar .view GtkComboBox .vertical.separator { + GtkComboBox .separator.vertical { -GtkWidget-wide-separators: true; } GtkComboBox.combobox-entry .entry:dir(ltr) { border-top-right-radius: 0; @@ -1537,10 +1572,8 @@ GtkComboBox { padding-left: 12px; padding-right: 12px; } .titlebar .header-bar-separator, .titlebar > GtkBox > .separator.vertical, - GtkPlacesSidebar.sidebar .view .titlebar > GtkBox > .vertical.separator:backdrop, .header-bar .header-bar-separator, - .header-bar > GtkBox > .separator.vertical, - GtkPlacesSidebar.sidebar .view .header-bar > GtkBox > .vertical.separator:backdrop { + .header-bar > GtkBox > .separator.vertical { -GtkWidget-wide-separators: true; -GtkWidget-separator-width: 1px; border-width: 0 1px; @@ -1569,9 +1602,10 @@ GtkComboBox { text-shadow: 0 -1px rgba(0, 0, 0, 0.54353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.54353); box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 1px #a5c8ec; } - .titlebar.selection-mode .button.flat, + .titlebar.selection-mode .button.flat, .titlebar.selection-mode .sidebar-button.button, .titlebar.selection-mode .titlebutton.button, .header-bar.selection-mode .button.flat, + .header-bar.selection-mode .sidebar-button.button, .header-bar.selection-mode .titlebutton.button { border-color: transparent; background-color: transparent; @@ -1598,10 +1632,11 @@ GtkComboBox { text-shadow: 0 -1px rgba(0, 0, 0, 0.62353); icon-shadow: 0 -1px rgba(0, 0, 0, 0.62353); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6), 0 1px #a5c8ec; } - .titlebar.selection-mode .button:backdrop, .titlebar.selection-mode .button.flat:backdrop, + .titlebar.selection-mode .button:backdrop, .titlebar.selection-mode .button.flat:backdrop, .titlebar.selection-mode .sidebar-button.button:backdrop, .titlebar.selection-mode .titlebutton.button:backdrop, .header-bar.selection-mode .button:backdrop, .header-bar.selection-mode .button.flat:backdrop, + .header-bar.selection-mode .sidebar-button.button:backdrop, .header-bar.selection-mode .titlebutton.button:backdrop { color: #dbe9f7; border-color: #4a90d9; @@ -1611,24 +1646,27 @@ GtkComboBox { box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(165, 200, 236, 0); -gtk-image-effect: none; border-color: #184472; } - .titlebar.selection-mode .button:backdrop:active, .titlebar.selection-mode .button:backdrop:checked, .titlebar.selection-mode .button.flat:backdrop:active, - .titlebar.selection-mode .titlebutton.button:backdrop:active, .titlebar.selection-mode .button.flat:backdrop:checked, + .titlebar.selection-mode .button:backdrop:active, .titlebar.selection-mode .button:backdrop:checked, .titlebar.selection-mode .button.flat:backdrop:active, .titlebar.selection-mode .sidebar-button.button:backdrop:active, + .titlebar.selection-mode .titlebutton.button:backdrop:active, .titlebar.selection-mode .button.flat:backdrop:checked, .titlebar.selection-mode .sidebar-button.button:backdrop:checked, .titlebar.selection-mode .titlebutton.button:backdrop:checked, .header-bar.selection-mode .button:backdrop:active, .header-bar.selection-mode .button:backdrop:checked, .header-bar.selection-mode .button.flat:backdrop:active, + .header-bar.selection-mode .sidebar-button.button:backdrop:active, .header-bar.selection-mode .titlebutton.button:backdrop:active, .header-bar.selection-mode .button.flat:backdrop:checked, + .header-bar.selection-mode .sidebar-button.button:backdrop:checked, .header-bar.selection-mode .titlebutton.button:backdrop:checked { color: #d4e4f4; border-color: #2a76c6; background-image: linear-gradient(to bottom, #2a76c6); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(165, 200, 236, 0); border-color: #184472; } - .titlebar.selection-mode .button:backdrop:insensitive, .titlebar.selection-mode .button.flat:backdrop:insensitive, + .titlebar.selection-mode .button:backdrop:insensitive, .titlebar.selection-mode .button.flat:backdrop:insensitive, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive, .header-bar.selection-mode .button:backdrop:insensitive, .header-bar.selection-mode .button.flat:backdrop:insensitive, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive { color: #9bc2ea; border-color: #65a1df; @@ -1637,51 +1675,59 @@ GtkComboBox { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(165, 200, 236, 0); border-color: #184472; } - .titlebar.selection-mode .button:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive > .label, + .titlebar.selection-mode .button:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive > .label, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive > .label, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive > .label, .header-bar.selection-mode .button:backdrop:insensitive > .label, .header-bar.selection-mode .titlebar .button.titlebutton:backdrop:insensitive > .label, .header-bar.selection-mode .button.flat:backdrop:insensitive > .label, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive > .label, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive > .label, .header-bar.selection-mode .titlebar .titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .titlebar.selection-mode .button:backdrop:insensitive:active, .titlebar.selection-mode .button:backdrop:insensitive:checked, .titlebar.selection-mode .button.flat:backdrop:insensitive:active, - .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked, + .titlebar.selection-mode .button:backdrop:insensitive:active, .titlebar.selection-mode .button:backdrop:insensitive:checked, .titlebar.selection-mode .button.flat:backdrop:insensitive:active, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:active, + .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:checked, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:checked, .header-bar.selection-mode .button:backdrop:insensitive:active, .header-bar.selection-mode .button:backdrop:insensitive:checked, .header-bar.selection-mode .button.flat:backdrop:insensitive:active, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:active, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:active, .header-bar.selection-mode .button.flat:backdrop:insensitive:checked, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:checked, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:checked { color: #8db9e8; border-color: #5094db; background-image: linear-gradient(to bottom, #5094db); box-shadow: inset 0 1px rgba(255, 255, 255, 0), 0 1px rgba(165, 200, 236, 0); border-color: #184472; } - .titlebar.selection-mode .button:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .titlebar.selection-mode .button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:active > .label, - .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar.selection-mode .button:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .titlebar.selection-mode .button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:active > .label, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:active > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:active > .label, + .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:active > .label, .titlebar.selection-mode .button.flat:backdrop:insensitive:checked > .label, .titlebar.selection-mode .sidebar-button.button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .titlebar.selection-mode .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .button:backdrop:insensitive:active > .label, .header-bar.selection-mode .titlebar .button.titlebutton:backdrop:insensitive:active > .label, .header-bar.selection-mode .button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .header-bar.selection-mode .button.flat:backdrop:insensitive:active > .label, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:active > .label, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:active > .label, .header-bar.selection-mode .titlebar .titlebutton.button:backdrop:insensitive:active > .label, .header-bar.selection-mode .button.flat:backdrop:insensitive:checked > .label, + .header-bar.selection-mode .sidebar-button.button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar.selection-mode .titlebar .titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .titlebar.selection-mode .button.flat:backdrop, - .titlebar.selection-mode .titlebutton.button:backdrop, .titlebar.selection-mode .button.flat:insensitive, - .titlebar.selection-mode .titlebutton.button:insensitive, .titlebar.selection-mode .button.flat:insensitive:backdrop, + .titlebar.selection-mode .button.flat:backdrop, .titlebar.selection-mode .sidebar-button.button:backdrop, + .titlebar.selection-mode .titlebutton.button:backdrop, .titlebar.selection-mode .button.flat:insensitive, .titlebar.selection-mode .sidebar-button.button:insensitive, + .titlebar.selection-mode .titlebutton.button:insensitive, .titlebar.selection-mode .button.flat:insensitive:backdrop, .titlebar.selection-mode .sidebar-button.button:insensitive:backdrop, .titlebar.selection-mode .titlebutton.button:insensitive:backdrop, .header-bar.selection-mode .button.flat:backdrop, + .header-bar.selection-mode .sidebar-button.button:backdrop, .header-bar.selection-mode .titlebutton.button:backdrop, .header-bar.selection-mode .button.flat:insensitive, + .header-bar.selection-mode .sidebar-button.button:insensitive, .header-bar.selection-mode .titlebutton.button:insensitive, .header-bar.selection-mode .button.flat:insensitive:backdrop, + .header-bar.selection-mode .sidebar-button.button:insensitive:backdrop, .header-bar.selection-mode .titlebutton.button:insensitive:backdrop { border-color: transparent; background-color: transparent; @@ -2048,10 +2094,11 @@ column-header .titlebar .button.titlebutton, .popover > .location-bar, .popover.osd > .toolbar, .popover.osd > .inline-toolbar, .popover.osd > .search-bar, .popover.osd > .location-bar { border-style: none; background-color: transparent; } - .popover .button.flat, .popover .header-bar .titlebutton.button, .header-bar .popover .titlebutton.button, + .popover .button.flat, .popover .sidebar-button.button, .popover .header-bar .titlebutton.button, .header-bar .popover .titlebutton.button, .popover .titlebar .titlebutton.button, .titlebar .popover .titlebutton.button, .popover .button.flat:hover, + .popover .sidebar-button.button:hover, .popover .header-bar .titlebutton.button:hover, .header-bar .popover .titlebutton.button:hover, .popover .titlebar .titlebutton.button:hover, @@ -2581,7 +2628,7 @@ GtkSwitch { .check { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked.png"), url("assets/checkbox-unchecked@2.png")); icon-shadow: 0 1px 0 white; } - .check.button.flat, .header-bar .check.titlebutton.button, + .check.button.flat, .check.sidebar-button.button, .header-bar .check.titlebutton.button, .titlebar .check.titlebutton.button { icon-shadow: none; } @@ -2592,7 +2639,7 @@ GtkSwitch { .check:hover { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-hover.png"), url("assets/checkbox-unchecked-hover@2.png")); icon-shadow: 0 1px 0 white; } - .check:hover.button.flat, .header-bar .check.titlebutton.button:hover, + .check:hover.button.flat, .check.sidebar-button.button:hover, .header-bar .check.titlebutton.button:hover, .titlebar .check.titlebutton.button:hover { icon-shadow: none; } @@ -2603,7 +2650,7 @@ GtkSwitch { .check:active { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-active.png"), url("assets/checkbox-unchecked-active@2.png")); icon-shadow: 0 1px 0 white; } - .check:active.button.flat, .header-bar .check.titlebutton.button:active, + .check:active.button.flat, .check.sidebar-button.button:active, .header-bar .check.titlebutton.button:active, .titlebar .check.titlebutton.button:active { icon-shadow: none; } @@ -2614,7 +2661,7 @@ GtkSwitch { .check:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-insensitive.png"), url("assets/checkbox-unchecked-insensitive@2.png")); icon-shadow: 0 1px 0 white; } - .check:insensitive.button.flat, .header-bar .check.titlebutton.button:insensitive, + .check:insensitive.button.flat, .check.sidebar-button.button:insensitive, .header-bar .check.titlebutton.button:insensitive, .titlebar .check.titlebutton.button:insensitive { icon-shadow: none; } @@ -2625,7 +2672,7 @@ GtkSwitch { .check:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-backdrop.png"), url("assets/checkbox-unchecked-backdrop@2.png")); icon-shadow: none; } - .check:backdrop.button.flat, .header-bar .check.titlebutton.button:backdrop, + .check:backdrop.button.flat, .check.sidebar-button.button:backdrop, .header-bar .check.titlebutton.button:backdrop, .titlebar .check.titlebutton.button:backdrop { icon-shadow: none; } @@ -2636,7 +2683,7 @@ GtkSwitch { .check:backdrop:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-unchecked-backdrop-insensitive.png"), url("assets/checkbox-unchecked-backdrop-insensitive@2.png")); icon-shadow: none; } - .check:backdrop:insensitive.button.flat, .header-bar .check.titlebutton.button:backdrop:insensitive, + .check:backdrop:insensitive.button.flat, .check.sidebar-button.button:backdrop:insensitive, .header-bar .check.titlebutton.button:backdrop:insensitive, .titlebar .check.titlebutton.button:backdrop:insensitive { icon-shadow: none; } @@ -2647,7 +2694,7 @@ GtkSwitch { .check:inconsistent { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed.png"), url("assets/checkbox-mixed@2.png")); icon-shadow: 0 1px 0 white; } - .check:inconsistent.button.flat, .header-bar .check.titlebutton.button:inconsistent, + .check:inconsistent.button.flat, .check.sidebar-button.button:inconsistent, .header-bar .check.titlebutton.button:inconsistent, .titlebar .check.titlebutton.button:inconsistent { icon-shadow: none; } @@ -2658,7 +2705,7 @@ GtkSwitch { .check:inconsistent:hover { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-hover.png"), url("assets/checkbox-mixed-hover@2.png")); icon-shadow: 0 1px 0 white; } - .check:inconsistent:hover.button.flat, .header-bar .check.titlebutton.button:inconsistent:hover, + .check:inconsistent:hover.button.flat, .check.sidebar-button.button:inconsistent:hover, .header-bar .check.titlebutton.button:inconsistent:hover, .titlebar .check.titlebutton.button:inconsistent:hover { icon-shadow: none; } @@ -2669,7 +2716,7 @@ GtkSwitch { .check:inconsistent:selected { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-active.png"), url("assets/checkbox-mixed-active@2.png")); icon-shadow: 0 1px 0 white; } - .check:inconsistent:selected.button.flat, .header-bar .check.titlebutton.button:inconsistent:selected, + .check:inconsistent:selected.button.flat, .check.sidebar-button.button:inconsistent:selected, .header-bar .check.titlebutton.button:inconsistent:selected, .titlebar .check.titlebutton.button:inconsistent:selected { icon-shadow: none; } @@ -2680,7 +2727,7 @@ GtkSwitch { .check:inconsistent:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-backdrop.png"), url("assets/checkbox-mixed-backdrop@2.png")); icon-shadow: none; } - .check:inconsistent:backdrop.button.flat, .header-bar .check.titlebutton.button:inconsistent:backdrop, + .check:inconsistent:backdrop.button.flat, .check.sidebar-button.button:inconsistent:backdrop, .header-bar .check.titlebutton.button:inconsistent:backdrop, .titlebar .check.titlebutton.button:inconsistent:backdrop { icon-shadow: none; } @@ -2691,7 +2738,7 @@ GtkSwitch { .check:inconsistent:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-insensitive.png"), url("assets/checkbox-mixed-insensitive@2.png")); icon-shadow: 0 1px 0 white; } - .check:inconsistent:insensitive.button.flat, .header-bar .check.titlebutton.button:inconsistent:insensitive, + .check:inconsistent:insensitive.button.flat, .check.sidebar-button.button:inconsistent:insensitive, .header-bar .check.titlebutton.button:inconsistent:insensitive, .titlebar .check.titlebutton.button:inconsistent:insensitive { icon-shadow: none; } @@ -2702,7 +2749,7 @@ GtkSwitch { .check:inconsistent:insensitive:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-mixed-backdrop-insensitive.png"), url("assets/checkbox-mixed-backdrop-insensitive@2.png")); icon-shadow: none; } - .check:inconsistent:insensitive:backdrop.button.flat, .header-bar .check.titlebutton.button:inconsistent:insensitive:backdrop, + .check:inconsistent:insensitive:backdrop.button.flat, .check.sidebar-button.button:inconsistent:insensitive:backdrop, .header-bar .check.titlebutton.button:inconsistent:insensitive:backdrop, .titlebar .check.titlebutton.button:inconsistent:insensitive:backdrop { icon-shadow: none; } @@ -2713,7 +2760,7 @@ GtkSwitch { .check:checked { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked.png"), url("assets/checkbox-checked@2.png")); icon-shadow: 0 1px 0 white; } - .check:checked.button.flat, .header-bar .check.titlebutton.button:checked, + .check:checked.button.flat, .check.sidebar-button.button:checked, .header-bar .check.titlebutton.button:checked, .titlebar .check.titlebutton.button:checked { icon-shadow: none; } @@ -2724,7 +2771,7 @@ GtkSwitch { .check:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-insensitive.png"), url("assets/checkbox-checked-insensitive@2.png")); icon-shadow: 0 1px 0 white; } - .check:checked:insensitive.button.flat, .header-bar .check.titlebutton.button:checked:insensitive, + .check:checked:insensitive.button.flat, .check.sidebar-button.button:checked:insensitive, .header-bar .check.titlebutton.button:checked:insensitive, .titlebar .check.titlebutton.button:checked:insensitive { icon-shadow: none; } @@ -2735,7 +2782,7 @@ GtkSwitch { .check:checked:hover { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-hover.png"), url("assets/checkbox-checked-hover@2.png")); icon-shadow: 0 1px 0 white; } - .check:checked:hover.button.flat, .header-bar .check.titlebutton.button:checked:hover, + .check:checked:hover.button.flat, .check.sidebar-button.button:checked:hover, .header-bar .check.titlebutton.button:checked:hover, .titlebar .check.titlebutton.button:checked:hover { icon-shadow: none; } @@ -2746,7 +2793,7 @@ GtkSwitch { .check:checked:active { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-active.png"), url("assets/checkbox-checked-active@2.png")); icon-shadow: 0 1px 0 white; } - .check:checked:active.button.flat, .header-bar .check.titlebutton.button:checked:active, + .check:checked:active.button.flat, .check.sidebar-button.button:checked:active, .header-bar .check.titlebutton.button:checked:active, .titlebar .check.titlebutton.button:checked:active { icon-shadow: none; } @@ -2757,7 +2804,7 @@ GtkSwitch { .check:backdrop:checked { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-backdrop.png"), url("assets/checkbox-checked-backdrop@2.png")); icon-shadow: none; } - .check:backdrop:checked.button.flat, .header-bar .check.titlebutton.button:backdrop:checked, + .check:backdrop:checked.button.flat, .check.sidebar-button.button:backdrop:checked, .header-bar .check.titlebutton.button:backdrop:checked, .titlebar .check.titlebutton.button:backdrop:checked { icon-shadow: none; } @@ -2768,7 +2815,7 @@ GtkSwitch { .check:backdrop:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/checkbox-checked-backdrop-insensitive.png"), url("assets/checkbox-checked-backdrop-insensitive@2.png")); icon-shadow: none; } - .check:backdrop:checked:insensitive.button.flat, .header-bar .check.titlebutton.button:backdrop:checked:insensitive, + .check:backdrop:checked:insensitive.button.flat, .check.sidebar-button.button:backdrop:checked:insensitive, .header-bar .check.titlebutton.button:backdrop:checked:insensitive, .titlebar .check.titlebutton.button:backdrop:checked:insensitive { icon-shadow: none; } @@ -2792,7 +2839,7 @@ GtkSwitch { .radio { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked.png"), url("assets/radio-unchecked@2.png")); icon-shadow: 0 1px 0 white; } - .radio.button.flat, .header-bar .radio.titlebutton.button, + .radio.button.flat, .radio.sidebar-button.button, .header-bar .radio.titlebutton.button, .titlebar .radio.titlebutton.button { icon-shadow: none; } @@ -2803,7 +2850,7 @@ GtkSwitch { .radio:hover { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-hover.png"), url("assets/radio-unchecked-hover@2.png")); icon-shadow: 0 1px 0 white; } - .radio:hover.button.flat, .header-bar .radio.titlebutton.button:hover, + .radio:hover.button.flat, .radio.sidebar-button.button:hover, .header-bar .radio.titlebutton.button:hover, .titlebar .radio.titlebutton.button:hover { icon-shadow: none; } @@ -2814,7 +2861,7 @@ GtkSwitch { .radio:active { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-active.png"), url("assets/radio-unchecked-active@2.png")); icon-shadow: 0 1px 0 white; } - .radio:active.button.flat, .header-bar .radio.titlebutton.button:active, + .radio:active.button.flat, .radio.sidebar-button.button:active, .header-bar .radio.titlebutton.button:active, .titlebar .radio.titlebutton.button:active { icon-shadow: none; } @@ -2825,7 +2872,7 @@ GtkSwitch { .radio:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-insensitive.png"), url("assets/radio-unchecked-insensitive@2.png")); icon-shadow: 0 1px 0 white; } - .radio:insensitive.button.flat, .header-bar .radio.titlebutton.button:insensitive, + .radio:insensitive.button.flat, .radio.sidebar-button.button:insensitive, .header-bar .radio.titlebutton.button:insensitive, .titlebar .radio.titlebutton.button:insensitive { icon-shadow: none; } @@ -2836,7 +2883,7 @@ GtkSwitch { .radio:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-backdrop.png"), url("assets/radio-unchecked-backdrop@2.png")); icon-shadow: none; } - .radio:backdrop.button.flat, .header-bar .radio.titlebutton.button:backdrop, + .radio:backdrop.button.flat, .radio.sidebar-button.button:backdrop, .header-bar .radio.titlebutton.button:backdrop, .titlebar .radio.titlebutton.button:backdrop { icon-shadow: none; } @@ -2847,7 +2894,7 @@ GtkSwitch { .radio:backdrop:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-backdrop-insensitive.png"), url("assets/radio-unchecked-backdrop-insensitive@2.png")); icon-shadow: none; } - .radio:backdrop:insensitive.button.flat, .header-bar .radio.titlebutton.button:backdrop:insensitive, + .radio:backdrop:insensitive.button.flat, .radio.sidebar-button.button:backdrop:insensitive, .header-bar .radio.titlebutton.button:backdrop:insensitive, .titlebar .radio.titlebutton.button:backdrop:insensitive { icon-shadow: none; } @@ -2858,7 +2905,7 @@ GtkSwitch { .radio:inconsistent { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed.png"), url("assets/radio-mixed@2.png")); icon-shadow: 0 1px 0 white; } - .radio:inconsistent.button.flat, .header-bar .radio.titlebutton.button:inconsistent, + .radio:inconsistent.button.flat, .radio.sidebar-button.button:inconsistent, .header-bar .radio.titlebutton.button:inconsistent, .titlebar .radio.titlebutton.button:inconsistent { icon-shadow: none; } @@ -2869,7 +2916,7 @@ GtkSwitch { .radio:inconsistent:hover { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-hover.png"), url("assets/radio-mixed-hover@2.png")); icon-shadow: 0 1px 0 white; } - .radio:inconsistent:hover.button.flat, .header-bar .radio.titlebutton.button:inconsistent:hover, + .radio:inconsistent:hover.button.flat, .radio.sidebar-button.button:inconsistent:hover, .header-bar .radio.titlebutton.button:inconsistent:hover, .titlebar .radio.titlebutton.button:inconsistent:hover { icon-shadow: none; } @@ -2880,7 +2927,7 @@ GtkSwitch { .radio:inconsistent:selected { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-active.png"), url("assets/radio-mixed-active@2.png")); icon-shadow: 0 1px 0 white; } - .radio:inconsistent:selected.button.flat, .header-bar .radio.titlebutton.button:inconsistent:selected, + .radio:inconsistent:selected.button.flat, .radio.sidebar-button.button:inconsistent:selected, .header-bar .radio.titlebutton.button:inconsistent:selected, .titlebar .radio.titlebutton.button:inconsistent:selected { icon-shadow: none; } @@ -2891,7 +2938,7 @@ GtkSwitch { .radio:inconsistent:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-backdrop.png"), url("assets/radio-mixed-backdrop@2.png")); icon-shadow: none; } - .radio:inconsistent:backdrop.button.flat, .header-bar .radio.titlebutton.button:inconsistent:backdrop, + .radio:inconsistent:backdrop.button.flat, .radio.sidebar-button.button:inconsistent:backdrop, .header-bar .radio.titlebutton.button:inconsistent:backdrop, .titlebar .radio.titlebutton.button:inconsistent:backdrop { icon-shadow: none; } @@ -2902,7 +2949,7 @@ GtkSwitch { .radio:inconsistent:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-insensitive.png"), url("assets/radio-mixed-insensitive@2.png")); icon-shadow: 0 1px 0 white; } - .radio:inconsistent:insensitive.button.flat, .header-bar .radio.titlebutton.button:inconsistent:insensitive, + .radio:inconsistent:insensitive.button.flat, .radio.sidebar-button.button:inconsistent:insensitive, .header-bar .radio.titlebutton.button:inconsistent:insensitive, .titlebar .radio.titlebutton.button:inconsistent:insensitive { icon-shadow: none; } @@ -2913,7 +2960,7 @@ GtkSwitch { .radio:inconsistent:insensitive:backdrop { -gtk-icon-source: -gtk-scaled(url("assets/radio-mixed-backdrop-insensitive.png"), url("assets/radio-mixed-backdrop-insensitive@2.png")); icon-shadow: none; } - .radio:inconsistent:insensitive:backdrop.button.flat, .header-bar .radio.titlebutton.button:inconsistent:insensitive:backdrop, + .radio:inconsistent:insensitive:backdrop.button.flat, .radio.sidebar-button.button:inconsistent:insensitive:backdrop, .header-bar .radio.titlebutton.button:inconsistent:insensitive:backdrop, .titlebar .radio.titlebutton.button:inconsistent:insensitive:backdrop { icon-shadow: none; } @@ -2924,7 +2971,7 @@ GtkSwitch { .radio:checked { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked.png"), url("assets/radio-checked@2.png")); icon-shadow: 0 1px 0 white; } - .radio:checked.button.flat, .header-bar .radio.titlebutton.button:checked, + .radio:checked.button.flat, .radio.sidebar-button.button:checked, .header-bar .radio.titlebutton.button:checked, .titlebar .radio.titlebutton.button:checked { icon-shadow: none; } @@ -2935,7 +2982,7 @@ GtkSwitch { .radio:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-insensitive.png"), url("assets/radio-checked-insensitive@2.png")); icon-shadow: 0 1px 0 white; } - .radio:checked:insensitive.button.flat, .header-bar .radio.titlebutton.button:checked:insensitive, + .radio:checked:insensitive.button.flat, .radio.sidebar-button.button:checked:insensitive, .header-bar .radio.titlebutton.button:checked:insensitive, .titlebar .radio.titlebutton.button:checked:insensitive { icon-shadow: none; } @@ -2946,7 +2993,7 @@ GtkSwitch { .radio:checked:hover { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-hover.png"), url("assets/radio-checked-hover@2.png")); icon-shadow: 0 1px 0 white; } - .radio:checked:hover.button.flat, .header-bar .radio.titlebutton.button:checked:hover, + .radio:checked:hover.button.flat, .radio.sidebar-button.button:checked:hover, .header-bar .radio.titlebutton.button:checked:hover, .titlebar .radio.titlebutton.button:checked:hover { icon-shadow: none; } @@ -2957,7 +3004,7 @@ GtkSwitch { .radio:checked:active { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-active.png"), url("assets/radio-checked-active@2.png")); icon-shadow: 0 1px 0 white; } - .radio:checked:active.button.flat, .header-bar .radio.titlebutton.button:checked:active, + .radio:checked:active.button.flat, .radio.sidebar-button.button:checked:active, .header-bar .radio.titlebutton.button:checked:active, .titlebar .radio.titlebutton.button:checked:active { icon-shadow: none; } @@ -2968,7 +3015,7 @@ GtkSwitch { .radio:backdrop:checked { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-backdrop.png"), url("assets/radio-checked-backdrop@2.png")); icon-shadow: none; } - .radio:backdrop:checked.button.flat, .header-bar .radio.titlebutton.button:backdrop:checked, + .radio:backdrop:checked.button.flat, .radio.sidebar-button.button:backdrop:checked, .header-bar .radio.titlebutton.button:backdrop:checked, .titlebar .radio.titlebutton.button:backdrop:checked { icon-shadow: none; } @@ -2979,7 +3026,7 @@ GtkSwitch { .radio:backdrop:checked:insensitive { -gtk-icon-source: -gtk-scaled(url("assets/radio-checked-backdrop-insensitive.png"), url("assets/radio-checked-backdrop-insensitive@2.png")); icon-shadow: none; } - .radio:backdrop:checked:insensitive.button.flat, .header-bar .radio.titlebutton.button:backdrop:checked:insensitive, + .radio:backdrop:checked:insensitive.button.flat, .radio.sidebar-button.button:backdrop:checked:insensitive, .header-bar .radio.titlebutton.button:backdrop:checked:insensitive, .titlebar .radio.titlebutton.button:backdrop:checked:insensitive { icon-shadow: none; } @@ -3626,10 +3673,9 @@ GtkProgressBar { GtkScrolledWindow GtkViewport.frame { border-style: none; } -.separator, GtkPlacesSidebar.sidebar .view .separator, -GtkPlacesSidebar.sidebar .view .separator:backdrop { +.separator { color: rgba(0, 0, 0, 0.1); } - GtkFileChooserButton .separator.vertical, GtkFileChooserButton GtkPlacesSidebar.sidebar .view .vertical.separator, GtkPlacesSidebar.sidebar .view GtkFileChooserButton .vertical.separator, GtkFontButton .separator.vertical, GtkFontButton GtkPlacesSidebar.sidebar .view .vertical.separator, GtkPlacesSidebar.sidebar .view GtkFontButton .vertical.separator { + GtkFileChooserButton .separator.vertical, GtkFontButton .separator.vertical { -GtkWidget-wide-separators: true; } /********* @@ -3683,7 +3729,7 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { icon-shadow: 0 1px rgba(255, 255, 255, 0.76923); box-shadow: inset 0 1px white; border-color: #184472; } - .list-row:selected .button.flat, .list-row:selected .header-bar .titlebutton.button, .header-bar .list-row:selected .titlebutton.button, + .list-row:selected .button.flat, .list-row:selected .sidebar-button.button, .list-row:selected .header-bar .titlebutton.button, .header-bar .list-row:selected .titlebutton.button, .list-row:selected .titlebar .titlebutton.button, .titlebar .list-row:selected .titlebutton.button { border-color: transparent; @@ -3711,7 +3757,7 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { icon-shadow: 0 1px rgba(255, 255, 255, 0.76923); box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6); border-color: #184472; } - .list-row:selected .button:backdrop, .list-row:selected .button.flat:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, + .list-row:selected .button:backdrop, .list-row:selected .button.flat:backdrop, .list-row:selected .sidebar-button.button:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, .list-row:selected .titlebar .titlebutton.button:backdrop, .titlebar .list-row:selected .titlebutton.button:backdrop { color: #8e9192; @@ -3721,9 +3767,9 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); border-color: #184472; } - .list-row:selected .button:backdrop:active, .list-row:selected .button:backdrop:checked, .list-row:selected .button.flat:backdrop:active, .list-row:selected .header-bar .titlebutton.button:backdrop:active, .header-bar .list-row:selected .titlebutton.button:backdrop:active, + .list-row:selected .button:backdrop:active, .list-row:selected .button:backdrop:checked, .list-row:selected .button.flat:backdrop:active, .list-row:selected .sidebar-button.button:backdrop:active, .list-row:selected .header-bar .titlebutton.button:backdrop:active, .header-bar .list-row:selected .titlebutton.button:backdrop:active, .list-row:selected .titlebar .titlebutton.button:backdrop:active, - .titlebar .list-row:selected .titlebutton.button:backdrop:active, .list-row:selected .button.flat:backdrop:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:checked, + .titlebar .list-row:selected .titlebutton.button:backdrop:active, .list-row:selected .button.flat:backdrop:checked, .list-row:selected .sidebar-button.button:backdrop:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:checked, .list-row:selected .titlebar .titlebutton.button:backdrop:checked, .titlebar .list-row:selected .titlebutton.button:backdrop:checked { color: #8e9192; @@ -3731,7 +3777,7 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { background-image: linear-gradient(to bottom, #d5d5d5); box-shadow: inset 0 1px rgba(255, 255, 255, 0); border-color: #184472; } - .list-row:selected .button:backdrop:insensitive, .list-row:selected .button.flat:backdrop:insensitive, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive, + .list-row:selected .button:backdrop:insensitive, .list-row:selected .button.flat:backdrop:insensitive, .list-row:selected .sidebar-button.button:backdrop:insensitive, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive { color: #c7c7c7; @@ -3742,13 +3788,13 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { box-shadow: inset 0 1px rgba(255, 255, 255, 0); border-color: #184472; } .list-row:selected .button:backdrop:insensitive > .label, .list-row:selected .header-bar .button.titlebutton:backdrop:insensitive > .label, - .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive > .label, .list-row:selected .button.flat:backdrop:insensitive > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive > .label, + .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive > .label, .list-row:selected .button.flat:backdrop:insensitive > .label, .list-row:selected .sidebar-button.button:backdrop:insensitive > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive > .label, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive > .label, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive > .label { color: inherit; } - .list-row:selected .button:backdrop:insensitive:active, .list-row:selected .button:backdrop:insensitive:checked, .list-row:selected .button.flat:backdrop:insensitive:active, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active, + .list-row:selected .button:backdrop:insensitive:active, .list-row:selected .button:backdrop:insensitive:checked, .list-row:selected .button.flat:backdrop:insensitive:active, .list-row:selected .sidebar-button.button:backdrop:insensitive:active, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:active, - .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active, .list-row:selected .button.flat:backdrop:insensitive:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked, + .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active, .list-row:selected .button.flat:backdrop:insensitive:checked, .list-row:selected .sidebar-button.button:backdrop:insensitive:checked, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:checked, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:checked { color: #c7c7c7; @@ -3758,13 +3804,13 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { border-color: #184472; } .list-row:selected .button:backdrop:insensitive:active > .label, .list-row:selected .header-bar .button.titlebutton:backdrop:insensitive:active > .label, .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive:active > .label, .list-row:selected .button:backdrop:insensitive:checked > .label, .list-row:selected .header-bar .button.titlebutton:backdrop:insensitive:checked > .label, - .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .list-row:selected .button.flat:backdrop:insensitive:active > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, + .list-row:selected .titlebar .button.titlebutton:backdrop:insensitive:checked > .label, .list-row:selected .button.flat:backdrop:insensitive:active > .label, .list-row:selected .sidebar-button.button:backdrop:insensitive:active > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:active > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:active > .label, - .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, .list-row:selected .button.flat:backdrop:insensitive:checked > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked > .label, + .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:active > .label, .list-row:selected .button.flat:backdrop:insensitive:checked > .label, .list-row:selected .sidebar-button.button:backdrop:insensitive:checked > .label, .list-row:selected .header-bar .titlebutton.button:backdrop:insensitive:checked > .label, .header-bar .list-row:selected .titlebutton.button:backdrop:insensitive:checked > .label, .list-row:selected .titlebar .titlebutton.button:backdrop:insensitive:checked > .label, .titlebar .list-row:selected .titlebutton.button:backdrop:insensitive:checked > .label { color: inherit; } - .list-row:selected .button.flat:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, + .list-row:selected .button.flat:backdrop, .list-row:selected .sidebar-button.button:backdrop, .list-row:selected .header-bar .titlebutton.button:backdrop, .header-bar .list-row:selected .titlebutton.button:backdrop, .list-row:selected .titlebar .titlebutton.button:backdrop, .titlebar .list-row:selected .titlebutton.button:backdrop { border-color: transparent; @@ -3828,10 +3874,11 @@ GtkPlacesSidebar.sidebar .view .separator:backdrop { text-shadow: 0 1px black; icon-shadow: 0 1px black; outline-color: rgba(238, 238, 236, 0.3); } - .app-notification .button.flat, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, + .app-notification .button.flat, .app-notification .sidebar-button.button, .app-notification .header-bar .titlebutton.button, .header-bar .app-notification .titlebutton.button, .app-notification .titlebar .titlebutton.button, .titlebar .app-notification .titlebutton.button, .app-notification.frame .button.flat, + .app-notification.frame .sidebar-button.button, .app-notification.frame .header-bar .titlebutton.button, .header-bar .app-notification.frame .titlebutton.button, .app-notification.frame .titlebar .titlebutton.button, @@ -4119,31 +4166,44 @@ GtkFileChooserDialog .dialog-action-box { ***********/ .sidebar { border: none; - background-color: #fafafa; } + background-color: #f6f6f6; } .sidebar:backdrop { - background-color: #fafafa; } - -GtkPlacesSidebar.sidebar .view { - color: #2e3436; - background-color: transparent; } - GtkPlacesSidebar.sidebar .view .image { - color: #6b6f71; } - GtkPlacesSidebar.sidebar .view .image:selected { - color: #edf4fb; } - GtkPlacesSidebar.sidebar .view .image:selected:backdrop { - color: #edf4fb; } - GtkPlacesSidebar.sidebar .view .image:insensitive { - color: #aeb1b1; } - GtkPlacesSidebar.sidebar .view .image:backdrop { - color: #aeb1b1; } - GtkPlacesSidebar.sidebar .view .image:backdrop:insensitive { - color: #d6d6d6; } - GtkPlacesSidebar.sidebar .view:insensitive { - color: #8e9192; } - GtkPlacesSidebar.sidebar .view:backdrop { - color: #8e9192; } - GtkPlacesSidebar.sidebar .view:backdrop:insensitive { - color: #c7c7c7; } + background-color: #f2f2f2; } + +.list-row { + padding: 0px; } +GtkSidebarRow .sidebar-revealer { + padding: 4px 14px 4px 12px; } +GtkSidebarRow .sidebar-icon { + padding-right: 8px; + opacity: 0.7; } +GtkSidebarRow .sidebar-label { + padding-right: 2px; } + +GtkPlacesSidebar.sidebar .sidebar-placeholder-row { + border: solid 1px #4a90d9; } +GtkPlacesSidebar.sidebar .sidebar-new-bookmark-row { + background-color: #d9d9d9; } +.list-row.button:hover { + background-color: #dadbdb; } +.sidebar-button.button, .header-bar .sidebar-button.button.titlebutton, +.titlebar .sidebar-button.button.titlebutton { + border-radius: 100%; + outline-radius: 100%; + /* &:hover:not(:active):not(:backdrop) { + background-image: none; + background-color: gtkalpha(currentColor, 0.1); + border-color: transparentize($borders_color, 1); + box-shadow: inset 0 0 transparentize(white, 1); + icon-shadow: none; + } */ } + .sidebar-button.button.image-button, .header-bar .sidebar-button.titlebutton.button, + .titlebar .sidebar-button.titlebutton.button { + padding: 5px; } + .sidebar-button.button:not(:hover):not(:active) > GtkImage, .header-bar .sidebar-button.button.titlebutton:not(:hover):not(:active) > GtkImage, + .titlebar .sidebar-button.button.titlebutton:not(:hover):not(:active) > GtkImage, .sidebar-button.button:backdrop > GtkImage, .header-bar .sidebar-button.button.titlebutton:backdrop > GtkImage, + .titlebar .sidebar-button.button.titlebutton:backdrop > GtkImage { + opacity: 0.7; } .sidebar-item { padding: 10px 4px; } @@ -4500,13 +4560,13 @@ GtkVolumeButton.button, .header-bar GtkVolumeButton.button.titlebutton, .titlebar.selection-mode .titlebutton.button:backdrop { icon-shadow: none; } -.view:selected, GtkCalendar:selected, .label:selected, .label:selected:focus, .label:selected:hover, .grid-child:selected, .entry:selected, .entry:selected:focus, .menuitem.button.flat:selected, .header-bar .menuitem.titlebutton.button:selected, -.titlebar .menuitem.titlebutton.button:selected, .list-row:selected, .sidebar:selected, GtkPlacesSidebar.sidebar .view:selected, GtkPlacesSidebar.sidebar GtkCalendar:selected { +.view:selected, GtkCalendar:selected, .label:selected, .label:selected:focus, .label:selected:hover, .grid-child:selected, .entry:selected, .entry:selected:focus, .menuitem.button.flat:selected, .menuitem.sidebar-button.button:selected, .header-bar .menuitem.titlebutton.button:selected, +.titlebar .menuitem.titlebutton.button:selected, .list-row:selected, .sidebar:selected { background-color: #4a90d9; color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); } - .view:backdrop:selected, GtkCalendar:backdrop:selected, .label:backdrop:selected, .grid-child:backdrop:selected, .entry:backdrop:selected, .menuitem.button.flat:backdrop:selected, .header-bar .menuitem.titlebutton.button:backdrop:selected, - .titlebar .menuitem.titlebutton.button:backdrop:selected, .list-row:backdrop:selected, .sidebar:backdrop:selected, GtkPlacesSidebar.sidebar .view:backdrop:selected, GtkPlacesSidebar.sidebar GtkCalendar:backdrop:selected { + .view:backdrop:selected, GtkCalendar:backdrop:selected, .label:backdrop:selected, .grid-child:backdrop:selected, .entry:backdrop:selected, .menuitem.button.flat:backdrop:selected, .menuitem.sidebar-button.button:backdrop:selected, .header-bar .menuitem.titlebutton.button:backdrop:selected, + .titlebar .menuitem.titlebutton.button:backdrop:selected, .list-row:backdrop:selected, .sidebar:backdrop:selected { color: #ffffff; } /* Decouple the font of context menus from their entry/textview */ diff --git a/gtk/ui/gtksidebarrow.ui b/gtk/ui/gtksidebarrow.ui new file mode 100644 index 0000000000..ca497673f3 --- /dev/null +++ b/gtk/ui/gtksidebarrow.ui @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <template class="GtkSidebarRow" parent="GtkListBoxRow"> + <property name="visible">True</property> + <property name="margin-top">1</property> + <property name="margin-bottom">1</property> + <child> + <object class="GtkRevealer" id="revealer"> + <property name="visible">True</property> + <property name="reveal-child">True</property> + <signal name="notify::child-revealed" handler="on_child_revealed"/> + <style> + <class name="sidebar-revealer"/> + </style> + <child> + <object class="GtkEventBox" id="event_box"> + <property name="visible">True</property> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <child> + <object class="GtkImage" id="icon_widget"> + <property name="visible">True</property> + <style> + <class name="sidebar-icon"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_widget"> + <property name="visible">True</property> + <style> + <class name="sidebar-label"/> + </style> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="eject_button"> + <property name="visible">True</property> + <property name="hexpand">True</property> + <property name="halign">end</property> + <property name="valign">center</property> + <property name="margin-start">4px</property> + <property name="no-show-all">True</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="icon_name">media-eject-symbolic</property> + <property name="icon_size">1</property> + </object> + </child> + <style> + <class name="image-button"/> + <class name="sidebar-button"/> + </style> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + </child> + </template> + <!-- We need it to not make the row smaller when the eject button is hidden --> + <object class="GtkSizeGroup"> + <property name="mode">GTK_SIZE_GROUP_VERTICAL</property> + <widgets> + <widget name="eject_button"/> + <widget name="label_widget"/> + <widget name="icon_widget"/> + </widgets> + </object> +</interface> |