[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&GTK_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
+-            else if( state&GTK_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&GTK_STATE_FLAG_INCONSISTENT ) shadow = GTK_SHADOW_ETCHED_IN;
+-            else if( state&GTK_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&GTK_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&GTK_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