[oxygen-gtk3] pull in recent batch of upstream fixes
Rex Dieter
rdieter at fedoraproject.org
Wed Sep 3 18:42:35 UTC 2014
commit 07b65e0bc3bb69a52701389b795a4b5dcfb5563c
Author: Rex Dieter <rdieter at math.unl.edu>
Date: Wed Sep 3 13:42:28 2014 -0500
pull in recent batch of upstream fixes
- particularly, to support GTK_STATE_FLAG_CHECKED
...ndle-GTK_STATE_FLAG_CHECKED-when-renderin.patch | 58 ++++++++
0002-fixed-progressbars-rendering.patch | 102 +++++++++++++++
...-latest-changes-behind-gtk3-version-check.patch | 138 ++++++++++++++++++++
...gtk3-versions-do-not-check-window-s-event.patch | 42 ++++++
oxygen-gtk3.spec | 14 ++-
5 files changed, 352 insertions(+), 2 deletions(-)
---
diff --git a/0001-properly-handle-GTK_STATE_FLAG_CHECKED-when-renderin.patch b/0001-properly-handle-GTK_STATE_FLAG_CHECKED-when-renderin.patch
new file mode 100644
index 0000000..c640fe0
--- /dev/null
+++ b/0001-properly-handle-GTK_STATE_FLAG_CHECKED-when-renderin.patch
@@ -0,0 +1,58 @@
+From 63fbf144e0ed98a9c33b7605f0cee979e6840319 Mon Sep 17 00:00:00 2001
+From: Hugo Pereira Da Costa <hugo.pereira at free.fr>
+Date: Mon, 25 Aug 2014 07:34:35 +0200
+Subject: [PATCH 1/4] properly handle GTK_STATE_FLAG_CHECKED when rendering
+ check buttons or radio buttons CCBUG: 338538
+
+---
+ src/oxygenstyleoptions.h | 4 ++--
+ src/oxygenthemingengine.cpp | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/oxygenstyleoptions.h b/src/oxygenstyleoptions.h
+index 52334df..a2712f8 100644
+--- a/src/oxygenstyleoptions.h
++++ b/src/oxygenstyleoptions.h
+@@ -76,7 +76,7 @@ namespace Oxygen
+ if( flags & GTK_STATE_FLAG_INSENSITIVE ) (*this) |= Disabled;
+ if( flags & GTK_STATE_FLAG_PRELIGHT ) (*this) |= Hover;
+ if( flags & GTK_STATE_FLAG_SELECTED ) (*this) |= (Selected|Active);
+- if( flags & GTK_STATE_FLAG_ACTIVE ) (*this) |= Sunken;
++ if( flags & ( GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_CHECKED ) ) (*this) |= Sunken;
+
+ // TODO: check whether one should use this, or gtk_widget_has_focus
+ if( flags & GTK_STATE_FLAG_FOCUSED ) (*this) |= Focus;
+@@ -90,7 +90,7 @@ namespace Oxygen
+ if( flags & GTK_STATE_FLAG_INSENSITIVE ) (*this) |= Disabled;
+ if( flags & GTK_STATE_FLAG_PRELIGHT ) (*this) |= Hover;
+ if( flags & GTK_STATE_FLAG_SELECTED ) (*this) |= (Selected|Active);
+- if( flags & GTK_STATE_FLAG_ACTIVE ) (*this) |= Sunken;
++ if( flags & ( GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_CHECKED ) ) (*this) |= Sunken;
+ if( flags & GTK_STATE_FLAG_FOCUSED ) (*this) |= Focus;
+ else if( GTK_IS_WIDGET( widget ) && gtk_widget_has_focus(widget) ) (*this)|=Focus;
+ }
+diff --git a/src/oxygenthemingengine.cpp b/src/oxygenthemingengine.cpp
+index 0e6382e..39d02d2 100644
+--- a/src/oxygenthemingengine.cpp
++++ b/src/oxygenthemingengine.cpp
+@@ -1868,7 +1868,7 @@ namespace Oxygen
+ // shadow type defines checkmark presence and type
+ GtkShadowType shadow( GTK_SHADOW_OUT );
+ if( state>K_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
+- else if( state>K_STATE_FLAG_ACTIVE ) shadow = GTK_SHADOW_IN;
++ else if( state&(GTK_STATE_FLAG_ACTIVE|GTK_STATE_FLAG_CHECKED) ) shadow = GTK_SHADOW_IN;
+
+ Style::instance().renderCheckBox( widget, context, x, y, w, h, shadow, options, data );
+
+@@ -1955,7 +1955,7 @@ namespace Oxygen
+ // shadow type defines checkmark presence and type
+ GtkShadowType shadow( GTK_SHADOW_OUT );
+ if( state>K_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
+- else if( state>K_STATE_FLAG_ACTIVE ) shadow = GTK_SHADOW_IN;
++ else if( state&(GTK_STATE_FLAG_ACTIVE|GTK_STATE_FLAG_CHECKED) ) shadow = GTK_SHADOW_IN;
+ Style::instance().renderRadioButton( widget, context, x, y, w, h, shadow, options, data );
+
+ } else {
+--
+1.9.3
+
diff --git a/0002-fixed-progressbars-rendering.patch b/0002-fixed-progressbars-rendering.patch
new file mode 100644
index 0000000..00f9dd0
--- /dev/null
+++ b/0002-fixed-progressbars-rendering.patch
@@ -0,0 +1,102 @@
+From 49a596f12977e4646522a8140f5a27e36b15de5b Mon Sep 17 00:00:00 2001
+From: Hugo Pereira Da Costa <hugo.pereira at free.fr>
+Date: Mon, 25 Aug 2014 08:02:56 +0200
+Subject: [PATCH 2/4] fixed progressbars rendering
+
+---
+ src/oxygenthemingengine.cpp | 40 +++++++++++++++++++++++++++++++++-------
+ 1 file changed, 33 insertions(+), 7 deletions(-)
+
+diff --git a/src/oxygenthemingengine.cpp b/src/oxygenthemingengine.cpp
+index 39d02d2..a5810fd 100644
+--- a/src/oxygenthemingengine.cpp
++++ b/src/oxygenthemingengine.cpp
+@@ -335,7 +335,7 @@ namespace Oxygen
+
+ } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_NOTEBOOK ) ) {
+
+- // no need to render anything for notebook gradient
++ // no need to render anything for notebook background
+
+ } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_CELL ) ) {
+
+@@ -514,15 +514,15 @@ namespace Oxygen
+
+ // render background
+ if( !Gtk::gtk_widget_is_applet( widget ) )
+- {
++ {
+ #if OXYGEN_DEBUG
+ int r;
+ const GtkStateFlags state( gtk_theming_engine_get_state( engine ) );
+ gtk_theming_engine_get( engine, state, GTK_STYLE_PROPERTY_BORDER_RADIUS, &r, NULL );
+ std::cerr << "Oxygen::ThemingEngine::render_background - radius: " << r << std::endl;
+- #endif
+-
+- Style::instance().renderTitleBarBackground( context, widget, x, y, w, h );
++ #endif
++
++ Style::instance().renderTitleBarBackground( context, widget, x, y, w, h );
+ }
+
+ render_animated_button( context, widget );
+@@ -546,6 +546,7 @@ namespace Oxygen
+ } else if(
+ gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_BUTTON ) ||
+ gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_INFO ) ||
++ gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_PROGRESSBAR ) ||
+ gtk_widget_path_is_type( path, GTK_TYPE_INFO_BAR ) ||
+ gtk_widget_path_is_type( path, GTK_TYPE_BUTTON ) )
+ {
+@@ -701,6 +702,31 @@ namespace Oxygen
+ }
+
+
++ } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_PROGRESSBAR ) ) {
++
++ // lookup widget and state
++ GtkWidget* widget( Style::instance().widgetLookup().find( context, gtk_theming_engine_get_path( engine ) ) );
++ GtkStateFlags state( gtk_theming_engine_get_state( engine ) );
++
++ StyleOptions options( widget, state);
++ if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_VERTICAL ) ) options |= Vertical;
++
++ if( GTK_IS_PROGRESS_BAR(widget) )
++ {
++
++ y+=1; h-=2;
++ x+=1; w-=2;
++
++ } else if( GTK_IS_ENTRY( widget ) ) {
++
++ y+=1; h-=2;
++ x+=3; w-=6;
++
++ }
++
++ Style::instance().renderProgressBarHandle( context, x, y, w, h, options );
++ return;
++
+ }
+
+ // adjust shadow type for some known widgets
+@@ -2471,14 +2497,14 @@ namespace Oxygen
+ void render_activity( GtkThemingEngine* engine, cairo_t* context, gdouble x, gdouble y, gdouble w, gdouble h )
+ {
+
+- #if OXYGEN_DEBUG
++ // #if OXYGEN_DEBUG
+ std::cerr
+ << "Oxygen::render_activity-"
+ << " context: " << context
+ << " rect: " << Gtk::gdk_rectangle( x, y, w, h )
+ << " path: " << gtk_theming_engine_get_path(engine)
+ << std::endl;
+- #endif
++ // #endif
+
+ if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_PROGRESSBAR ) )
+ {
+--
+1.9.3
+
diff --git a/0003-protect-latest-changes-behind-gtk3-version-check.patch b/0003-protect-latest-changes-behind-gtk3-version-check.patch
new file mode 100644
index 0000000..6aa220f
--- /dev/null
+++ b/0003-protect-latest-changes-behind-gtk3-version-check.patch
@@ -0,0 +1,138 @@
+From 82842d3f5051b127f74f441155a4cf29dc3dcbed Mon Sep 17 00:00:00 2001
+From: Hugo Pereira Da Costa <hugo.pereira at free.fr>
+Date: Mon, 25 Aug 2014 08:19:01 +0200
+Subject: [PATCH 3/4] protect latest changes behind gtk3 version check
+
+---
+ src/oxygenstyleoptions.h | 13 +++++++++++--
+ src/oxygenthemingengine.cpp | 38 +++++++++++++++++++++++++-------------
+ 2 files changed, 36 insertions(+), 15 deletions(-)
+
+diff --git a/src/oxygenstyleoptions.h b/src/oxygenstyleoptions.h
+index a2712f8..5d7d7e3 100644
+--- a/src/oxygenstyleoptions.h
++++ b/src/oxygenstyleoptions.h
+@@ -76,7 +76,11 @@ namespace Oxygen
+ if( flags & GTK_STATE_FLAG_INSENSITIVE ) (*this) |= Disabled;
+ if( flags & GTK_STATE_FLAG_PRELIGHT ) (*this) |= Hover;
+ if( flags & GTK_STATE_FLAG_SELECTED ) (*this) |= (Selected|Active);
+- if( flags & ( GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_CHECKED ) ) (*this) |= Sunken;
++ if( flags & GTK_STATE_FLAG_ACTIVE ) (*this) |= Sunken;
++
++ #if GTK_CHECK_VERSION( 3, 13, 7 )
++ if( flags & GTK_STATE_FLAG_CHECKED ) (*this) |= Sunken;
++ #endif
+
+ // TODO: check whether one should use this, or gtk_widget_has_focus
+ if( flags & GTK_STATE_FLAG_FOCUSED ) (*this) |= Focus;
+@@ -90,7 +94,12 @@ namespace Oxygen
+ if( flags & GTK_STATE_FLAG_INSENSITIVE ) (*this) |= Disabled;
+ if( flags & GTK_STATE_FLAG_PRELIGHT ) (*this) |= Hover;
+ if( flags & GTK_STATE_FLAG_SELECTED ) (*this) |= (Selected|Active);
+- if( flags & ( GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_CHECKED ) ) (*this) |= Sunken;
++ if( flags & GTK_STATE_FLAG_ACTIVE ) (*this) |= Sunken;
++
++ #if GTK_CHECK_VERSION( 3, 13, 7 )
++ if( flags & GTK_STATE_FLAG_CHECKED ) (*this) |= Sunken;
++ #endif
++
+ if( flags & GTK_STATE_FLAG_FOCUSED ) (*this) |= Focus;
+ else if( GTK_IS_WIDGET( widget ) && gtk_widget_has_focus(widget) ) (*this)|=Focus;
+ }
+diff --git a/src/oxygenthemingengine.cpp b/src/oxygenthemingengine.cpp
+index a5810fd..1a22b1b 100644
+--- a/src/oxygenthemingengine.cpp
++++ b/src/oxygenthemingengine.cpp
+@@ -702,6 +702,7 @@ namespace Oxygen
+ }
+
+
++ #if GTK_CHECK_VERSION( 3, 13, 7 )
+ } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_PROGRESSBAR ) ) {
+
+ // lookup widget and state
+@@ -726,7 +727,7 @@ namespace Oxygen
+
+ Style::instance().renderProgressBarHandle( context, x, y, w, h, options );
+ return;
+-
++ #endif
+ }
+
+ // adjust shadow type for some known widgets
+@@ -1893,9 +1894,13 @@ namespace Oxygen
+
+ // shadow type defines checkmark presence and type
+ GtkShadowType shadow( GTK_SHADOW_OUT );
+- if( state>K_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
+- else if( state&(GTK_STATE_FLAG_ACTIVE|GTK_STATE_FLAG_CHECKED) ) shadow = GTK_SHADOW_IN;
++ if( state & GTK_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
++ else if( state & GTK_STATE_FLAG_ACTIVE ) shadow = GTK_SHADOW_IN;
++ #if GTK_CHECK_VERSION( 3, 13, 7 )
++ else if( state & GTK_STATE_FLAG_CHECKED ) shadow = GTK_SHADOW_IN;
++ #endif
+
++ // render
+ Style::instance().renderCheckBox( widget, context, x, y, w, h, shadow, options, data );
+
+ } else {
+@@ -1981,7 +1986,12 @@ namespace Oxygen
+ // shadow type defines checkmark presence and type
+ GtkShadowType shadow( GTK_SHADOW_OUT );
+ if( state>K_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
+- else if( state&(GTK_STATE_FLAG_ACTIVE|GTK_STATE_FLAG_CHECKED) ) shadow = GTK_SHADOW_IN;
++ else if( state & GTK_STATE_FLAG_ACTIVE ) shadow = GTK_SHADOW_IN;
++ #if GTK_CHECK_VERSION( 3, 13, 7 )
++ else if( state & GTK_STATE_FLAG_CHECKED ) shadow = GTK_SHADOW_IN;
++ #endif
++
++ // render
+ Style::instance().renderRadioButton( widget, context, x, y, w, h, shadow, options, data );
+
+ } else {
+@@ -2497,15 +2507,16 @@ namespace Oxygen
+ void render_activity( GtkThemingEngine* engine, cairo_t* context, gdouble x, gdouble y, gdouble w, gdouble h )
+ {
+
+- // #if OXYGEN_DEBUG
++ #if OXYGEN_DEBUG
+ std::cerr
+ << "Oxygen::render_activity-"
+ << " context: " << context
+ << " rect: " << Gtk::gdk_rectangle( x, y, w, h )
+ << " path: " << gtk_theming_engine_get_path(engine)
+ << std::endl;
+- // #endif
++ #endif
+
++ #if !GTK_CHECK_VERSION( 3, 13, 7 )
+ if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_PROGRESSBAR ) )
+ {
+
+@@ -2530,15 +2541,16 @@ namespace Oxygen
+ }
+
+ Style::instance().renderProgressBarHandle( context, x, y, w, h, options );
+-
+- } else {
+-
+- #if OXYGEN_DEBUG
+- std::cerr << "Oxygen::render_activity - Calling parentClass()->render_activity()\n";
+- #endif
+- ThemingEngine::parentClass()->render_activity( engine, context, x, y, w, h );
++ return;
+
+ }
++ #endif
++
++ // fallback to parent theme in all other cases
++ #if OXYGEN_DEBUG
++ std::cerr << "Oxygen::render_activity - Calling parentClass()->render_activity()\n";
++ #endif
++ ThemingEngine::parentClass()->render_activity( engine, context, x, y, w, h );
+
+ return;
+
+--
+1.9.3
+
diff --git a/0004-For-recent-gtk3-versions-do-not-check-window-s-event.patch b/0004-For-recent-gtk3-versions-do-not-check-window-s-event.patch
new file mode 100644
index 0000000..9afbf08
--- /dev/null
+++ b/0004-For-recent-gtk3-versions-do-not-check-window-s-event.patch
@@ -0,0 +1,42 @@
+From a734cebfd7c55b5e8e7124ef975c83134f0a3229 Mon Sep 17 00:00:00 2001
+From: Hugo Pereira Da Costa <hugo.pereira at free.fr>
+Date: Mon, 25 Aug 2014 08:36:32 +0200
+Subject: [PATCH 4/4] For recent gtk3 versions do not check window's event flag
+ any more: it is always set to true
+
+---
+ src/oxygenwindowmanager.cpp | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/oxygenwindowmanager.cpp b/src/oxygenwindowmanager.cpp
+index da5c9e5..d6cf52a 100644
+--- a/src/oxygenwindowmanager.cpp
++++ b/src/oxygenwindowmanager.cpp
+@@ -166,6 +166,8 @@ namespace Oxygen
+ if( GTK_IS_NOTEBOOK( parent ) && Gtk::gtk_notebook_is_tab_label( GTK_NOTEBOOK( parent ), widget ) )
+ { return false; }
+
++
++ #if GTK_CHECK_VERSION( 3, 13, 7 )
+ /*
+ check event mask (for now we only need to do that for GtkWindow)
+ The idea is that if the window has been set to receive button_press and button_release events
+@@ -173,9 +175,13 @@ namespace Oxygen
+ in which case we should not use them for grabbing
+ */
+ if(
++ ( GTK_IS_VIEWPORT( widget ) ) &&
++ ( gtk_widget_get_events ( widget ) & ( GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK ) ) )
++ #else
++ if(
+ ( GTK_IS_WINDOW( widget ) || GTK_IS_VIEWPORT( widget ) ) &&
+- ( gtk_widget_get_events ( widget ) &
+- ( GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK ) ) )
++ ( gtk_widget_get_events ( widget ) & ( GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK ) ) )
++ #endif
+ {
+ #if OXYGEN_DEBUG
+ std::cerr
+--
+1.9.3
+
diff --git a/oxygen-gtk3.spec b/oxygen-gtk3.spec
index 40ae58f..0c5500c 100644
--- a/oxygen-gtk3.spec
+++ b/oxygen-gtk3.spec
@@ -2,13 +2,19 @@
Name: oxygen-gtk3
Epoch: 1
Version: 1.4.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Oxygen GTK+3 theme
License: LGPLv2+
URL: https://projects.kde.org/projects/playground/artwork/oxygen-gtk
Source0: http://download.kde.org/stable/oxygen-gtk3/%{version}/src/%{name}-%{version}.tar.bz2
+## upstream patches (gtk3-1.4 branch)
+Patch1: 0001-properly-handle-GTK_STATE_FLAG_CHECKED-when-renderin.patch
+Patch2: 0002-fixed-progressbars-rendering.patch
+Patch3: 0003-protect-latest-changes-behind-gtk3-version-check.patch
+Patch4: 0004-For-recent-gtk3-versions-do-not-check-window-s-event.patch
+
BuildRequires: cmake
BuildRequires: gtk3-devel
@@ -27,7 +33,7 @@ otherwise breaks every time some setting is changed in KDE.
%prep
-%setup -q
+%autosetup -p1
%build
@@ -53,6 +59,10 @@ make install/fast DESTDIR=%{buildroot} -C %{_target_platform}
%changelog
+* Wed Sep 03 2014 Rex Dieter <rdieter at fedoraproject.org> 1:1.4.0-4
+- pull in recent batch of upstream fixes
+- particularly, to support GTK_STATE_FLAG_CHECKED
+
* Wed Sep 03 2014 Rex Dieter <rdieter at fedoraproject.org> 1:1.4.0-3
- .spec cleanup
More information about the scm-commits
mailing list