--- /dev/null
+From 75d1884df6740c268b665935af909a9a1e1ef6be Mon Sep 17 00:00:00 2001
+From: Hugo Pereira Da Costa <hugo.pereira@free.fr>
+Date: Fri, 14 Nov 2014 18:37:33 +0100
+Subject: update spinner code (copied from Adwaita) to have working spinner for
+ gtk+-3.14 BUG: 340901
+
+---
+ rc/gtk-spinner.css | 128 +++++++++--------------------------------------------
+ 1 file changed, 20 insertions(+), 108 deletions(-)
+
+diff --git a/rc/gtk-spinner.css b/rc/gtk-spinner.css
+index f90a8d4..d20264f 100644
+--- a/rc/gtk-spinner.css
++++ b/rc/gtk-spinner.css
+@@ -1,114 +1,26 @@
+-/* spinners */
+-/*
+-this is copied from Adwaita.
+-cannot be implemented in the code because of the 'new' way gtk3 renders spinners
+-*/
+-@keyframes spinner {
+- 0.00% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)); }
+-
+- 12.5% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)); }
+-
+- 25.0% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)); }
+-
+- 37.5% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)); }
+-
+- 50.0% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)); }
+-
+- 62.5% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)); }
+-
+- 75.0% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)); }
+-
+- 87.5% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)); }
++/*********************
++ * Spinner Animation *
++ *********************/
++@keyframes spin
++{
++ to { -gtk-icon-transform: rotate(1turn); }
++}
+
+- 100% { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)); }
++.spinner
++{
++ background-image: none;
++ background-color: blue;
++ opacity: 0;
++ -gtk-icon-source: -gtk-icontheme("process-working-symbolic");
+ }
+
+-.spinner {
+- background-color: transparent;
+- background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent));
+- background-position: 14% 14%, 0% 50%, 14% 86%, 50% 100%, 86% 86%, 100% 50%, 86% 14%, 50% 0%;
+- background-size: 20% 20%;
+- background-repeat: no-repeat;
++.spinner:active
++{
++ opacity: 1;
++ animation: spin 1s linear infinite;
+ }
+
+-.spinner:active {
+- background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.875)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.750)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.625)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.500)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.375)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.250)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(alpha(currentColor, 0.125)), to(transparent)),
+- -gtk-gradient(radial, center center, 0, center center, 0.5, to(currentColor), to(transparent));
+- animation: spinner 1s infinite linear;
++.spinner:active:insensitive
++{
++ opacity: 0.5;
+ }
+--
+cgit v0.11.2
--- /dev/null
+From ef3c0cdfa18a6f612e5ba84e42bcd288374669fb Mon Sep 17 00:00:00 2001
+From: Hugo Pereira Da Costa <hugo.pereira.da.costa@gmail.com>
+Date: Thu, 6 Apr 2017 17:32:51 +0200
+Subject: Patch from Matt Whitlock to fix crash in ecclipse about invalid
+ columns. BUG: 338012
+
+---
+ src/oxygengtkcellinfo.cpp | 78 +++++++++++++++++++----------------------------
+ src/oxygengtkcellinfo.h | 22 ++++++++-----
+ 2 files changed, 46 insertions(+), 54 deletions(-)
+
+diff --git a/src/oxygengtkcellinfo.cpp b/src/oxygengtkcellinfo.cpp
+index 52e0d34..8118143 100644
+--- a/src/oxygengtkcellinfo.cpp
++++ b/src/oxygengtkcellinfo.cpp
+@@ -31,38 +31,41 @@ namespace Oxygen
+ //____________________________________________________________________________
+ Gtk::CellInfo::CellInfo( GtkTreeView* treeView, int x, int y, int w, int h ):
+ _path(0L),
+- _column(0L)
++ _column(-1)
+ {
++ GtkTreeViewColumn *column( 0L );
+
+ /*
+ four attempts are made to get the path from any corner of the rectangle passed in arguments.
+ This is necessary to handle half-hidden cells
+ */
+- gtk_tree_view_get_path_at_pos( treeView, (gint)x+1, (gint)y+1, &_path, &_column, 0L, 0L );
+-
+- if( !_path ) gtk_tree_view_get_path_at_pos( treeView, (gint)x+1, (gint)y+h-1, &_path, &_column, 0L, 0L );
+- else return;
+-
+- if( !_path ) gtk_tree_view_get_path_at_pos( treeView, (gint)x+w-1, (gint)y+1, &_path, &_column, 0L, 0L );
+- else return;
+-
+- if( !_path ) gtk_tree_view_get_path_at_pos( treeView, (gint)x+w-1, (gint)y+h-1, &_path, &_column, 0L, 0L );
+- else return;
++ gtk_tree_view_get_path_at_pos( treeView, (gint)x+1, (gint)y+1, &_path, &column, 0L, 0L );
++ if( !_path ) {
++ gtk_tree_view_get_path_at_pos( treeView, (gint)x+1, (gint)y+h-1, &_path, &column, 0L, 0L );
++ if( !_path ) {
++ gtk_tree_view_get_path_at_pos( treeView, (gint)x+w-1, (gint)y+1, &_path, &column, 0L, 0L );
++ if( !_path ) {
++ gtk_tree_view_get_path_at_pos( treeView, (gint)x+w-1, (gint)y+h-1, &_path, &column, 0L, 0L );
++ if( !_path ) return;
++ }
++ }
++ }
+
++ _column = indexOfColumn( treeView, column );
+ }
+
+ //____________________________________________________________________________
+ bool Gtk::CellInfo::isLastVisibleColumn( GtkTreeView* treeView ) const
+ {
+- bool isLast( false );
++ bool isLast( true );
+ GList* columns( gtk_tree_view_get_columns( treeView ) );
+- for( GList *child = g_list_last( columns ); child; child = g_list_previous( child ) )
++ for( GList *child = g_list_nth( columns, _column ); ( child = g_list_next( child ) ); )
+ {
+ if( !GTK_IS_TREE_VIEW_COLUMN( child->data ) ) continue;
+ GtkTreeViewColumn* column( GTK_TREE_VIEW_COLUMN( child->data ) );
+ if( gtk_tree_view_column_get_visible( column ) )
+ {
+- isLast = (_column == column );
++ isLast = false;
+ break;
+ }
+
+@@ -75,15 +78,15 @@ namespace Oxygen
+ //____________________________________________________________________________
+ bool Gtk::CellInfo::isFirstVisibleColumn( GtkTreeView* treeView ) const
+ {
+- bool isFirst( false );
++ bool isFirst( true );
+ GList* columns( gtk_tree_view_get_columns( treeView ) );
+- for( GList *child = g_list_first( columns ); child; child = g_list_next( child ) )
++ for( GList *child = g_list_nth( columns, _column ); ( child = g_list_previous( child ) ); )
+ {
+ if( !GTK_IS_TREE_VIEW_COLUMN( child->data ) ) continue;
+ GtkTreeViewColumn* column( GTK_TREE_VIEW_COLUMN( child->data ) );
+ if( gtk_tree_view_column_get_visible( column ) )
+ {
+- isFirst= (_column == column );
++ isFirst = false;
+ break;
+ }
+
+@@ -98,34 +101,7 @@ namespace Oxygen
+ {
+ // check expander column
+ GtkTreeViewColumn* expanderColumn( gtk_tree_view_get_expander_column( treeView ) );
+- if( !expanderColumn || _column == expanderColumn ) return false;
+-
+- bool found( false );
+- bool isLeft( false );
+-
+- // get all columns
+- GList* columns( gtk_tree_view_get_columns( treeView ) );
+- for( GList *child = g_list_first( columns ); child; child = g_list_next( child ) )
+- {
+- if( !GTK_IS_TREE_VIEW_COLUMN( child->data ) ) continue;
+- GtkTreeViewColumn* column( GTK_TREE_VIEW_COLUMN( child->data ) );
+- if( column == expanderColumn )
+- {
+- if( found )
+- {
+-
+- isLeft = true;
+- break;
+-
+- } else break;
+-
+- } else if( found ) break;
+- else if( column == _column ) found = true;
+-
+- }
+-
+- if( columns ) g_list_free( columns );
+- return isLeft;
++ return expanderColumn && _column < indexOfColumn( treeView, expanderColumn );
+
+ }
+
+@@ -203,13 +179,23 @@ namespace Oxygen
+ {
+ GdkRectangle out( Gtk::gdk_rectangle() );
+ if( treeView && isValid() )
+- { gtk_tree_view_get_background_area( treeView, _path, _column, &out ); }
++ { gtk_tree_view_get_background_area( treeView, _path, gtk_tree_view_get_column( treeView, _column ), &out ); }
+
+ return out;
+
+ }
+
+ //____________________________________________________________________________
++ gint Gtk::CellInfo::indexOfColumn( GtkTreeView* treeView, GtkTreeViewColumn* column )
++ {
++ GList* columns( gtk_tree_view_get_columns( treeView ) );
++ if( !columns ) return -1;
++ gint index( g_list_index( columns, column ) );
++ g_list_free( columns );
++ return index;
++ }
++
++ //____________________________________________________________________________
+ Gtk::CellInfoFlags::CellInfoFlags( GtkTreeView* treeView, const CellInfo& cellInfo ):
+ _depth( cellInfo.depth() ),
+ _expanderSize(0),
+diff --git a/src/oxygengtkcellinfo.h b/src/oxygengtkcellinfo.h
+index 919d020..58dd441 100644
+--- a/src/oxygengtkcellinfo.h
++++ b/src/oxygengtkcellinfo.h
+@@ -47,7 +47,7 @@ namespace Oxygen
+ //! empty constructor
+ explicit CellInfo( void ):
+ _path( 0L ),
+- _column( 0L )
++ _column( -1 )
+ {}
+
+ //! copy constructor
+@@ -60,8 +60,12 @@ namespace Oxygen
+ /*! unfortunately the path retrieval does not always work because x and y must be positive */
+ explicit CellInfo( GtkTreeView* treeView, int x, int y ):
+ _path(0L),
+- _column(0L)
+- { gtk_tree_view_get_path_at_pos( treeView, x, y, &_path, &_column, 0L, 0L ); }
++ _column(-1)
++ {
++ GtkTreeViewColumn *column( 0L );
++ gtk_tree_view_get_path_at_pos( treeView, x, y, &_path, &column, 0L, 0L );
++ _column = indexOfColumn( treeView, column );
++ }
+
+ //! construct from tree view and rectangle
+ explicit CellInfo( GtkTreeView* treeView, int x, int y, int w, int h );
+@@ -92,7 +96,7 @@ namespace Oxygen
+ {
+ if( _path ) gtk_tree_path_free( _path );
+ _path = 0L;
+- _column = 0L;
++ _column = -1;
+ }
+
+ //!@name accessors
+@@ -100,7 +104,7 @@ namespace Oxygen
+
+ //! true if valid
+ bool isValid( void ) const
+- { return _path && _column; }
++ { return _path && _column >= 0; }
+
+ //! returns true if column is the last one
+ bool isLastVisibleColumn( GtkTreeView* ) const;
+@@ -110,7 +114,7 @@ namespace Oxygen
+
+ //! returns true if column is the one that contains expander
+ bool isExpanderColumn( GtkTreeView* treeView ) const
+- { return _column == gtk_tree_view_get_expander_column( treeView ); }
++ { return _column >= 0 && _column == indexOfColumn( treeView, gtk_tree_view_get_expander_column( treeView ) ); }
+
+ //! returs true if column is let of expander column
+ bool isLeftOfExpanderColumn( GtkTreeView* ) const;
+@@ -152,8 +156,8 @@ namespace Oxygen
+ //! path
+ GtkTreePath* _path;
+
+- //! column
+- GtkTreeViewColumn* _column;
++ //! column index
++ gint _column;
+
+ //! streamer
+ friend std::ostream& operator << (std::ostream& out, const CellInfo& info )
+@@ -168,6 +172,8 @@ namespace Oxygen
+ return out;
+ }
+
++ static gint indexOfColumn( GtkTreeView*, GtkTreeViewColumn* );
++
+ };
+
+ //! cell info flags
+--
+cgit v0.11.2