summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKalev Lember <kalevlember@gmail.com>2014-08-27 13:50:38 +0200
committerKalev Lember <kalevlember@gmail.com>2014-08-27 13:50:38 +0200
commit580fbf448af5fcd6ac9780b6d33a3dbde76cb148 (patch)
tree602b75ccc9fc453a00a87fb35425bf76e8dd3b0c
parentUpdate to 3.13.7 (diff)
downloadgtk3-classic-build-gtk3-580fbf448af5fcd6ac9780b6d33a3dbde76cb148.tar.gz
gtk3-classic-build-gtk3-580fbf448af5fcd6ac9780b6d33a3dbde76cb148.tar.bz2
gtk3-classic-build-gtk3-580fbf448af5fcd6ac9780b6d33a3dbde76cb148.zip
Backport a few upstream fixes for checkboxes
-rw-r--r--0001-checkbutton-Fix-redraw-issues.patch58
-rw-r--r--0002-button-Remove-unnecessary-queue_redraw-calls.patch49
-rw-r--r--0003-Adwaita-update-the-last-cases-for-checked.patch459
-rw-r--r--0004-Adwaita-have-an-unchecked-state-for-radio-checks-in-.patch169
-rw-r--r--gtk3.spec14
5 files changed, 748 insertions, 1 deletions
diff --git a/0001-checkbutton-Fix-redraw-issues.patch b/0001-checkbutton-Fix-redraw-issues.patch
new file mode 100644
index 0000000..e494353
--- /dev/null
+++ b/0001-checkbutton-Fix-redraw-issues.patch
@@ -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
+
diff --git a/0002-button-Remove-unnecessary-queue_redraw-calls.patch b/0002-button-Remove-unnecessary-queue_redraw-calls.patch
new file mode 100644
index 0000000..0a2742a
--- /dev/null
+++ b/0002-button-Remove-unnecessary-queue_redraw-calls.patch
@@ -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
+
diff --git a/0003-Adwaita-update-the-last-cases-for-checked.patch b/0003-Adwaita-update-the-last-cases-for-checked.patch
new file mode 100644
index 0000000..5a79b21
--- /dev/null
+++ b/0003-Adwaita-update-the-last-cases-for-checked.patch
@@ -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
+
diff --git a/0004-Adwaita-have-an-unchecked-state-for-radio-checks-in-.patch b/0004-Adwaita-have-an-unchecked-state-for-radio-checks-in-.patch
new file mode 100644
index 0000000..0f08580
--- /dev/null
+++ b/0004-Adwaita-have-an-unchecked-state-for-radio-checks-in-.patch
@@ -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
+
diff --git a/gtk3.spec b/gtk3.spec
index ba8c936..06a3e54 100644
--- a/gtk3.spec
+++ b/gtk3.spec
@@ -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
bgstack15