[gtk+/wip/baedert/drawing: 364/396] popover: Add a contents node
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/drawing: 364/396] popover: Add a contents node
- Date: Wed, 19 Jul 2017 11:40:59 +0000 (UTC)
commit 834ac5aa2d79ec6369704a882cc5c2d1a866ce06
Author: Timm Bäder <mail baedert org>
Date: Sat Jul 8 12:04:44 2017 +0200
popover: Add a contents node
Remove the special case in gtkwidget.c where we didn't draw any css
background/border for popovers. Instead, rely on themes to not style the
popover node and add a contents gizmo that gets the actual css styling.
We then requeste enough space for the popover to draw both the contents
and the arrow on the side.
gtk/gtkpopover.c | 392 +++++++++++++++++++-----------
gtk/gtkpopovermenu.c | 12 +-
gtk/gtkpopoverprivate.h | 2 +
gtk/theme/Adwaita/_common.scss | 22 ++-
gtk/theme/Adwaita/gtk-contained-dark.css | 44 ++--
gtk/theme/Adwaita/gtk-contained.css | 44 ++--
6 files changed, 319 insertions(+), 197 deletions(-)
---
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 43d41a6..b1ca46a 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -73,15 +73,33 @@
*
* # CSS nodes
*
- * GtkPopover has a single css node called popover. It always gets the
- * .background style class and it gets the .menu style class if it is
- * menu-like (e.g. #GtkPopoverMenu or created using gtk_popover_new_from_model().
+ * |[<!-- language="plain" -->
+ * popover
+ * ├── arrow
+ * ╰── contents.background[.menu]
+ * ╰── <child>
+ * ]|
+ *
+ * The contents child node always gets the .background style class and it
+ * gets the .menu style class if the popover is menu-like (e.g. #GtkPopoverMenu
+ * or created using gtk_popover_new_from_model().
*
* Particular uses of GtkPopover, such as touch selection popups
* or magnifiers in #GtkEntry or #GtkTextView get style classes
* like .touch-selection or .magnifier to differentiate from
* plain popovers.
*
+ * When styling a popover directly, the popover node should usually not have any
+ * background.
+ *
+ * Note that, in order to accomplish appropriate arrow visuals, #GtkPopover uses
+ * custom drawing for the arrow node. This makes it possible for the arrow to change
+ * its shape dynamically, but it also limits the possibilities of styling it using CSS.
+ * In particular, the arrow gets drawn over the content node's border so they look
+ * like one shape, which means that the border-width of the content node and the arrow
+ * node should be the same. The arrow also does not support any border shape other than
+ * solid, no border-radius, only one border width (border-bottom-width is used) and no box-shadow.
+ *
* Since: 3.12
*/
@@ -113,6 +131,8 @@
#include "gtkstylecontextprivate.h"
#include "gtkprogresstrackerprivate.h"
#include "gtksettingsprivate.h"
+#include "gtkgizmoprivate.h"
+#include "gtkcssnodeprivate.h"
#include "gsk/gskroundedrectprivate.h"
@@ -151,6 +171,8 @@ enum {
struct _GtkPopoverPrivate
{
GtkWidget *widget;
+ GtkWidget *contents_widget;
+ GtkCssNode *arrow_node;
GtkWindow *window;
GtkWidget *prev_focus_widget;
GtkWidget *default_widget;
@@ -193,7 +215,6 @@ static void gtk_popover_update_relative_to (GtkPopover *popover,
GtkWidget *relative_to);
static void gtk_popover_set_state (GtkPopover *popover,
guint state);
-static void gtk_popover_invalidate_borders (GtkPopover *popover);
static void gtk_popover_apply_modality (GtkPopover *popover,
gboolean modal);
@@ -202,6 +223,49 @@ static void gtk_popover_set_scrollable_full (GtkPopover *popover,
G_DEFINE_TYPE_WITH_PRIVATE (GtkPopover, gtk_popover, GTK_TYPE_BIN)
+
+static void
+measure_contents (GtkGizmo *gizmo,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ GtkPopover *popover = GTK_POPOVER (gtk_widget_get_parent (GTK_WIDGET (gizmo)));
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (popover));
+
+ if (child)
+ gtk_widget_measure (child, orientation, for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
+}
+
+static void
+allocate_contents (GtkGizmo *gizmo,
+ const GtkAllocation *allocation,
+ int baseline,
+ GtkAllocation *out_clip)
+{
+ GtkPopover *popover = GTK_POPOVER (gtk_widget_get_parent (GTK_WIDGET (gizmo)));
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (popover));
+
+ if (child)
+ gtk_widget_size_allocate (child, (GtkAllocation*)allocation);
+}
+
+static void
+node_style_changed_cb (GtkCssNode *node,
+ GtkCssStyleChange *change,
+ GtkWidget *widget)
+{
+ if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_CLIP))
+ gtk_widget_queue_resize (widget);
+ else
+ gtk_widget_queue_draw (widget);
+}
+
static void
gtk_popover_init (GtkPopover *popover)
{
@@ -218,7 +282,23 @@ gtk_popover_init (GtkPopover *popover)
popover->priv->preferred_position = GTK_POS_TOP;
popover->priv->constraint = GTK_POPOVER_CONSTRAINT_WINDOW;
- context = gtk_widget_get_style_context (GTK_WIDGET (popover));
+ popover->priv->arrow_node = gtk_css_node_new ();
+ gtk_css_node_set_name (popover->priv->arrow_node, I_("arrow"));
+ gtk_css_node_set_parent (popover->priv->arrow_node, gtk_widget_get_css_node (widget));
+ gtk_css_node_set_state (popover->priv->arrow_node,
+ gtk_css_node_get_state (gtk_widget_get_css_node (widget)));
+ g_signal_connect_object (popover->priv->arrow_node, "style-changed",
+ G_CALLBACK (node_style_changed_cb), popover, 0);
+ g_object_unref (popover->priv->arrow_node);
+
+ popover->priv->contents_widget = gtk_gizmo_new ("contents",
+ measure_contents,
+ allocate_contents,
+ NULL);
+
+ gtk_widget_set_parent (popover->priv->contents_widget, widget);
+
+ context = gtk_widget_get_style_context (popover->priv->contents_widget);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BACKGROUND);
}
@@ -309,7 +389,7 @@ gtk_popover_hide_internal (GtkPopover *popover)
if (gtk_widget_get_realized (widget))
{
cairo_region_t *region = cairo_region_create ();
- gdk_window_input_shape_combine_region (gtk_widget_get_parent_window (widget),
+ gdk_window_input_shape_combine_region (gtk_widget_get_window (widget),
region, 0, 0);
cairo_region_destroy (region);
}
@@ -369,6 +449,21 @@ gtk_popover_dispose (GObject *object)
g_clear_object (&priv->default_widget);
+ if (priv->contents_widget)
+ {
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (popover));
+
+ if (child)
+ {
+ /* Parent is content_widget! */
+ gtk_widget_unparent (child);
+ _gtk_bin_set_child (GTK_BIN (popover), NULL);
+ }
+
+ gtk_widget_unparent (priv->contents_widget);
+ priv->contents_widget = NULL;
+ }
+
G_OBJECT_CLASS (gtk_popover_parent_class)->dispose (object);
}
@@ -768,19 +863,19 @@ gtk_popover_get_gap_coords (GtkPopover *popover,
if (pos == GTK_POS_BOTTOM || pos == GTK_POS_RIGHT)
{
tip = ((pos == GTK_POS_BOTTOM) ? border.top + widget_margin.top : border.left + widget_margin.left);
- base = tip + TAIL_HEIGHT;
+ base = tip;
gap_side = (priv->final_position == GTK_POS_BOTTOM) ? GTK_POS_TOP : GTK_POS_LEFT;
}
else if (pos == GTK_POS_TOP)
{
- base = allocation.height - TAIL_HEIGHT - border.bottom - widget_margin.bottom;
- tip = base + TAIL_HEIGHT;
+ base = allocation.height -border.bottom - widget_margin.bottom;
+ tip = base;
gap_side = GTK_POS_BOTTOM;
}
else if (pos == GTK_POS_LEFT)
{
- base = allocation.width - TAIL_HEIGHT - border.right - widget_margin.right;
- tip = base + TAIL_HEIGHT;
+ base = allocation.width - border.right - widget_margin.right;
+ tip = base;
gap_side = GTK_POS_RIGHT;
}
else
@@ -790,16 +885,16 @@ gtk_popover_get_gap_coords (GtkPopover *popover,
{
tip_pos = rect.x + (rect.width / 2) + widget_margin.left;
initial_x = CLAMP (tip_pos - TAIL_GAP_WIDTH / 2,
- border_radius + margin.left + TAIL_HEIGHT,
- allocation.width - TAIL_GAP_WIDTH - margin.right - border_radius - TAIL_HEIGHT);
+ border_radius + margin.left,
+ allocation.width - TAIL_GAP_WIDTH - margin.right - border_radius);
initial_y = base;
tip_x = CLAMP (tip_pos, 0, allocation.width);
tip_y = tip;
final_x = CLAMP (tip_pos + TAIL_GAP_WIDTH / 2,
- border_radius + margin.left + TAIL_GAP_WIDTH + TAIL_HEIGHT,
- allocation.width - margin.right - border_radius - TAIL_HEIGHT);
+ border_radius + margin.left + TAIL_GAP_WIDTH,
+ allocation.width - margin.right - border_radius);
final_y = base;
}
else
@@ -808,16 +903,16 @@ gtk_popover_get_gap_coords (GtkPopover *popover,
initial_x = base;
initial_y = CLAMP (tip_pos - TAIL_GAP_WIDTH / 2,
- border_radius + margin.top + TAIL_HEIGHT,
- allocation.height - TAIL_GAP_WIDTH - margin.bottom - border_radius - TAIL_HEIGHT);
+ border_radius + margin.top,
+ allocation.height - TAIL_GAP_WIDTH - margin.bottom - border_radius);
tip_x = tip;
tip_y = CLAMP (tip_pos, 0, allocation.height);
final_x = base;
final_y = CLAMP (tip_pos + TAIL_GAP_WIDTH / 2,
- border_radius + margin.top + TAIL_GAP_WIDTH + TAIL_HEIGHT,
- allocation.height - margin.right - border_radius - TAIL_HEIGHT);
+ border_radius + margin.top + TAIL_GAP_WIDTH,
+ allocation.height - margin.right - border_radius);
}
if (initial_x_out)
@@ -891,13 +986,19 @@ static void
gtk_popover_apply_tail_path (GtkPopover *popover,
cairo_t *cr)
{
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
gint initial_x, initial_y;
gint tip_x, tip_y;
gint final_x, final_y;
+ GtkStyleContext *context;
+ GtkBorder border;
if (!popover->priv->widget)
return;
+ context = gtk_widget_get_style_context (popover->priv->contents_widget);
+ gtk_style_context_get_border (context, &border);
+
cairo_set_line_width (cr, 1);
gtk_popover_get_gap_coords (popover,
&initial_x, &initial_y,
@@ -905,9 +1006,30 @@ gtk_popover_apply_tail_path (GtkPopover *popover,
&final_x, &final_y,
NULL);
- cairo_move_to (cr, initial_x, initial_y - TAIL_HEIGHT);
- cairo_line_to (cr, tip_x, tip_y - TAIL_HEIGHT);
- cairo_line_to (cr, final_x, final_y - TAIL_HEIGHT);
+
+ switch (priv->current_position)
+ {
+ case GTK_POS_BOTTOM:
+ initial_y += TAIL_HEIGHT + border.top;
+ final_y += TAIL_HEIGHT + border.top;
+ break;
+ case GTK_POS_LEFT:
+ initial_x -= TAIL_HEIGHT + border.left;
+ final_x -= TAIL_HEIGHT + border.left;
+ break;
+ case GTK_POS_RIGHT:
+ initial_x += TAIL_HEIGHT + border.left;
+ final_x += TAIL_HEIGHT + border.left;
+ break;
+ case GTK_POS_TOP:
+ initial_y -= TAIL_HEIGHT + border.top;
+ final_y -= TAIL_HEIGHT + border.top;
+ break;
+ }
+
+ cairo_move_to (cr, initial_x, initial_y);
+ cairo_line_to (cr, tip_x, tip_y);
+ cairo_line_to (cr, final_x, final_y);
}
static void
@@ -1104,92 +1226,59 @@ gtk_popover_update_position (GtkPopover *popover)
gtk_popover_update_shape (popover);
priv->current_position = priv->final_position;
- gtk_popover_invalidate_borders (popover);
}
_gtk_popover_update_child_visible (popover);
}
+GtkWidget *
+gtk_popover_get_contents_widget (GtkPopover *popover)
+{
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
+
+ return priv->contents_widget;
+}
+
static void
gtk_popover_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
GtkPopover *popover = GTK_POPOVER (widget);
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkStyleContext *context;
- GtkAllocation clip;
- GtkWidget *child;
GtkBorder border;
GdkRGBA border_color;
- int rect_x, rect_y, rect_w, rect_h;
- gint initial_x, initial_y, final_x, final_y;
- gint gap_start, gap_end;
- GtkPositionType gap_side;
graphene_rect_t bounds;
cairo_t *cr;
int width, height;
- context = gtk_widget_get_style_context (widget);
-
- gtk_widget_get_clip (widget, &clip);
-
- gtk_style_context_get_border (context, &border);
- gtk_popover_get_rect_coords (popover,
- &rect_x, &rect_y,
- &rect_w, &rect_h);
+ /* Draw the child first so we can draw the arrow (partially) over it */
+ gtk_widget_snapshot_child (widget, priv->contents_widget, snapshot);
gtk_widget_get_content_size (widget, &width, &height);
graphene_rect_init (&bounds,
- - TAIL_HEIGHT, -TAIL_HEIGHT,
- clip.width, clip.height);
+ 0, 0,
+ width, height);
cr = gtk_snapshot_append_cairo (snapshot,
&bounds,
"Popover");
- /* Render the rect background */
- gtk_render_background (context, cr,
- 0, 0, width, height);
-
- if (popover->priv->widget)
- {
- gtk_popover_get_gap_coords (popover,
- &initial_x, &initial_y,
- NULL, NULL,
- &final_x, &final_y,
- &gap_side);
-
- if (POS_IS_VERTICAL (gap_side))
- {
- gap_start = initial_x - rect_x;
- gap_end = final_x - rect_x;
- }
- else
- {
- gap_start = initial_y - rect_y;
- gap_end = final_y - rect_y;
- }
-
- /* Now render the frame, without the gap for the arrow tip */
- gtk_render_frame_gap (context, cr,
- 0, 0, width, height,
- gap_side,
- gap_start, gap_end);
- }
- else
- {
- gtk_render_frame (context, cr,
- 0, 0, width, height);
- }
/* Clip to the arrow shape */
cairo_save (cr);
gtk_popover_apply_tail_path (popover, cr);
+
cairo_clip (cr);
+ context = gtk_widget_get_style_context (widget);
+ gtk_style_context_save_to_node (context, priv->arrow_node);
+ gtk_style_context_get_border (context, &border);
+
/* Render the arrow background */
gtk_render_background (context, cr,
- - TAIL_HEIGHT, - TAIL_HEIGHT,
- width + (TAIL_HEIGHT * 2), height + (TAIL_HEIGHT * 2));
+ 0, 0,
+ width, height);
/* Render the border of the arrow tip */
if (border.bottom > 0)
@@ -1205,30 +1294,11 @@ G_GNUC_END_IGNORE_DEPRECATIONS
cairo_stroke (cr);
}
+ cairo_restore (cr);
/* We're done */
cairo_destroy (cr);
- child = gtk_bin_get_child (GTK_BIN (widget));
-
- if (child)
- gtk_widget_snapshot_child (widget, child, snapshot);
-}
-
-static void
-get_padding_and_border (GtkWidget *widget,
- GtkBorder *border)
-{
- GtkStyleContext *context;
- GtkBorder tmp;
-
- context = gtk_widget_get_style_context (widget);
-
- gtk_style_context_get_padding (context, border);
- gtk_style_context_get_border (context, &tmp);
- border->top += tmp.top;
- border->right += tmp.right;
- border->bottom += tmp.bottom;
- border->left += tmp.left;
+ gtk_style_context_restore (context);
}
static gint
@@ -1272,6 +1342,7 @@ gtk_popover_measure (GtkWidget *widget,
int *natural_baseline)
{
GtkPopover *popover = GTK_POPOVER (widget);
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
int minimal_size;
@@ -1283,51 +1354,15 @@ gtk_popover_measure (GtkWidget *widget,
if (for_size >= 0)
for_size -= TAIL_HEIGHT;
- gtk_widget_measure (child, orientation, for_size, minimum, natural, NULL, NULL);
+ gtk_widget_measure (priv->contents_widget, orientation, for_size, minimum, natural, NULL, NULL);
}
minimal_size = get_minimal_size (popover, orientation);
*minimum = MAX (*minimum, minimal_size);
*natural = MAX (*natural, minimal_size);
-}
-static void
-gtk_popover_invalidate_borders (GtkPopover *popover)
-{
- GtkAllocation allocation;
- GtkBorder border;
-
- gtk_widget_get_allocation (GTK_WIDGET (popover), &allocation);
- get_padding_and_border (GTK_WIDGET (popover), &border);
-
- gtk_widget_queue_draw_area (GTK_WIDGET (popover), 0, 0, border.left + TAIL_HEIGHT, allocation.height);
- gtk_widget_queue_draw_area (GTK_WIDGET (popover), 0, 0, allocation.width, border.top + TAIL_HEIGHT);
- gtk_widget_queue_draw_area (GTK_WIDGET (popover), 0, allocation.height - border.bottom - TAIL_HEIGHT,
- allocation.width, border.bottom + TAIL_HEIGHT);
- gtk_widget_queue_draw_area (GTK_WIDGET (popover), allocation.width - border.right - TAIL_HEIGHT,
- 0, border.right + TAIL_HEIGHT, allocation.height);
-}
-
-static void
-gtk_popover_check_invalidate_borders (GtkPopover *popover)
-{
- GtkPopoverPrivate *priv = popover->priv;
- GtkPositionType gap_side;
- gint tip_x, tip_y;
-
- if (!priv->widget)
- return;
-
- gtk_popover_get_gap_coords (popover, NULL, NULL,
- &tip_x, &tip_y, NULL, NULL,
- &gap_side);
-
- if (tip_x != priv->tip_x || tip_y != priv->tip_y)
- {
- priv->tip_x = tip_x;
- priv->tip_y = tip_y;
- gtk_popover_invalidate_borders (popover);
- }
+ *minimum += TAIL_HEIGHT;
+ *natural += TAIL_HEIGHT;
}
static void
@@ -1335,18 +1370,41 @@ gtk_popover_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkPopover *popover = GTK_POPOVER (widget);
- GtkWidget *child;
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkAllocation child_clip;
GtkAllocation clip = *allocation;
+ GtkAllocation child_alloc = *allocation;
- child = gtk_bin_get_child (GTK_BIN (widget));
- if (child)
+ /* Note that we in measure() we add TAIL_HEIGHT in both directions, regardless
+ * of the popovers position. This is to ensure that we get enough space
+ * even priv->current_position changes between measure and size-allocate.
+ */
+ switch (priv->current_position)
{
- gtk_widget_size_allocate (child, allocation);
- gtk_widget_get_clip (child, &child_clip);
- gdk_rectangle_union (&clip, &child_clip, &clip);
+ case GTK_POS_TOP:
+ child_alloc.height -= TAIL_HEIGHT;
+ child_alloc.x += TAIL_HEIGHT / 2;
+ break;
+ case GTK_POS_LEFT:
+ child_alloc.width -= TAIL_HEIGHT;
+ child_alloc.y += TAIL_HEIGHT / 2;
+ break;
+ case GTK_POS_BOTTOM:
+ child_alloc.y += TAIL_HEIGHT;
+ child_alloc.height -= TAIL_HEIGHT;
+ child_alloc.x += TAIL_HEIGHT / 2;
+ break;
+ case GTK_POS_RIGHT:
+ child_alloc.x += TAIL_HEIGHT;
+ child_alloc.width -= TAIL_HEIGHT;
+ child_alloc.y += TAIL_HEIGHT / 2;
+ break;
}
+ gtk_widget_size_allocate (priv->contents_widget, &child_alloc);
+ gtk_widget_get_clip (priv->contents_widget, &child_clip);
+ gdk_rectangle_union (&clip, &child_clip, &clip);
+
if (gtk_widget_get_realized (widget))
{
GtkAllocation a;
@@ -1356,9 +1414,6 @@ gtk_popover_size_allocate (GtkWidget *widget,
gtk_popover_update_shape (popover);
}
- if (gtk_widget_is_drawable (widget))
- gtk_popover_check_invalidate_borders (popover);
-
gtk_widget_set_clip (widget, &clip);
}
@@ -1495,7 +1550,7 @@ gtk_popover_show (GtkWidget *widget)
priv->state = STATE_SHOWN;
if (gtk_widget_get_realized (widget))
- gdk_window_input_shape_combine_region (gtk_widget_get_parent_window (widget),
+ gdk_window_input_shape_combine_region (gtk_widget_get_window (widget),
NULL, 0, 0);
}
@@ -1517,10 +1572,47 @@ gtk_popover_hide (GtkWidget *widget)
}
static void
+gtk_popover_add (GtkContainer *container,
+ GtkWidget *child)
+{
+ GtkPopover *popover = GTK_POPOVER (container);
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
+
+ _gtk_bin_set_child (GTK_BIN (popover), child);
+
+ gtk_widget_set_parent (child, priv->contents_widget);
+}
+
+static void
+gtk_popover_remove (GtkContainer *container,
+ GtkWidget *child)
+{
+ GtkPopover *popover = GTK_POPOVER (container);
+
+ _gtk_bin_set_child (GTK_BIN (popover), NULL);
+ gtk_widget_unparent (child);
+}
+
+static void
+gtk_popover_state_flags_changed (GtkWidget *widget,
+ GtkStateFlags previous_state)
+{
+ GtkPopover *popover = GTK_POPOVER (widget);
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
+ GtkStateFlags state;
+
+ state = gtk_widget_get_state_flags (widget);
+ gtk_css_node_set_state (priv->arrow_node, state);
+
+ GTK_WIDGET_CLASS (gtk_popover_parent_class)->state_flags_changed (widget, previous_state);
+}
+
+static void
gtk_popover_class_init (GtkPopoverClass *klass)
{
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
object_class->set_property = gtk_popover_set_property;
object_class->get_property = gtk_popover_get_property;
@@ -1540,6 +1632,10 @@ gtk_popover_class_init (GtkPopoverClass *klass)
widget_class->focus = gtk_popover_focus;
widget_class->show = gtk_popover_show;
widget_class->hide = gtk_popover_hide;
+ widget_class->state_flags_changed = gtk_popover_state_flags_changed;
+
+ container_class->add = gtk_popover_add;
+ container_class->remove = gtk_popover_remove;
/**
* GtkPopover:relative-to:
@@ -2101,7 +2197,7 @@ gtk_popover_get_pointing_to (GtkPopover *popover,
*rect = priv->pointing_to;
else if (priv->widget)
{
- gtk_widget_get_allocation (priv->widget, rect);
+ gtk_widget_get_own_allocation (priv->widget, rect);
rect->x = rect->y = 0;
}
@@ -2260,7 +2356,7 @@ gtk_popover_bind_model (GtkPopover *popover,
if (child)
gtk_widget_destroy (child);
- style_context = gtk_widget_get_style_context (GTK_WIDGET (popover));
+ style_context = gtk_widget_get_style_context (popover->priv->contents_widget);
if (model)
{
diff --git a/gtk/gtkpopovermenu.c b/gtk/gtkpopovermenu.c
index e803a61..1df141f 100644
--- a/gtk/gtkpopovermenu.c
+++ b/gtk/gtkpopovermenu.c
@@ -20,6 +20,7 @@
#include "gtkstack.h"
#include "gtkstylecontext.h"
#include "gtkintl.h"
+#include "gtkpopoverprivate.h"
/**
@@ -96,9 +97,12 @@
* </object>
* ]|
*
- * Just like normal popovers created using gtk_popover_new_from_model,
- * #GtkPopoverMenu instances have a single css node called "popover"
- * and get the .menu style class.
+ * # CSS Nodes
+ *
+ * #GtkPopoverMenu is just a subclass of #GtkPopover that adds
+ * custom content to it, therefore it has the same CSS nodes.
+ * It is one of the cases that add a .menu style class to the
+ * popover's contents node.
*/
struct _GtkPopoverMenu
@@ -140,7 +144,7 @@ gtk_popover_menu_init (GtkPopoverMenu *popover)
g_signal_connect (stack, "notify::visible-child-name",
G_CALLBACK (visible_submenu_changed), popover);
- style_context = gtk_widget_get_style_context (GTK_WIDGET (popover));
+ style_context = gtk_widget_get_style_context (gtk_popover_get_contents_widget (GTK_POPOVER (popover)));
gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_MENU);
}
diff --git a/gtk/gtkpopoverprivate.h b/gtk/gtkpopoverprivate.h
index ab61eb9..fe24a5d 100644
--- a/gtk/gtkpopoverprivate.h
+++ b/gtk/gtkpopoverprivate.h
@@ -24,6 +24,8 @@ G_BEGIN_DECLS
void gtk_popover_update_position (GtkPopover *popover);
+GtkWidget *gtk_popover_get_contents_widget (GtkPopover *popover);
+
G_END_DECLS
#endif /* __GTK_POPOVER_PRIVATE_H__ */
diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss
index 56ad0e6..b604c14 100644
--- a/gtk/theme/Adwaita/_common.scss
+++ b/gtk/theme/Adwaita/_common.scss
@@ -2021,14 +2021,27 @@ menuitem {
* Popovers *
***************/
-popover.background {
- padding: 2px;
- border-radius: 5px;
+popover>arrow {
background-color: $popover_bg_color;
+ border: 1px solid $borders_color;
+}
- .csd &, & { border: 1px solid $borders_color; }
+popover>contents.menu {
+ padding: 8px;
+ background-color: white;
+ margin: 0px;
+}
+popover>contents {
+ padding: 2px;
+ margin: 0px;
+}
+
+popover>contents.background {
+ border-radius: 5px;
+ background-color: $popover_bg_color;
box-shadow: 0 1px 2px transparentize(black, 0.7);
+ .csd &, & { border: 1px solid $borders_color; }
&:backdrop {
background-color: $backdrop_bg_color;
@@ -2060,7 +2073,6 @@ popover.background {
list separator { margin: 0px; }
}
-popover.menu { padding: 8px; }
/*************
* Notebooks *
diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css
index 5fa218c..826937d 100644
--- a/gtk/theme/Adwaita/gtk-contained-dark.css
+++ b/gtk/theme/Adwaita/gtk-contained-dark.css
@@ -70,9 +70,9 @@ assistant .sidebar label { padding: 6px 12px; }
assistant .sidebar label.highlight { background-color: #585d5e; }
-.csd popover.background.touch-selection, .csd popover.background.magnifier,
popover.background.touch-selection, popover.background.magnifier, .csd popover.background.osd,
popover.background.osd, .app-notification, .app-notification.frame, .osd .scale-popup, .osd { color: #eeeeec;
border: none; background-color: rgba(28, 31, 32, 0.7); background-clip: padding-box; text-shadow: 0 1px
black; -gtk-icon-shadow: 0 1px black; }
+.csd popover > contents.background.touch-selection, .csd popover > contents.background.magnifier, popover >
contents.background.touch-selection, popover > contents.background.magnifier, .csd popover >
contents.background.osd, popover > contents.background.osd, .app-notification, .app-notification.frame, .osd
.scale-popup, .osd { color: #eeeeec; border: none; background-color: rgba(28, 31, 32, 0.7); background-clip:
padding-box; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
-popover.background.touch-selection:backdrop, popover.background.magnifier:backdrop,
popover.background.osd:backdrop, .app-notification:backdrop, .osd .scale-popup:backdrop, .osd:backdrop {
text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection:backdrop, .csd popover >
contents.background.magnifier:backdrop, popover > contents.background.touch-selection:backdrop, popover >
contents.background.magnifier:backdrop, .csd popover > contents.background.osd:backdrop, popover >
contents.background.osd:backdrop, .app-notification:backdrop, .osd .scale-popup:backdrop, .osd:backdrop {
text-shadow: none; -gtk-icon-shadow: none; }
/********************* Spinner Animation * */
@keyframes spin { to { -gtk-icon-transform: rotate(1turn); } }
@@ -248,25 +248,25 @@ button.osd:disabled:backdrop, button.osd:disabled { color: #858786; border-color
button.osd:backdrop { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7); background-color: transparent;
background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box; box-shadow: none; text-shadow:
none; -gtk-icon-shadow: none; border: none; }
-.csd popover.background.touch-selection button, .csd popover.background.magnifier button,
popover.background.touch-selection button, popover.background.magnifier button, .app-notification button,
.app-notification.frame button, .osd button { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box;
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button, .csd popover > contents.background.magnifier
button, popover > contents.background.touch-selection button, popover > contents.background.magnifier button,
.app-notification button, .app-notification.frame button, .osd button { color: #eeeeec; border-color: rgba(0,
0, 0, 0.7); background-color: transparent; background-image: image(rgba(28, 31, 32, 0.7)); background-clip:
padding-box; box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0
1px black; outline-color: rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button:hover, popover.background.magnifier button:hover,
.app-notification button:hover, .osd button:hover { color: white; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(57, 63, 65, 0.7)); background-clip: padding-box;
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button:hover, .csd popover >
contents.background.magnifier button:hover, popover > contents.background.touch-selection button:hover,
popover > contents.background.magnifier button:hover, .app-notification button:hover, .osd button:hover {
color: white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image:
image(rgba(57, 63, 65, 0.7)); background-clip: padding-box; box-shadow: inset 0 1px rgba(255, 255, 255, 0.1);
text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; outline-color: rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button:active:backdrop, popover.background.magnifier
button:active:backdrop, .app-notification button:active:backdrop, popover.background.touch-selection
button:active, popover.background.magnifier button:active, .app-notification button:active,
popover.background.touch-selection button:checked:backdrop, popover.background.magnifier
button:checked:backdrop, .app-notification button:checked:backdrop, popover.background.touch-selection
button:checked, popover.background.magnifier button:checked, .app-notification button:checked, .osd
button:active:backdrop, .osd button:active, .osd button:checked:backdrop, .osd button:checked { color: white;
border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7));
background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color:
rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button:active:backdrop, .csd popover >
contents.background.magnifier button:active:backdrop, popover > contents.background.touch-selection
button:active:backdrop, popover > contents.background.magnifier button:active:backdrop, .app-notification
button:active:backdrop, .csd popover > contents.background.touch-selection button:active, .csd popover >
contents.background.magnifier button:active, popover > contents.background.touch-selection button:active,
popover > contents.background.magnifier button:active, .app-notification button:active, .csd popover >
contents.background.touch-selection button:checked:backdrop, .csd popover > contents.background.magnifier
button:checked:backdrop, popover > contents.background.touch-selection button:checked:backdrop, popover >
contents.background.magnifier button:checked:backdrop, .app-notification button:checked:backdrop, .csd
popover > contents.background.touch-selection button:checked, .c
sd popover > contents.background.magnifier button:checked, popover > contents.background.touch-selection
button:checked, popover > contents.background.magnifier button:checked, .app-notification button:checked,
.osd button:active:backdrop, .osd button:active, .osd button:checked:backdrop, .osd button:checked { color:
white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0,
0.7)); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none;
outline-color: rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button:disabled:backdrop, popover.background.magnifier
button:disabled:backdrop, .app-notification button:disabled:backdrop, popover.background.touch-selection
button:disabled, popover.background.magnifier button:disabled, .app-notification button:disabled, .osd
button:disabled:backdrop, .osd button:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection button:disabled:backdrop, .csd popover >
contents.background.magnifier button:disabled:backdrop, popover > contents.background.touch-selection
button:disabled:backdrop, popover > contents.background.magnifier button:disabled:backdrop, .app-notification
button:disabled:backdrop, .csd popover > contents.background.touch-selection button:disabled, .csd popover >
contents.background.magnifier button:disabled, popover > contents.background.touch-selection button:disabled,
popover > contents.background.magnifier button:disabled, .app-notification button:disabled, .osd
button:disabled:backdrop, .osd button:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
-popover.background.touch-selection button:backdrop, popover.background.magnifier button:backdrop,
.app-notification button:backdrop, .osd button:backdrop { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection button:backdrop, .csd popover >
contents.background.magnifier button:backdrop, popover > contents.background.touch-selection button:backdrop,
popover > contents.background.magnifier button:backdrop, .app-notification button:backdrop, .osd
button:backdrop { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7); background-color: transparent;
background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box; box-shadow: none; text-shadow:
none; -gtk-icon-shadow: none; }
-popover.background.touch-selection button.flat, popover.background.magnifier button.flat, .app-notification
button.flat, .osd button.flat { border-color: transparent; background-color: transparent; background-image:
none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; box-shadow:
none; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
+.csd popover > contents.background.touch-selection button.flat, .csd popover > contents.background.magnifier
button.flat, popover > contents.background.touch-selection button.flat, popover >
contents.background.magnifier button.flat, .app-notification button.flat, .osd button.flat { border-color:
transparent; background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255,
255, 0); text-shadow: none; -gtk-icon-shadow: none; box-shadow: none; text-shadow: 0 1px black;
-gtk-icon-shadow: 0 1px black; }
-popover.background.touch-selection button.flat:hover, popover.background.magnifier button.flat:hover,
.app-notification button.flat:hover, .osd button.flat:hover { color: white; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(57, 63, 65, 0.7)); background-clip: padding-box;
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button.flat:hover, .csd popover >
contents.background.magnifier button.flat:hover, popover > contents.background.touch-selection
button.flat:hover, popover > contents.background.magnifier button.flat:hover, .app-notification
button.flat:hover, .osd button.flat:hover { color: white; border-color: rgba(0, 0, 0, 0.7); background-color:
transparent; background-image: image(rgba(57, 63, 65, 0.7)); background-clip: padding-box; box-shadow: inset
0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; outline-color:
rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button.flat:disabled, popover.background.magnifier button.flat:disabled,
.app-notification button.flat:disabled, .osd button.flat:disabled { color: #858786; border-color: rgba(0, 0,
0, 0.7); background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip:
padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; background-image: none;
border-color: transparent; box-shadow: none; }
+.csd popover > contents.background.touch-selection button.flat:disabled, .csd popover >
contents.background.magnifier button.flat:disabled, popover > contents.background.touch-selection
button.flat:disabled, popover > contents.background.magnifier button.flat:disabled, .app-notification
button.flat:disabled, .osd button.flat:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; background-image: none; border-color:
transparent; box-shadow: none; }
-popover.background.touch-selection button.flat:backdrop, popover.background.magnifier button.flat:backdrop,
.app-notification button.flat:backdrop, .osd button.flat:backdrop { border-color: transparent;
background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0);
text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection button.flat:backdrop, .csd popover >
contents.background.magnifier button.flat:backdrop, popover > contents.background.touch-selection
button.flat:backdrop, popover > contents.background.magnifier button.flat:backdrop, .app-notification
button.flat:backdrop, .osd button.flat:backdrop { border-color: transparent; background-color: transparent;
background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow:
none; }
-popover.background.touch-selection button.flat:active, popover.background.magnifier button.flat:active,
.app-notification button.flat:active, popover.background.touch-selection button.flat:checked,
popover.background.magnifier button.flat:checked, .app-notification button.flat:checked, .osd
button.flat:active, .osd button.flat:checked { color: white; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button.flat:active, .csd popover >
contents.background.magnifier button.flat:active, popover > contents.background.touch-selection
button.flat:active, popover > contents.background.magnifier button.flat:active, .app-notification
button.flat:active, .csd popover > contents.background.touch-selection button.flat:checked, .csd popover >
contents.background.magnifier button.flat:checked, popover > contents.background.touch-selection
button.flat:checked, popover > contents.background.magnifier button.flat:checked, .app-notification
button.flat:checked, .osd button.flat:active, .osd button.flat:checked { color: white; border-color: rgba(0,
0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7)); background-clip:
padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236,
0.3); }
button.suggested-action { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #0f2b48;
border-bottom-color: #06121e; background-image: linear-gradient(to bottom, #1f5894, #1d538b 60%, #1b4e83);
text-shadow: 0 -1px rgba(0, 0, 0, 0.703529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.703529); box-shadow:
inset 0 1px rgba(255, 255, 255, 0.05); }
@@ -816,21 +816,25 @@ menuitem check:dir(ltr), menuitem radio:dir(ltr) { margin-right: 7px; }
menuitem check:dir(rtl), menuitem radio:dir(rtl) { margin-left: 7px; }
/*************** Popovers * */
-popover.background { padding: 2px; border-radius: 5px; background-color: #33393b; box-shadow: 0 1px 2px
rgba(0, 0, 0, 0.3); }
+popover > arrow { background-color: #33393b; border: 1px solid #1b1f20; }
-.csd popover.background, popover.background { border: 1px solid #1b1f20; }
+popover > contents.menu { padding: 8px; background-color: white; margin: 0px; }
-popover.background:backdrop { background-color: #33393b; box-shadow: none; }
+popover > contents { padding: 2px; margin: 0px; }
-popover.background > list, popover.background > .view, popover.background > iconview, popover.background >
toolbar { border-style: none; background-color: transparent; }
+popover > contents.background { border-radius: 5px; background-color: #33393b; box-shadow: 0 1px 2px rgba(0,
0, 0, 0.3); }
-.csd popover.background.touch-selection, .csd popover.background.magnifier,
popover.background.touch-selection, popover.background.magnifier { border: 1px solid rgba(255, 255, 255,
0.1); }
+.csd popover > contents.background, popover > contents.background { border: 1px solid #1b1f20; }
-popover.background separator { margin: 3px; }
+popover > contents.background:backdrop { background-color: #33393b; box-shadow: none; }
-popover.background list separator { margin: 0px; }
+popover > contents.background > list, popover > contents.background > .view, popover > contents.background >
iconview, popover > contents.background > toolbar { border-style: none; background-color: transparent; }
-popover.menu { padding: 8px; }
+.csd popover > contents.background.touch-selection, .csd popover > contents.background.magnifier, popover >
contents.background.touch-selection, popover > contents.background.magnifier { border: 1px solid rgba(255,
255, 255, 0.1); }
+
+popover > contents.background separator { margin: 3px; }
+
+popover > contents.background list separator { margin: 0px; }
/************* Notebooks * */
notebook box > header { padding: 1px; border-color: #1b1f20; border-width: 1px; background-color: #272c2d; }
diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css
index 79220c9..d94b3db 100644
--- a/gtk/theme/Adwaita/gtk-contained.css
+++ b/gtk/theme/Adwaita/gtk-contained.css
@@ -70,9 +70,9 @@ assistant .sidebar label { padding: 6px 12px; }
assistant .sidebar label.highlight { background-color: #c3c4c4; }
-.csd popover.background.touch-selection, .csd popover.background.magnifier,
popover.background.touch-selection, popover.background.magnifier, .csd popover.background.osd,
popover.background.osd, .app-notification, .app-notification.frame, .osd .scale-popup, .osd { color: #eeeeec;
border: none; background-color: rgba(28, 31, 32, 0.7); background-clip: padding-box; text-shadow: 0 1px
black; -gtk-icon-shadow: 0 1px black; }
+.csd popover > contents.background.touch-selection, .csd popover > contents.background.magnifier, popover >
contents.background.touch-selection, popover > contents.background.magnifier, .csd popover >
contents.background.osd, popover > contents.background.osd, .app-notification, .app-notification.frame, .osd
.scale-popup, .osd { color: #eeeeec; border: none; background-color: rgba(28, 31, 32, 0.7); background-clip:
padding-box; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
-popover.background.touch-selection:backdrop, popover.background.magnifier:backdrop,
popover.background.osd:backdrop, .app-notification:backdrop, .osd .scale-popup:backdrop, .osd:backdrop {
text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection:backdrop, .csd popover >
contents.background.magnifier:backdrop, popover > contents.background.touch-selection:backdrop, popover >
contents.background.magnifier:backdrop, .csd popover > contents.background.osd:backdrop, popover >
contents.background.osd:backdrop, .app-notification:backdrop, .osd .scale-popup:backdrop, .osd:backdrop {
text-shadow: none; -gtk-icon-shadow: none; }
/********************* Spinner Animation * */
@keyframes spin { to { -gtk-icon-transform: rotate(1turn); } }
@@ -250,25 +250,25 @@ button.osd:disabled:backdrop, button.osd:disabled { color: #858786; border-color
button.osd:backdrop { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7); background-color: transparent;
background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box; box-shadow: none; text-shadow:
none; -gtk-icon-shadow: none; border: none; }
-.csd popover.background.touch-selection button, .csd popover.background.magnifier button,
popover.background.touch-selection button, popover.background.magnifier button, .app-notification button,
.app-notification.frame button, .osd button { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box;
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button, .csd popover > contents.background.magnifier
button, popover > contents.background.touch-selection button, popover > contents.background.magnifier button,
.app-notification button, .app-notification.frame button, .osd button { color: #eeeeec; border-color: rgba(0,
0, 0, 0.7); background-color: transparent; background-image: image(rgba(28, 31, 32, 0.7)); background-clip:
padding-box; box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0
1px black; outline-color: rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button:hover, popover.background.magnifier button:hover,
.app-notification button:hover, .osd button:hover { color: white; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(57, 63, 65, 0.7)); background-clip: padding-box;
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button:hover, .csd popover >
contents.background.magnifier button:hover, popover > contents.background.touch-selection button:hover,
popover > contents.background.magnifier button:hover, .app-notification button:hover, .osd button:hover {
color: white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image:
image(rgba(57, 63, 65, 0.7)); background-clip: padding-box; box-shadow: inset 0 1px rgba(255, 255, 255, 0.1);
text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; outline-color: rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button:active:backdrop, popover.background.magnifier
button:active:backdrop, .app-notification button:active:backdrop, popover.background.touch-selection
button:active, popover.background.magnifier button:active, .app-notification button:active,
popover.background.touch-selection button:checked:backdrop, popover.background.magnifier
button:checked:backdrop, .app-notification button:checked:backdrop, popover.background.touch-selection
button:checked, popover.background.magnifier button:checked, .app-notification button:checked, .osd
button:active:backdrop, .osd button:active, .osd button:checked:backdrop, .osd button:checked { color: white;
border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7));
background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color:
rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button:active:backdrop, .csd popover >
contents.background.magnifier button:active:backdrop, popover > contents.background.touch-selection
button:active:backdrop, popover > contents.background.magnifier button:active:backdrop, .app-notification
button:active:backdrop, .csd popover > contents.background.touch-selection button:active, .csd popover >
contents.background.magnifier button:active, popover > contents.background.touch-selection button:active,
popover > contents.background.magnifier button:active, .app-notification button:active, .csd popover >
contents.background.touch-selection button:checked:backdrop, .csd popover > contents.background.magnifier
button:checked:backdrop, popover > contents.background.touch-selection button:checked:backdrop, popover >
contents.background.magnifier button:checked:backdrop, .app-notification button:checked:backdrop, .csd
popover > contents.background.touch-selection button:checked, .c
sd popover > contents.background.magnifier button:checked, popover > contents.background.touch-selection
button:checked, popover > contents.background.magnifier button:checked, .app-notification button:checked,
.osd button:active:backdrop, .osd button:active, .osd button:checked:backdrop, .osd button:checked { color:
white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0,
0.7)); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none;
outline-color: rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button:disabled:backdrop, popover.background.magnifier
button:disabled:backdrop, .app-notification button:disabled:backdrop, popover.background.touch-selection
button:disabled, popover.background.magnifier button:disabled, .app-notification button:disabled, .osd
button:disabled:backdrop, .osd button:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection button:disabled:backdrop, .csd popover >
contents.background.magnifier button:disabled:backdrop, popover > contents.background.touch-selection
button:disabled:backdrop, popover > contents.background.magnifier button:disabled:backdrop, .app-notification
button:disabled:backdrop, .csd popover > contents.background.touch-selection button:disabled, .csd popover >
contents.background.magnifier button:disabled, popover > contents.background.touch-selection button:disabled,
popover > contents.background.magnifier button:disabled, .app-notification button:disabled, .osd
button:disabled:backdrop, .osd button:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
-popover.background.touch-selection button:backdrop, popover.background.magnifier button:backdrop,
.app-notification button:backdrop, .osd button:backdrop { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection button:backdrop, .csd popover >
contents.background.magnifier button:backdrop, popover > contents.background.touch-selection button:backdrop,
popover > contents.background.magnifier button:backdrop, .app-notification button:backdrop, .osd
button:backdrop { color: #eeeeec; border-color: rgba(0, 0, 0, 0.7); background-color: transparent;
background-image: image(rgba(28, 31, 32, 0.7)); background-clip: padding-box; box-shadow: none; text-shadow:
none; -gtk-icon-shadow: none; }
-popover.background.touch-selection button.flat, popover.background.magnifier button.flat, .app-notification
button.flat, .osd button.flat { border-color: transparent; background-color: transparent; background-image:
none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; box-shadow:
none; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
+.csd popover > contents.background.touch-selection button.flat, .csd popover > contents.background.magnifier
button.flat, popover > contents.background.touch-selection button.flat, popover >
contents.background.magnifier button.flat, .app-notification button.flat, .osd button.flat { border-color:
transparent; background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255,
255, 0); text-shadow: none; -gtk-icon-shadow: none; box-shadow: none; text-shadow: 0 1px black;
-gtk-icon-shadow: 0 1px black; }
-popover.background.touch-selection button.flat:hover, popover.background.magnifier button.flat:hover,
.app-notification button.flat:hover, .osd button.flat:hover { color: white; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(57, 63, 65, 0.7)); background-clip: padding-box;
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button.flat:hover, .csd popover >
contents.background.magnifier button.flat:hover, popover > contents.background.touch-selection
button.flat:hover, popover > contents.background.magnifier button.flat:hover, .app-notification
button.flat:hover, .osd button.flat:hover { color: white; border-color: rgba(0, 0, 0, 0.7); background-color:
transparent; background-image: image(rgba(57, 63, 65, 0.7)); background-clip: padding-box; box-shadow: inset
0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; outline-color:
rgba(238, 238, 236, 0.3); }
-popover.background.touch-selection button.flat:disabled, popover.background.magnifier button.flat:disabled,
.app-notification button.flat:disabled, .osd button.flat:disabled { color: #858786; border-color: rgba(0, 0,
0, 0.7); background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip:
padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; background-image: none;
border-color: transparent; box-shadow: none; }
+.csd popover > contents.background.touch-selection button.flat:disabled, .csd popover >
contents.background.magnifier button.flat:disabled, popover > contents.background.touch-selection
button.flat:disabled, popover > contents.background.magnifier button.flat:disabled, .app-notification
button.flat:disabled, .osd button.flat:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; background-image: none; border-color:
transparent; box-shadow: none; }
-popover.background.touch-selection button.flat:backdrop, popover.background.magnifier button.flat:backdrop,
.app-notification button.flat:backdrop, .osd button.flat:backdrop { border-color: transparent;
background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0);
text-shadow: none; -gtk-icon-shadow: none; }
+.csd popover > contents.background.touch-selection button.flat:backdrop, .csd popover >
contents.background.magnifier button.flat:backdrop, popover > contents.background.touch-selection
button.flat:backdrop, popover > contents.background.magnifier button.flat:backdrop, .app-notification
button.flat:backdrop, .osd button.flat:backdrop { border-color: transparent; background-color: transparent;
background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow:
none; }
-popover.background.touch-selection button.flat:active, popover.background.magnifier button.flat:active,
.app-notification button.flat:active, popover.background.touch-selection button.flat:checked,
popover.background.magnifier button.flat:checked, .app-notification button.flat:checked, .osd
button.flat:active, .osd button.flat:checked { color: white; border-color: rgba(0, 0, 0, 0.7);
background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7)); background-clip: padding-box;
box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236, 0.3); }
+.csd popover > contents.background.touch-selection button.flat:active, .csd popover >
contents.background.magnifier button.flat:active, popover > contents.background.touch-selection
button.flat:active, popover > contents.background.magnifier button.flat:active, .app-notification
button.flat:active, .csd popover > contents.background.touch-selection button.flat:checked, .csd popover >
contents.background.magnifier button.flat:checked, popover > contents.background.touch-selection
button.flat:checked, popover > contents.background.magnifier button.flat:checked, .app-notification
button.flat:checked, .osd button.flat:active, .osd button.flat:checked { color: white; border-color: rgba(0,
0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7)); background-clip:
padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236,
0.3); }
button.suggested-action { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c;
border-bottom-color: #184472; background-image: linear-gradient(to bottom, #4a90d9, #3986d5 60%, #2a76c6);
text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow:
inset 0 1px rgba(255, 255, 255, 0.4); }
@@ -824,21 +824,25 @@ menuitem check:dir(ltr), menuitem radio:dir(ltr) { margin-right: 7px; }
menuitem check:dir(rtl), menuitem radio:dir(rtl) { margin-left: 7px; }
/*************** Popovers * */
-popover.background { padding: 2px; border-radius: 5px; background-color: #e8e8e7; box-shadow: 0 1px 2px
rgba(0, 0, 0, 0.3); }
+popover > arrow { background-color: #e8e8e7; border: 1px solid #b6b6b3; }
-.csd popover.background, popover.background { border: 1px solid #b6b6b3; }
+popover > contents.menu { padding: 8px; background-color: white; margin: 0px; }
-popover.background:backdrop { background-color: #e8e8e7; box-shadow: none; }
+popover > contents { padding: 2px; margin: 0px; }
-popover.background > list, popover.background > .view, popover.background > iconview, popover.background >
toolbar { border-style: none; background-color: transparent; }
+popover > contents.background { border-radius: 5px; background-color: #e8e8e7; box-shadow: 0 1px 2px rgba(0,
0, 0, 0.3); }
-.csd popover.background.touch-selection, .csd popover.background.magnifier,
popover.background.touch-selection, popover.background.magnifier { border: 1px solid rgba(255, 255, 255,
0.1); }
+.csd popover > contents.background, popover > contents.background { border: 1px solid #b6b6b3; }
-popover.background separator { margin: 3px; }
+popover > contents.background:backdrop { background-color: #e8e8e7; box-shadow: none; }
-popover.background list separator { margin: 0px; }
+popover > contents.background > list, popover > contents.background > .view, popover > contents.background >
iconview, popover > contents.background > toolbar { border-style: none; background-color: transparent; }
-popover.menu { padding: 8px; }
+.csd popover > contents.background.touch-selection, .csd popover > contents.background.magnifier, popover >
contents.background.touch-selection, popover > contents.background.magnifier { border: 1px solid rgba(255,
255, 255, 0.1); }
+
+popover > contents.background separator { margin: 3px; }
+
+popover > contents.background list separator { margin: 0px; }
/************* Notebooks * */
notebook box > header { padding: 1px; border-color: #b6b6b3; border-width: 1px; background-color: #cfcfcd; }
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]