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 +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 +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 +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 +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 - 3.13.7-2 +- Backport a few upstream fixes for checkboxes + * Sun Aug 17 2014 Kalev Lember - 3.13.7-1 - Update to 3.13.7