Backport a few upstream fixes for checkboxes

This commit is contained in:
Kalev Lember 2014-08-27 13:50:38 +02:00
parent 1d4f41a289
commit 580fbf448a
5 changed files with 748 additions and 1 deletions

View File

@ -0,0 +1,58 @@
From 442353fa9d78d6ada6991d4dcf8ba81c2dc52e0d Mon Sep 17 00:00:00 2001
From: Benjamin Otte <otte@redhat.com>
Date: Sun, 17 Aug 2014 06:24:41 +0200
Subject: [PATCH] checkbutton: Fix redraw issues
This is a hack to get around the optimizations done by the CSS engine.
The CSS engine will notice that no CSS properties changed on the
widget itself when going from one state to another and not queue
a redraw.
And the reason for no properties changing will be that only the
checkmark itself changes, but that is hidden behind a
gtk_style_context_save()/_restore() pair, so it won't be caught.
---
gtk/gtkcheckbutton.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c
index 47dc6bb..c9adcc0 100644
--- a/gtk/gtkcheckbutton.c
+++ b/gtk/gtkcheckbutton.c
@@ -87,6 +87,25 @@ static void gtk_real_check_button_draw_indicator (GtkCheckButton *check_but
G_DEFINE_TYPE (GtkCheckButton, gtk_check_button, GTK_TYPE_TOGGLE_BUTTON)
static void
+gtk_check_button_state_flags_changed (GtkWidget *widget,
+ GtkStateFlags previous_state_flags)
+{
+ /* FIXME
+ * This is a hack to get around the optimizations done by the CSS engine.
+ *
+ * The CSS engine will notice that no CSS properties changed on the
+ * widget itself when going from one state to another and not queue
+ * a redraw.
+ * And the reason for no properties changing will be that only the
+ * checkmark itself changes, but that is hidden behind a
+ * gtk_style_context_save()/_restore() pair, so it won't be caught.
+ */
+ gtk_widget_queue_draw (widget);
+
+ GTK_WIDGET_CLASS (gtk_check_button_parent_class)->state_flags_changed (widget, previous_state_flags);
+}
+
+static void
gtk_check_button_class_init (GtkCheckButtonClass *class)
{
GtkWidgetClass *widget_class;
@@ -100,6 +119,7 @@ gtk_check_button_class_init (GtkCheckButtonClass *class)
widget_class->get_preferred_height_and_baseline_for_width = gtk_check_button_get_preferred_height_and_baseline_for_width;
widget_class->size_allocate = gtk_check_button_size_allocate;
widget_class->draw = gtk_check_button_draw;
+ widget_class->state_flags_changed = gtk_check_button_state_flags_changed;
class->draw_indicator = gtk_real_check_button_draw_indicator;
--
2.1.0

View File

@ -0,0 +1,49 @@
From b520d3b7fb68ae905f545ea410fe3c600b91250c Mon Sep 17 00:00:00 2001
From: Benjamin Otte <otte@redhat.com>
Date: Sun, 17 Aug 2014 06:47:17 +0200
Subject: [PATCH] button: Remove unnecessary queue_redraw() calls
Setting a state automatically triggers redraws via the CSS machinery.
---
gtk/gtkbutton.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c
index 63fb9cf..ebe4f15 100644
--- a/gtk/gtkbutton.c
+++ b/gtk/gtkbutton.c
@@ -1504,7 +1504,6 @@ gtk_button_set_relief (GtkButton *button,
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_FLAT);
g_object_notify_by_pspec (G_OBJECT (button), props[PROP_RELIEF]);
- gtk_widget_queue_draw (GTK_WIDGET (button));
}
}
@@ -2034,7 +2033,6 @@ gtk_real_button_activate (GtkButton *button)
g_source_set_name_by_id (priv->activate_timeout, "[gtk+] button_activate_timeout");
priv->button_down = TRUE;
gtk_button_update_state (button);
- gtk_widget_queue_draw (GTK_WIDGET (button));
}
}
@@ -2058,7 +2056,6 @@ gtk_button_finish_activate (GtkButton *button,
priv->button_down = FALSE;
gtk_button_update_state (button);
- gtk_widget_queue_draw (GTK_WIDGET (button));
if (do_it)
gtk_button_clicked (button);
@@ -2446,7 +2443,6 @@ static void
gtk_button_enter_leave (GtkButton *button)
{
gtk_button_update_state (button);
- gtk_widget_queue_draw (GTK_WIDGET (button));
}
static void
--
2.1.0

View File

@ -0,0 +1,459 @@
From 9c4af41a59f6bcfd8969e8f597e5e7ed0dec597b Mon Sep 17 00:00:00 2001
From: Jakub Steiner <jimmac@gmail.com>
Date: Mon, 18 Aug 2014 10:52:52 +0200
Subject: [PATCH] Adwaita: update the last cases for :checked
- treeviews can now have the same default checkboxes and radios
- only menus are special (but needed :active -> :checked)
https://bugzilla.gnome.org/show_bug.cgi?id=733967
https://bugzilla.gnome.org/show_bug.cgi?id=734290
---
gtk/resources/theme/Adwaita/_common.scss | 58 +---------
gtk/resources/theme/Adwaita/gtk-contained-dark.css | 128 ++++-----------------
gtk/resources/theme/Adwaita/gtk-contained.css | 128 ++++-----------------
3 files changed, 46 insertions(+), 268 deletions(-)
diff --git a/gtk/resources/theme/Adwaita/_common.scss b/gtk/resources/theme/Adwaita/_common.scss
index a81c9eb..0397937 100644
--- a/gtk/resources/theme/Adwaita/_common.scss
+++ b/gtk/resources/theme/Adwaita/_common.scss
@@ -1658,12 +1658,12 @@ $asset_suffix: if($variant=='dark', '-dark', '');
}
//menu
- .menuitem.#{$w} {
+ .menu .menuitem.#{$w} {
color: transparentize($fg_color,0.9);
background-image: none;
-gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
&:hover { color: transparentize($selected_fg_color,0.9); }
- &:active {
+ &:checked {
color: $fg_color;
&:hover {
-gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
@@ -1690,60 +1690,6 @@ $asset_suffix: if($variant=='dark', '-dark', '');
color: transparentize($backdrop_fg_color,0.9);
}
}
-
- //treeview & selection mode icon view
- .view.#{$w} {
- // FIXME .cell.check/.radio doesn't needs to be blue in bright var
- color: transparentize($fg_color,0.9);
- background-image: none;
- -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
- &:hover { -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic'); }
- &:active {
- color: $fg_color;
- &:insensitive {
- color: $insensitive_fg_color;
- &:backdrop { color: $backdrop_insensitive_color; }
- }
- &:backdrop { color: $backdrop_fg_color; }
- }
- &:insensitive {
- color: transparentize($insensitive_fg_color,0.9);
- &:backdrop { color: transparent; }
- }
- &:inconsistent {
- -gtk-icon-source: -gtk-icontheme('#{$a}-mixed-symbolic');
- }
- &:selected, &:selected:focus {
- // -gtk-icon-source needed it gets overridden
- -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
- // :selected:focus not to get overridden by .view style
- color: transparentize($selected_fg_color,0.9);
- &:active {
- color: $selected_fg_color;
- &:backdrop {
- color: if($variant=='light',$backdrop_base_color,$backdrop_fg_color);
- }
- }
- }
- &:backdrop {
- // -gtk-icon-source needed it gets overridden
- -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
- color: transparentize($backdrop_fg_color,0.9);
- &:selected { color: transparentize($backdrop_base_color,0.9); }
- }
- }
-
- //popover
- .popover .button.#{$w} {
- &:hover {
- color: transparentize($fg_color,0.9);
- &:active {
- color: $fg_color;
- &:selected { color: $selected_fg_color; }
- &:backdrop { color: $backdrop_fg_color; }
- }
- }
- }
}
GtkCheckButton.text-button, GtkRadioButton.text-button {
diff --git a/gtk/resources/theme/Adwaita/gtk-contained-dark.css b/gtk/resources/theme/Adwaita/gtk-contained-dark.css
index ef47844..df7581a 100644
--- a/gtk/resources/theme/Adwaita/gtk-contained-dark.css
+++ b/gtk/resources/theme/Adwaita/gtk-contained-dark.css
@@ -1781,76 +1781,34 @@ GtkSwitch {
.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")); }
-.menuitem.check {
+.menu .menuitem.check {
color: rgba(238, 238, 236, 0.1);
background-image: none;
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
- .menuitem.check:hover {
+ .menu .menuitem.check:hover {
color: rgba(255, 255, 255, 0.1); }
- .menuitem.check:active {
+ .menu .menuitem.check:checked {
color: #eeeeec; }
- .menuitem.check:active:hover {
+ .menu .menuitem.check:checked:hover {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: white; }
- .menuitem.check:active:insensitive {
+ .menu .menuitem.check:checked:insensitive {
color: #939695;
background-image: none; }
- .menuitem.check:active:insensitive:backdrop {
+ .menu .menuitem.check:checked:insensitive:backdrop {
color: #5d6767; }
- .menuitem.check:active:backdrop {
+ .menu .menuitem.check:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: #c9cbc9; }
- .menuitem.check:insensitive {
+ .menu .menuitem.check:insensitive {
color: rgba(147, 150, 149, 0.1); }
- .menuitem.check:insensitive:backdrop {
+ .menu .menuitem.check:insensitive:backdrop {
color: transparent; }
- .menuitem.check:inconsistent {
+ .menu .menuitem.check:inconsistent {
-gtk-icon-source: -gtk-icontheme("checkbox-mixed-symbolic"); }
- .menuitem.check:backdrop, .menuitem.check:backdrop:hover {
+ .menu .menuitem.check:backdrop, .menu .menuitem.check:backdrop:hover {
color: rgba(201, 203, 201, 0.1); }
-.view.check {
- color: rgba(238, 238, 236, 0.1);
- background-image: none;
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
- .view.check:hover {
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
- .view.check:active {
- color: #eeeeec; }
- .view.check:active:insensitive {
- color: #939695; }
- .view.check:active:insensitive:backdrop {
- color: #5d6767; }
- .view.check:active:backdrop {
- color: #c9cbc9; }
- .view.check:insensitive {
- color: rgba(147, 150, 149, 0.1); }
- .view.check:insensitive:backdrop {
- color: transparent; }
- .view.check:inconsistent {
- -gtk-icon-source: -gtk-icontheme("checkbox-mixed-symbolic"); }
- .view.check:selected, .view.check:selected:focus {
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
- color: rgba(255, 255, 255, 0.1); }
- .view.check:selected:active, .view.check:selected:focus:active {
- color: white; }
- .view.check:selected:active:backdrop, .view.check:selected:focus:active:backdrop {
- color: #c9cbc9; }
- .view.check:backdrop {
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
- color: rgba(201, 203, 201, 0.1); }
- .view.check:backdrop:selected {
- color: rgba(44, 44, 44, 0.1); }
-
-.popover .button.check:hover {
- color: rgba(238, 238, 236, 0.1); }
- .popover .button.check:hover:active {
- color: #eeeeec; }
- .popover .button.check:hover:active:selected {
- color: white; }
- .popover .button.check:hover:active:backdrop {
- color: #c9cbc9; }
-
.radio {
-gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked-dark.png"), url("assets/radio-unchecked-dark@2.png")); }
@@ -1905,76 +1863,34 @@ GtkSwitch {
.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")); }
-.menuitem.radio {
+.menu .menuitem.radio {
color: rgba(238, 238, 236, 0.1);
background-image: none;
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
- .menuitem.radio:hover {
+ .menu .menuitem.radio:hover {
color: rgba(255, 255, 255, 0.1); }
- .menuitem.radio:active {
+ .menu .menuitem.radio:checked {
color: #eeeeec; }
- .menuitem.radio:active:hover {
+ .menu .menuitem.radio:checked:hover {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: white; }
- .menuitem.radio:active:insensitive {
+ .menu .menuitem.radio:checked:insensitive {
color: #939695;
background-image: none; }
- .menuitem.radio:active:insensitive:backdrop {
+ .menu .menuitem.radio:checked:insensitive:backdrop {
color: #5d6767; }
- .menuitem.radio:active:backdrop {
+ .menu .menuitem.radio:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: #c9cbc9; }
- .menuitem.radio:insensitive {
+ .menu .menuitem.radio:insensitive {
color: rgba(147, 150, 149, 0.1); }
- .menuitem.radio:insensitive:backdrop {
+ .menu .menuitem.radio:insensitive:backdrop {
color: transparent; }
- .menuitem.radio:inconsistent {
+ .menu .menuitem.radio:inconsistent {
-gtk-icon-source: -gtk-icontheme("radio-mixed-symbolic"); }
- .menuitem.radio:backdrop, .menuitem.radio:backdrop:hover {
+ .menu .menuitem.radio:backdrop, .menu .menuitem.radio:backdrop:hover {
color: rgba(201, 203, 201, 0.1); }
-.view.radio {
- color: rgba(238, 238, 236, 0.1);
- background-image: none;
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
- .view.radio:hover {
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
- .view.radio:active {
- color: #eeeeec; }
- .view.radio:active:insensitive {
- color: #939695; }
- .view.radio:active:insensitive:backdrop {
- color: #5d6767; }
- .view.radio:active:backdrop {
- color: #c9cbc9; }
- .view.radio:insensitive {
- color: rgba(147, 150, 149, 0.1); }
- .view.radio:insensitive:backdrop {
- color: transparent; }
- .view.radio:inconsistent {
- -gtk-icon-source: -gtk-icontheme("radio-mixed-symbolic"); }
- .view.radio:selected, .view.radio:selected:focus {
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
- color: rgba(255, 255, 255, 0.1); }
- .view.radio:selected:active, .view.radio:selected:focus:active {
- color: white; }
- .view.radio:selected:active:backdrop, .view.radio:selected:focus:active:backdrop {
- color: #c9cbc9; }
- .view.radio:backdrop {
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
- color: rgba(201, 203, 201, 0.1); }
- .view.radio:backdrop:selected {
- color: rgba(44, 44, 44, 0.1); }
-
-.popover .button.radio:hover {
- color: rgba(238, 238, 236, 0.1); }
- .popover .button.radio:hover:active {
- color: #eeeeec; }
- .popover .button.radio:hover:active:selected {
- color: white; }
- .popover .button.radio:hover:active:backdrop {
- color: #c9cbc9; }
-
GtkCheckButton.text-button, GtkRadioButton.text-button {
padding: 1px 2px 4px;
outline-offset: 0; }
diff --git a/gtk/resources/theme/Adwaita/gtk-contained.css b/gtk/resources/theme/Adwaita/gtk-contained.css
index 0f244ab..585c1aa 100644
--- a/gtk/resources/theme/Adwaita/gtk-contained.css
+++ b/gtk/resources/theme/Adwaita/gtk-contained.css
@@ -1776,76 +1776,34 @@ 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")); }
-.menuitem.check {
+.menu .menuitem.check {
color: rgba(46, 52, 54, 0.1);
background-image: none;
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
- .menuitem.check:hover {
+ .menu .menuitem.check:hover {
color: rgba(255, 255, 255, 0.1); }
- .menuitem.check:active {
+ .menu .menuitem.check:checked {
color: #2e3436; }
- .menuitem.check:active:hover {
+ .menu .menuitem.check:checked:hover {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: white; }
- .menuitem.check:active:insensitive {
+ .menu .menuitem.check:checked:insensitive {
color: #8d9091;
background-image: none; }
- .menuitem.check:active:insensitive:backdrop {
+ .menu .menuitem.check:checked:insensitive:backdrop {
color: #c7c7c7; }
- .menuitem.check:active:backdrop {
+ .menu .menuitem.check:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: #54595a; }
- .menuitem.check:insensitive {
+ .menu .menuitem.check:insensitive {
color: rgba(141, 144, 145, 0.1); }
- .menuitem.check:insensitive:backdrop {
+ .menu .menuitem.check:insensitive:backdrop {
color: transparent; }
- .menuitem.check:inconsistent {
+ .menu .menuitem.check:inconsistent {
-gtk-icon-source: -gtk-icontheme("checkbox-mixed-symbolic"); }
- .menuitem.check:backdrop, .menuitem.check:backdrop:hover {
+ .menu .menuitem.check:backdrop, .menu .menuitem.check:backdrop:hover {
color: rgba(84, 89, 90, 0.1); }
-.view.check {
- color: rgba(46, 52, 54, 0.1);
- background-image: none;
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
- .view.check:hover {
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
- .view.check:active {
- color: #2e3436; }
- .view.check:active:insensitive {
- color: #8d9091; }
- .view.check:active:insensitive:backdrop {
- color: #c7c7c7; }
- .view.check:active:backdrop {
- color: #54595a; }
- .view.check:insensitive {
- color: rgba(141, 144, 145, 0.1); }
- .view.check:insensitive:backdrop {
- color: transparent; }
- .view.check:inconsistent {
- -gtk-icon-source: -gtk-icontheme("checkbox-mixed-symbolic"); }
- .view.check:selected, .view.check:selected:focus {
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
- color: rgba(255, 255, 255, 0.1); }
- .view.check:selected:active, .view.check:selected:focus:active {
- color: white; }
- .view.check:selected:active:backdrop, .view.check:selected:focus:active:backdrop {
- color: #fcfcfc; }
- .view.check:backdrop {
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
- color: rgba(84, 89, 90, 0.1); }
- .view.check:backdrop:selected {
- color: rgba(252, 252, 252, 0.1); }
-
-.popover .button.check:hover {
- color: rgba(46, 52, 54, 0.1); }
- .popover .button.check:hover:active {
- color: #2e3436; }
- .popover .button.check:hover:active:selected {
- color: white; }
- .popover .button.check:hover:active:backdrop {
- color: #54595a; }
-
.radio {
-gtk-icon-source: -gtk-scaled(url("assets/radio-unchecked.png"), url("assets/radio-unchecked@2.png")); }
@@ -1900,76 +1858,34 @@ 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")); }
-.menuitem.radio {
+.menu .menuitem.radio {
color: rgba(46, 52, 54, 0.1);
background-image: none;
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
- .menuitem.radio:hover {
+ .menu .menuitem.radio:hover {
color: rgba(255, 255, 255, 0.1); }
- .menuitem.radio:active {
+ .menu .menuitem.radio:checked {
color: #2e3436; }
- .menuitem.radio:active:hover {
+ .menu .menuitem.radio:checked:hover {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: white; }
- .menuitem.radio:active:insensitive {
+ .menu .menuitem.radio:checked:insensitive {
color: #8d9091;
background-image: none; }
- .menuitem.radio:active:insensitive:backdrop {
+ .menu .menuitem.radio:checked:insensitive:backdrop {
color: #c7c7c7; }
- .menuitem.radio:active:backdrop {
+ .menu .menuitem.radio:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: #54595a; }
- .menuitem.radio:insensitive {
+ .menu .menuitem.radio:insensitive {
color: rgba(141, 144, 145, 0.1); }
- .menuitem.radio:insensitive:backdrop {
+ .menu .menuitem.radio:insensitive:backdrop {
color: transparent; }
- .menuitem.radio:inconsistent {
+ .menu .menuitem.radio:inconsistent {
-gtk-icon-source: -gtk-icontheme("radio-mixed-symbolic"); }
- .menuitem.radio:backdrop, .menuitem.radio:backdrop:hover {
+ .menu .menuitem.radio:backdrop, .menu .menuitem.radio:backdrop:hover {
color: rgba(84, 89, 90, 0.1); }
-.view.radio {
- color: rgba(46, 52, 54, 0.1);
- background-image: none;
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
- .view.radio:hover {
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
- .view.radio:active {
- color: #2e3436; }
- .view.radio:active:insensitive {
- color: #8d9091; }
- .view.radio:active:insensitive:backdrop {
- color: #c7c7c7; }
- .view.radio:active:backdrop {
- color: #54595a; }
- .view.radio:insensitive {
- color: rgba(141, 144, 145, 0.1); }
- .view.radio:insensitive:backdrop {
- color: transparent; }
- .view.radio:inconsistent {
- -gtk-icon-source: -gtk-icontheme("radio-mixed-symbolic"); }
- .view.radio:selected, .view.radio:selected:focus {
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
- color: rgba(255, 255, 255, 0.1); }
- .view.radio:selected:active, .view.radio:selected:focus:active {
- color: white; }
- .view.radio:selected:active:backdrop, .view.radio:selected:focus:active:backdrop {
- color: #fcfcfc; }
- .view.radio:backdrop {
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
- color: rgba(84, 89, 90, 0.1); }
- .view.radio:backdrop:selected {
- color: rgba(252, 252, 252, 0.1); }
-
-.popover .button.radio:hover {
- color: rgba(46, 52, 54, 0.1); }
- .popover .button.radio:hover:active {
- color: #2e3436; }
- .popover .button.radio:hover:active:selected {
- color: white; }
- .popover .button.radio:hover:active:backdrop {
- color: #54595a; }
-
GtkCheckButton.text-button, GtkRadioButton.text-button {
padding: 1px 2px 4px;
outline-offset: 0; }
--
2.1.0

View File

@ -0,0 +1,169 @@
From aec4829d74aa2bc79b9271d84c4a4d71f6965f9f Mon Sep 17 00:00:00 2001
From: Jakub Steiner <jimmac@gmail.com>
Date: Mon, 18 Aug 2014 14:18:53 +0200
Subject: [PATCH] Adwaita: have an unchecked state for radio/checks in menus
more background in https://bugzilla.gnome.org/show_bug.cgi?id=734290
---
gtk/resources/theme/Adwaita/_common.scss | 9 ++++---
gtk/resources/theme/Adwaita/gtk-contained-dark.css | 30 ++++++++++++----------
gtk/resources/theme/Adwaita/gtk-contained.css | 30 ++++++++++++----------
3 files changed, 37 insertions(+), 32 deletions(-)
diff --git a/gtk/resources/theme/Adwaita/_common.scss b/gtk/resources/theme/Adwaita/_common.scss
index 0397937..3077b47 100644
--- a/gtk/resources/theme/Adwaita/_common.scss
+++ b/gtk/resources/theme/Adwaita/_common.scss
@@ -1661,12 +1661,13 @@ $asset_suffix: if($variant=='dark', '-dark', '');
.menu .menuitem.#{$w} {
color: transparentize($fg_color,0.9);
background-image: none;
- -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
+ -gtk-icon-source: -gtk-icontheme('#{$a}-symbolic');
&:hover { color: transparentize($selected_fg_color,0.9); }
- &:checked {
+ &:active, &:checked {
color: $fg_color;
+ -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
&:hover {
- -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
+ -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic'); //specificity workaround
color: $selected_fg_color;
}
&:insensitive {
@@ -1675,7 +1676,7 @@ $asset_suffix: if($variant=='dark', '-dark', '');
&:backdrop { color: $backdrop_insensitive_color; };
}
&:backdrop {
- -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic');
+ -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic'); //specificity workaround
color: $backdrop_fg_color;
}
}
diff --git a/gtk/resources/theme/Adwaita/gtk-contained-dark.css b/gtk/resources/theme/Adwaita/gtk-contained-dark.css
index df7581a..1b0b9fd 100644
--- a/gtk/resources/theme/Adwaita/gtk-contained-dark.css
+++ b/gtk/resources/theme/Adwaita/gtk-contained-dark.css
@@ -1784,20 +1784,21 @@ GtkSwitch {
.menu .menuitem.check {
color: rgba(238, 238, 236, 0.1);
background-image: none;
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
+ -gtk-icon-source: -gtk-icontheme("checkbox-symbolic"); }
.menu .menuitem.check:hover {
color: rgba(255, 255, 255, 0.1); }
- .menu .menuitem.check:checked {
- color: #eeeeec; }
- .menu .menuitem.check:checked:hover {
+ .menu .menuitem.check:active, .menu .menuitem.check:checked {
+ color: #eeeeec;
+ -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
+ .menu .menuitem.check:active:hover, .menu .menuitem.check:checked:hover {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: white; }
- .menu .menuitem.check:checked:insensitive {
+ .menu .menuitem.check:active:insensitive, .menu .menuitem.check:checked:insensitive {
color: #939695;
background-image: none; }
- .menu .menuitem.check:checked:insensitive:backdrop {
+ .menu .menuitem.check:active:insensitive:backdrop, .menu .menuitem.check:checked:insensitive:backdrop {
color: #5d6767; }
- .menu .menuitem.check:checked:backdrop {
+ .menu .menuitem.check:active:backdrop, .menu .menuitem.check:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: #c9cbc9; }
.menu .menuitem.check:insensitive {
@@ -1866,20 +1867,21 @@ GtkSwitch {
.menu .menuitem.radio {
color: rgba(238, 238, 236, 0.1);
background-image: none;
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
+ -gtk-icon-source: -gtk-icontheme("radio-symbolic"); }
.menu .menuitem.radio:hover {
color: rgba(255, 255, 255, 0.1); }
- .menu .menuitem.radio:checked {
- color: #eeeeec; }
- .menu .menuitem.radio:checked:hover {
+ .menu .menuitem.radio:active, .menu .menuitem.radio:checked {
+ color: #eeeeec;
+ -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
+ .menu .menuitem.radio:active:hover, .menu .menuitem.radio:checked:hover {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: white; }
- .menu .menuitem.radio:checked:insensitive {
+ .menu .menuitem.radio:active:insensitive, .menu .menuitem.radio:checked:insensitive {
color: #939695;
background-image: none; }
- .menu .menuitem.radio:checked:insensitive:backdrop {
+ .menu .menuitem.radio:active:insensitive:backdrop, .menu .menuitem.radio:checked:insensitive:backdrop {
color: #5d6767; }
- .menu .menuitem.radio:checked:backdrop {
+ .menu .menuitem.radio:active:backdrop, .menu .menuitem.radio:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: #c9cbc9; }
.menu .menuitem.radio:insensitive {
diff --git a/gtk/resources/theme/Adwaita/gtk-contained.css b/gtk/resources/theme/Adwaita/gtk-contained.css
index 585c1aa..023363e 100644
--- a/gtk/resources/theme/Adwaita/gtk-contained.css
+++ b/gtk/resources/theme/Adwaita/gtk-contained.css
@@ -1779,20 +1779,21 @@ GtkSwitch {
.menu .menuitem.check {
color: rgba(46, 52, 54, 0.1);
background-image: none;
- -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
+ -gtk-icon-source: -gtk-icontheme("checkbox-symbolic"); }
.menu .menuitem.check:hover {
color: rgba(255, 255, 255, 0.1); }
- .menu .menuitem.check:checked {
- color: #2e3436; }
- .menu .menuitem.check:checked:hover {
+ .menu .menuitem.check:active, .menu .menuitem.check:checked {
+ color: #2e3436;
+ -gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic"); }
+ .menu .menuitem.check:active:hover, .menu .menuitem.check:checked:hover {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: white; }
- .menu .menuitem.check:checked:insensitive {
+ .menu .menuitem.check:active:insensitive, .menu .menuitem.check:checked:insensitive {
color: #8d9091;
background-image: none; }
- .menu .menuitem.check:checked:insensitive:backdrop {
+ .menu .menuitem.check:active:insensitive:backdrop, .menu .menuitem.check:checked:insensitive:backdrop {
color: #c7c7c7; }
- .menu .menuitem.check:checked:backdrop {
+ .menu .menuitem.check:active:backdrop, .menu .menuitem.check:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("checkbox-checked-symbolic");
color: #54595a; }
.menu .menuitem.check:insensitive {
@@ -1861,20 +1862,21 @@ GtkSwitch {
.menu .menuitem.radio {
color: rgba(46, 52, 54, 0.1);
background-image: none;
- -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
+ -gtk-icon-source: -gtk-icontheme("radio-symbolic"); }
.menu .menuitem.radio:hover {
color: rgba(255, 255, 255, 0.1); }
- .menu .menuitem.radio:checked {
- color: #2e3436; }
- .menu .menuitem.radio:checked:hover {
+ .menu .menuitem.radio:active, .menu .menuitem.radio:checked {
+ color: #2e3436;
+ -gtk-icon-source: -gtk-icontheme("radio-checked-symbolic"); }
+ .menu .menuitem.radio:active:hover, .menu .menuitem.radio:checked:hover {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: white; }
- .menu .menuitem.radio:checked:insensitive {
+ .menu .menuitem.radio:active:insensitive, .menu .menuitem.radio:checked:insensitive {
color: #8d9091;
background-image: none; }
- .menu .menuitem.radio:checked:insensitive:backdrop {
+ .menu .menuitem.radio:active:insensitive:backdrop, .menu .menuitem.radio:checked:insensitive:backdrop {
color: #c7c7c7; }
- .menu .menuitem.radio:checked:backdrop {
+ .menu .menuitem.radio:active:backdrop, .menu .menuitem.radio:checked:backdrop {
-gtk-icon-source: -gtk-icontheme("radio-checked-symbolic");
color: #54595a; }
.menu .menuitem.radio:insensitive {
--
2.1.0

View File

@ -17,7 +17,7 @@
Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
Name: gtk3
Version: 3.13.7
Release: 1%{?dist}
Release: 2%{?dist}
License: LGPLv2+
Group: System Environment/Libraries
URL: http://www.gtk.org
@ -26,6 +26,11 @@ URL: http://www.gtk.org
# not the actual tarball, rebuilt for missing files
Source: http://download.gnome.org/sources/gtk+/3.13/gtk+-%{version}.tar.xz
Patch1: 0001-checkbutton-Fix-redraw-issues.patch
Patch2: 0002-button-Remove-unnecessary-queue_redraw-calls.patch
Patch3: 0003-Adwaita-update-the-last-cases-for-checked.patch
Patch4: 0004-Adwaita-have-an-unchecked-state-for-radio-checks-in-.patch
BuildRequires: gnome-common autoconf automake intltool gettext
BuildRequires: atk-devel >= %{atk_version}
BuildRequires: at-spi2-atk-devel
@ -146,6 +151,10 @@ the functionality of the installed %{name} package.
%prep
%setup -q -n gtk+-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
@ -316,6 +325,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache
%{_datadir}/installed-tests
%changelog
* Wed Aug 27 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.7-2
- Backport a few upstream fixes for checkboxes
* Sun Aug 17 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.7-1
- Update to 3.13.7