Hello community, here is the log from the commit of package oxygen-gtk3 for openSUSE:Factory checked in at 2012-05-15 17:42:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/oxygen-gtk3 (Old) and /work/SRC/openSUSE:Factory/.oxygen-gtk3.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "oxygen-gtk3", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/oxygen-gtk3/oxygen-gtk3.changes 2012-04-17 22:00:36.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.oxygen-gtk3.new/oxygen-gtk3.changes 2012-05-15 17:42:33.000000000 +0200 @@ -1,0 +2,6 @@ +Tue May 15 03:01:37 UTC 2012 - m...@suse.com + +- Update to version 1.0.4 + * Bugfix release + +------------------------------------------------------------------- Old: ---- oxygen-gtk3-1.0.3.tar.bz2 New: ---- oxygen-gtk3-1.0.4.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ oxygen-gtk3.spec ++++++ --- /var/tmp/diff_new_pack.QBFWeg/_old 2012-05-15 17:42:33.000000000 +0200 +++ /var/tmp/diff_new_pack.QBFWeg/_new 2012-05-15 17:42:33.000000000 +0200 @@ -17,13 +17,13 @@ Name: oxygen-gtk3 -Version: 1.0.3 +Version: 1.0.4 Release: 0 Summary: A Port of the default KDE Widget Theme (Oxygen), to GTK 3.x License: LGPL-2.1+ Group: System/GUI/KDE Url: https://projects.kde.org/projects/playground/artwork/oxygen-gtk/ -Source0: ftp://ftp.kde.org/pub/kde/stable/oxygen-gtk3/1.0.3/src/%{name}-1.0.3.tar.bz2 +Source0: ftp://ftp.kde.org/pub/kde/stable/oxygen-gtk3/%{version}/src/%{name}-%{version}.tar.bz2 Source100: baselibs.conf BuildRequires: cmake BuildRequires: gcc-c++ @@ -87,7 +87,7 @@ This package contains the Oxygen gtk 3.x theme. %prep -%setup -q -n %{name}-1.0.3 +%setup -q %build mkdir -p build ++++++ oxygen-gtk3-1.0.3.tar.bz2 -> oxygen-gtk3-1.0.4.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/CMakeLists.txt new/oxygen-gtk3-1.0.4/CMakeLists.txt --- old/oxygen-gtk3-1.0.3/CMakeLists.txt 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/CMakeLists.txt 2012-05-14 08:38:34.000000000 +0200 @@ -13,7 +13,7 @@ set( CPACK_PACKAGE_VENDOR "h...@oxygen-icons.org" ) set( CPACK_PACKAGE_VERSION_MAJOR "1" ) set( CPACK_PACKAGE_VERSION_MINOR "0" ) -set( CPACK_PACKAGE_VERSION_PATCH "3" ) +set( CPACK_PACKAGE_VERSION_PATCH "4" ) set( CPACK_SOURCE_IGNORE_FILES "build" "^${PROJECT_SOURCE_DIR}.*/.git/" ) ################################## @@ -46,6 +46,11 @@ set( OXYGEN_DEBUG_INNERSHADOWS 0 ) endif( NOT DEFINED OXYGEN_DEBUG_INNERSHADOWS ) +# Set to 1 to build windeco test app (normal users rarely need this) +if( NOT DEFINED BUILD_DECO_TEST ) + set( BUILD_DECO_TEST 0 ) +endif( NOT DEFINED BUILD_DECO_TEST ) + # Set to 1 to replace gtk stock icons # with oxygen-icons if( NOT DEFINED OXYGEN_ICON_HACK ) @@ -145,6 +150,7 @@ ######### message( "Flags: " ) message( " OXYGEN_DEBUG ${OXYGEN_DEBUG}" ) +message( " BUILD_DECO_TEST ${BUILD_DECO_TEST}" ) message( " OXYGEN_DEBUG_INNERSHADOWS ${OXYGEN_DEBUG_INNERSHADOWS}" ) message( " OXYGEN_ICON_HACK ${OXYGEN_ICON_HACK}" ) message( " OXYGEN_FORCE_KDE_ICONS_AND_FONTS ${OXYGEN_FORCE_KDE_ICONS_AND_FONTS}" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/rc/gtk.css new/oxygen-gtk3-1.0.4/rc/gtk.css --- old/oxygen-gtk3-1.0.3/rc/gtk.css 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/rc/gtk.css 2012-05-14 08:38:34.000000000 +0200 @@ -127,10 +127,16 @@ GtkFrame { padding: 4px; } GtkViewport { padding: 0px; } GtkProgressBar { padding: 0px; } +GtkAssistant .sidebar { padding: 4px; } /* switchs */ GtkSwitch { padding: 0px; } +/* spinners */ +.spinner:active { + transition: 750ms linear loop; +} + /* combo boxes */ GtkComboBox { padding: 0px 0px; } GtkComboBox>GtkFrame { padding: 0px 0px 0px 4px; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/rc/icons4 new/oxygen-gtk3-1.0.4/rc/icons4 --- old/oxygen-gtk3-1.0.3/rc/icons4 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/rc/icons4 2012-05-14 08:38:34.000000000 +0200 @@ -101,19 +101,22 @@ gtk-zoom-out actions/zoom-out.png stock_edit-bookmark actions/bookmarks-organize.png +gimp-info status/dialog-information.png +gimp-warning status/dialog-warning.png +gimp-reset actions/view-refresh.png +gimp-images mimetypes/image-x-generic.png +gimp-tool-options actions/configure.png + +gimp-edit NONE gimp-anchor NONE gimp-duplicate NONE -gimp-edit actions/edit.png -gimp-info actions/dialog-information.png gimp-linked NONE gimp-paste-as-new NONE gimp-paste-into NONE -gimp-reset actions/reload.png gimp-selection-stroke NONE gimp-to-path NONE gimp-to-selection NONE gimp-visible NONE -gimp-warning actions/dialog-warning.png gimp-selection-replace NONE gimp-selection-add NONE gimp-selection-subtract NONE @@ -134,10 +137,8 @@ gimp-resize NONE gimp-scale NONE gimp-selection-to-channel NONE -gimp-tool-options actions/tool.png gimp-device-status NONE gimp-layer-to-imagesize NONE -gimp-images mimetypes/image.png gimp-layers NONE gimp-channes NONE gimp-paths NONE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/CMakeLists.txt new/oxygen-gtk3-1.0.4/src/CMakeLists.txt --- old/oxygen-gtk3-1.0.3/src/CMakeLists.txt 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/CMakeLists.txt 2012-05-14 08:38:34.000000000 +0200 @@ -18,6 +18,7 @@ animations/oxygenmainwindowdata.cpp animations/oxygenmenubarstatedata.cpp animations/oxygenmenustatedata.cpp + animations/oxygenmenuitemengine.cpp animations/oxygenmenuitemdata.cpp animations/oxygenpaneddata.cpp animations/oxygensignal.cpp @@ -52,6 +53,7 @@ oxygenoptionmap.cpp oxygenpalette.cpp oxygenpathlist.cpp + oxygenpropertynames.cpp oxygenqtsettings.cpp oxygenrgba.cpp oxygenshadowconfiguration.cpp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/animations/oxygenanimations.cpp new/oxygen-gtk3-1.0.4/src/animations/oxygenanimations.cpp --- old/oxygen-gtk3-1.0.3/src/animations/oxygenanimations.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/animations/oxygenanimations.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -216,6 +216,21 @@ // check type if( !GTK_IS_WIDGET( widget ) ) return FALSE; + // comboboxes + /* + need to force the wrap-width property to 0, + otherwise the "appears-as-list" flag is not respected, which additionally breaks the widget rendering. + This has to be done soon enoug to avoid crash with latest gtk3 versions + */ + if( + GTK_IS_COMBO_BOX( widget ) && + Gtk::gtk_combobox_appears_as_list( widget ) && + !gtk_combo_box_get_has_entry( GTK_COMBO_BOX( widget ) ) ) + { + gtk_combo_box_set_wrap_width( GTK_COMBO_BOX( widget ), 0 ); + return TRUE; + } + // groupbox labels #if ENABLE_GROUPBOX_HACK if( static_cast<Animations*>( data )->groupBoxLabelEngine().contains( widget ) ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/animations/oxygencomboboxdata.cpp new/oxygen-gtk3-1.0.4/src/animations/oxygencomboboxdata.cpp --- old/oxygen-gtk3-1.0.3/src/animations/oxygencomboboxdata.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/animations/oxygencomboboxdata.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -47,12 +47,6 @@ // initialize cell view initializeCellView( widget ); - /* - need to force the wrap-width property to 0, - otherwise the "appears-as-list" flag is not respected, which additionally breaks the widget rendering. - */ - gtk_combo_box_set_wrap_width( GTK_COMBO_BOX( widget ), 0 ); - } //________________________________________________________________________________ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/animations/oxygenmenuitemengine.cpp new/oxygen-gtk3-1.0.4/src/animations/oxygenmenuitemengine.cpp --- old/oxygen-gtk3-1.0.3/src/animations/oxygenmenuitemengine.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/oxygen-gtk3-1.0.4/src/animations/oxygenmenuitemengine.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -0,0 +1,53 @@ +/* +* this file is part of the oxygen gtk engine +* Copyright (c) 2010 Hugo Pereira Da Costa <h...@oxygen-icons.org> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or(at your option ) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +* MA 02110-1301, USA. +*/ + +#include "oxygenmenuitemengine.h" +#include <iostream> + +namespace Oxygen +{ + + //_______________________________________________________________ + bool MenuItemEngine::registerMenu( GtkWidget* parent ) + { + + // check widget + if( !GTK_IS_MENU( parent ) ) return false; + + // keep track of added children + bool found( false ); + + // get children + GList* children( gtk_container_get_children( GTK_CONTAINER( parent ) ) ); + for( GList *child = g_list_first( children ); child; child = g_list_next( child ) ) + { + if( !GTK_IS_MENU_ITEM( child->data ) ) continue; + GtkWidget* widget( gtk_bin_get_child( GTK_BIN( child->data ) ) ); + if( registerWidget( widget ) ) found = true; + } + + // free list of children + if( children ) g_list_free( children ); + + return found; + + } + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/animations/oxygenmenuitemengine.h new/oxygen-gtk3-1.0.4/src/animations/oxygenmenuitemengine.h --- old/oxygen-gtk3-1.0.3/src/animations/oxygenmenuitemengine.h 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/animations/oxygenmenuitemengine.h 2012-05-14 08:38:34.000000000 +0200 @@ -51,6 +51,9 @@ virtual ~MenuItemEngine( void ) {} + //! register all menuItems children of a menu + virtual bool registerMenu( GtkWidget* ); + }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/animations/oxygenscrolledwindowdata.cpp new/oxygen-gtk3-1.0.4/src/animations/oxygenscrolledwindowdata.cpp --- old/oxygen-gtk3-1.0.3/src/animations/oxygenscrolledwindowdata.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/animations/oxygenscrolledwindowdata.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -72,7 +72,6 @@ static const char* widgetTypes[] = { "ExoIconView", "FMIconContainer", - "MessageList", "EMailDisplay", 0L }; for( unsigned int i = 0; widgetTypes[i]; i++ ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenanimationdata.h new/oxygen-gtk3-1.0.4/src/oxygenanimationdata.h --- old/oxygen-gtk3-1.0.3/src/oxygenanimationdata.h 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenanimationdata.h 2012-05-14 08:38:34.000000000 +0200 @@ -1,31 +1,31 @@ #ifndef oxygenanimationdata_h #define oxygenanimationdata_h -////////////////////////////////////////////////////////////////////////////// -// oxygenanimationdata.h -// animation modes -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa <hugo.pere...@free.fr> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// +/* +* oxygenanimationdata.h +* animation modes +* ------------------- +* +* Copyright (c) 2012 Hugo Pereira Da Costa <h...@oxygen-icons.org> +* +* Largely inspired from Qtcurve style +* Copyright (C) Craig Drummond, 2003 - 2010 craig.p.drumm...@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or( at your option ) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +* MA 02110-1301, USA. +*/ #include "oxygenanimationmodes.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenanimationmodes.h new/oxygen-gtk3-1.0.4/src/oxygenanimationmodes.h --- old/oxygen-gtk3-1.0.3/src/oxygenanimationmodes.h 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenanimationmodes.h 2012-05-14 08:38:34.000000000 +0200 @@ -1,31 +1,32 @@ #ifndef oxygenanimationmodes_h #define oxygenanimationmodes_h -////////////////////////////////////////////////////////////////////////////// -// oxygenanimationmodes.h -// animation modes -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa <hugo.pere...@free.fr> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -////////////////////////////////////////////////////////////////////////////// +/* +* oxygenanimationmodes.h +* animation modes +* ------------------- +* +* Copyright (c) 2012 Hugo Pereira Da Costa <h...@oxygen-icons.org> +* +* Largely inspired from Qtcurve style +* Copyright (C) Craig Drummond, 2003 - 2010 craig.p.drumm...@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or( at your option ) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +* MA 02110-1301, USA. +*/ + #include "oxygenflags.h" namespace Oxygen diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygengtkutils.cpp new/oxygen-gtk3-1.0.4/src/oxygengtkutils.cpp --- old/oxygen-gtk3-1.0.3/src/oxygengtkutils.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygengtkutils.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -34,7 +34,6 @@ namespace Oxygen { - GQuark Gtk::Quarks::_rcStyle = 0L; //_____________________________________________________________________________ std::ostream& operator << ( std::ostream& out, const GtkWidgetPath* path ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygengtkutils.h new/oxygen-gtk3-1.0.4/src/oxygengtkutils.h --- old/oxygen-gtk3-1.0.3/src/oxygengtkutils.h 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygengtkutils.h 2012-05-14 08:38:34.000000000 +0200 @@ -422,43 +422,6 @@ //! returns a widget which has response_id as response id for dialog GtkWidget* gtk_dialog_find_button( GtkDialog*, gint ); - //! store quarks - class Quarks - { - public: - - //! parent class - inline static GQuark rcStyle( void ) - { - - // try initialize - if( !_rcStyle ) - { _rcStyle = g_quark_try_string( "gtk-rc-style" ); } - - return _rcStyle; - - } - - - private: - - //! RC style quark - /*! - used to check whether an RCStyle was installed on a given widget or not. - See gtkwidet::gtk_widget_get_modifier_style() - */ - static GQuark _rcStyle; - - }; - - //! returns true if widget style color is modified - inline bool gtk_widget_style_is_modified( GtkWidget* widget, GtkStateType state, GtkRcFlags flag ) - { - const bool hasRCStyle( g_object_get_qdata (G_OBJECT (widget), Quarks::rcStyle() ) ); - return ( hasRCStyle && gtk_widget_get_modifier_style(widget)->color_flags[state]&flag ); - } - - } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenoption.h new/oxygen-gtk3-1.0.4/src/oxygenoption.h --- old/oxygen-gtk3-1.0.3/src/oxygenoption.h 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenoption.h 2012-05-14 08:38:34.000000000 +0200 @@ -82,12 +82,6 @@ template< typename T> T toVariant( T = T() ) const; - #if OXYGEN_DEBUG - protected: - const std::string& file( void ) const - { return _file; } - #endif - class Set: public std::set<Option> { public: @@ -101,6 +95,12 @@ }; + #if OXYGEN_DEBUG + protected: + const std::string& file( void ) const + { return _file; } + #endif + private: //! tag diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenpropertynames.cpp new/oxygen-gtk3-1.0.4/src/oxygenpropertynames.cpp --- old/oxygen-gtk3-1.0.3/src/oxygenpropertynames.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/oxygen-gtk3-1.0.4/src/oxygenpropertynames.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -0,0 +1,34 @@ +/* +* oxygenpropertynames.cpp +* hard-coded property names to disable some of oxygen features +* ------------------- +* +* Copyright (c) 2012 Hugo Pereira Da Costa <h...@oxygen-icons.org> +* +* Largely inspired from Qtcurve style +* Copyright (C) Craig Drummond, 2003 - 2010 craig.p.drumm...@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or( at your option ) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +* MA 02110-1301, USA. +*/ +#include "oxygenpropertynames.h" + +namespace Oxygen +{ + + const char* const PropertyNames::noAnimations = "_kde_no_animations"; + const char* const PropertyNames::noWindowGrab = "_kde_no_window_grab"; + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenpropertynames.h new/oxygen-gtk3-1.0.4/src/oxygenpropertynames.h --- old/oxygen-gtk3-1.0.3/src/oxygenpropertynames.h 1970-01-01 01:00:00.000000000 +0100 +++ new/oxygen-gtk3-1.0.4/src/oxygenpropertynames.h 2012-05-14 08:38:34.000000000 +0200 @@ -0,0 +1,43 @@ +#ifndef oxygenpropertynames_h +#define oxygenpropertynames_h + +/* +* oxygenpropertynames.h +* hard-coded property names to disable some of oxygen features +* ------------------- +* +* Copyright (c) 2012 Hugo Pereira Da Costa <h...@oxygen-icons.org> +* +* Largely inspired from Qtcurve style +* Copyright (C) Craig Drummond, 2003 - 2010 craig.p.drumm...@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or( at your option ) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +* MA 02110-1301, USA. +*/ + +namespace Oxygen +{ + + struct PropertyNames + { + + static const char* const noAnimations; + static const char* const noWindowGrab; + + }; + +} + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenqtsettings.cpp new/oxygen-gtk3-1.0.4/src/oxygenqtsettings.cpp --- old/oxygen-gtk3-1.0.3/src/oxygenqtsettings.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenqtsettings.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -511,7 +511,7 @@ GtkSettings* settings( gtk_settings_get_default() ); gtk_settings_set_string_property( settings, "gtk-icon-theme-name", _kdeIconTheme.c_str(), "oxygen-gtk" ); - gtk_settings_set_string_property( settings, "gtk-fallback-icon-theme-name", _kdeFallbackIconTheme.c_str(), "oxygen-gtk" ); + gtk_settings_set_string_property( settings, "gtk-fallback-icon-theme", _kdeFallbackIconTheme.c_str(), "oxygen-gtk" ); // load icon sizes from kde // const int desktopIconSize( _kdeGlobals.getOption( "[DesktopIcons]", "Size" ).toInt( 48 ) ); @@ -693,6 +693,11 @@ _css.addToCurrentSection( Gtk::CSSOption<std::string>( GTK_STYLE_PROPERTY_BACKGROUND_COLOR, _palette.color( Palette::Selected ) ) ); _css.addToCurrentSection( Gtk::CSSOption<std::string>( GTK_STYLE_PROPERTY_COLOR, _palette.color( Palette::SelectedText ) ) ); + // sidebars + _css.addSection( "GtkAssistant .sidebar" ); + _css.addToCurrentSection( Gtk::CSSOption<std::string>( GTK_STYLE_PROPERTY_BACKGROUND_COLOR, _palette.color( Palette::Disabled, Palette::Base ) ) ); + _css.addToCurrentSection( Gtk::CSSOption<std::string>( GTK_STYLE_PROPERTY_COLOR, _palette.color( Palette::Disabled, Palette::Text ) ) ); + // buttons and comboboxes _css.addSection( "GtkButton" ); _css.addToCurrentSection( Gtk::CSSOption<std::string>( GTK_STYLE_PROPERTY_BACKGROUND_COLOR, _palette.color( Palette::Button ) ) ); @@ -837,6 +842,10 @@ // don't check for section and tag presence - use default font if not present _WMFont=FontInfo::fromKdeOption( _kdeGlobals.getValue( "[WM]", "activeFont", "Sans Serif,8,-1,5,50,0,0,0,0,0" ) ); + + _css.addSection( "GtkAssistant .sidebar .highlight" ); + _css.addToCurrentSection( Gtk::CSSOption<std::string>( "font-weight", "bold" ) ); + } //_________________________________________________________ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenthemingengine.cpp new/oxygen-gtk3-1.0.4/src/oxygenthemingengine.cpp --- old/oxygen-gtk3-1.0.3/src/oxygenthemingengine.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenthemingengine.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -211,6 +211,10 @@ const GtkWidgetPath* path( gtk_theming_engine_get_path( engine ) ); GtkWidget* widget( Style::instance().widgetLookup().find( context, path ) ); + GtkWidget* toplevel=gtk_widget_get_toplevel(widget); + if(GTK_IS_DIALOG(toplevel)) + { Style::instance().animations().dialogEngine().registerWidget(toplevel); } + if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_TOOLTIP ) ) { @@ -240,7 +244,8 @@ } else if( widget && ( gtk_widget_path_is_type( path, GTK_TYPE_PANED ) || gtk_widget_path_is_type( path, GTK_TYPE_WINDOW ) || - gtk_widget_path_is_type( path, GTK_TYPE_VIEWPORT ) + gtk_widget_path_is_type( path, GTK_TYPE_VIEWPORT ) || + gtk_widget_path_is_type( path, GTK_TYPE_EVENT_BOX ) ) ) { @@ -254,6 +259,9 @@ if( pattern.isValid() ) { // if valid background image is found, fallback to parent style + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_background()\n"; + #endif ThemingEngine::parentClass()->render_background( engine, context, x, y, w, h ); return; } @@ -308,15 +316,6 @@ // no need to render anything for notebook gradient - } else if( - gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_SIDEBAR ) && - Gtk::gtk_widget_path_has_type( path, GTK_TYPE_ASSISTANT ) && - gtk_widget_path_is_type( path, GTK_TYPE_FRAME ) ) { - - // no background for assistant sidebar frame - Style::instance().fill( context, x, y, w, h, Style::instance().settings().palette().color( Palette::Base ) ); - return; - } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_CELL ) ) { GtkStateFlags state( gtk_theming_engine_get_state( engine ) ); @@ -468,8 +467,17 @@ { return; + } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_TOOLBAR ) ) { + // render background + if( !Gtk::gtk_widget_is_applet( widget ) ) + { Style::instance().renderWindowBackground( context, 0L, widget, x, y, w, h ); } + + // possible groupbox background + if( Gtk::gtk_widget_path_has_type( path, GTK_TYPE_FRAME ) ) + { Style::instance().renderGroupBoxBackground( context, widget, x, y, w, h, Blend ); } + render_animated_button( context, widget ); return; @@ -504,6 +512,9 @@ } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_background()\n"; + #endif ThemingEngine::parentClass()->render_background( engine, context, x, y, w, h ); } @@ -692,10 +703,11 @@ } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_BUTTON ) ) { - // no frame for scrollbar buttons and spin buttons + // no frame for scrollbar buttons, spin buttons, and menu buttons if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_SCROLLBAR ) || - gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_SPINBUTTON ) ) + gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_SPINBUTTON ) || + gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_MENU ) ) { return; } // pathbar buttons @@ -1033,6 +1045,9 @@ // add mask if needed if( GTK_IS_MENU(widget) ) { + + Style::instance().animations().menuItemEngine().registerMenu( widget ); + GdkWindow* window( gtk_widget_get_parent_window(widget) ); if( !(options&Alpha) ) { @@ -1530,6 +1545,9 @@ } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_frame_gap()\n"; + #endif ThemingEngine::parentClass()->render_frame_gap( engine, context, x, y, w, h, position, xy0_gap, xy1_gap ); } @@ -1743,6 +1761,9 @@ } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_check()\n"; + #endif ThemingEngine::parentClass()->render_check( engine, context, x, y, w, h ); } @@ -1827,6 +1848,9 @@ } else { // parent + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_option()\n"; + #endif ThemingEngine::parentClass()->render_option( engine, context, x, y, w, h ); } @@ -2153,6 +2177,9 @@ } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_layout()\n"; + #endif ThemingEngine::parentClass()->render_layout( engine, context, x, y, layout ); } @@ -2206,19 +2233,6 @@ cairo_restore( context ); return; - } else if( - gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_HIGHLIGHT ) && - Gtk::gtk_widget_path_has_type( path, GTK_TYPE_ASSISTANT ) ) - { - - // identify highlighted assistant labels and change font to bold - PangoAttrList* attributes( pango_layout_get_attributes( layout ) ); - if( !attributes ) attributes = pango_attr_list_new(); - pango_attr_list_insert( attributes, pango_attr_weight_new( PANGO_WEIGHT_BOLD ) ); - pango_layout_set_attributes( layout, attributes ); - render_layout_internal( engine, context, x, y, layout ); - return; - } } @@ -2282,6 +2296,9 @@ } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_slider()\n"; + #endif ThemingEngine::parentClass()->render_slider( engine, context, x, y, w, h, orientation ); } @@ -2294,12 +2311,13 @@ void render_handle( GtkThemingEngine* engine, cairo_t* context, gdouble x, gdouble y, gdouble w, gdouble h ) { + const GtkWidgetPath* path(gtk_theming_engine_get_path(engine)); #if OXYGEN_DEBUG std::cerr << "Oxygen::render_handle -" << " context: " << context << " rect: " << Gtk::gdk_rectangle( x, y, w, h ) - << " path: " << gtk_theming_engine_get_path(engine) + << " path: " << path << std::endl; #endif @@ -2326,14 +2344,22 @@ options, AnimationHover ) ); Style::instance().renderSplitter( context, x, y, w, h, options, data ); - } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_TOOLBAR) ) { + } else if( gtk_widget_path_is_type(path,GTK_TYPE_HANDLE_BOX) ) { + + // render background + if( !Gtk::gtk_widget_is_applet( widget ) ) + { Style::instance().renderWindowBackground( context, 0L, widget, x, y, w, h ); } + // handles StyleOptions options( widget, state ); - if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_VERTICAL ) ) options |= Vertical; + if(h>w) options|=Vertical; Style::instance().renderToolBarHandle( context, x, y, w, h, options ); } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_handle()\n"; + #endif ThemingEngine::parentClass()->render_handle( engine, context, x, y, w, h ); } @@ -2396,6 +2422,9 @@ } else { + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_activity()\n"; + #endif ThemingEngine::parentClass()->render_activity( engine, context, x, y, w, h ); } @@ -2404,12 +2433,51 @@ } + //___________________________________________________________ + static GdkPixbuf* render_stated_pixbuf( GdkPixbuf* source, GtkStateFlags state, bool useEffect ) + { + + #if OXYGEN_DEBUG + std::cerr + << "Oxygen::render_stated_pixbuf -" + << " state: " << state + << " useEffect: " << useEffect + << std::endl; + #endif + + // first make a copy + GdkPixbuf* stated( source ); + if( state & GTK_STATE_FLAG_INSENSITIVE ) + { + + stated = Gtk::gdk_pixbuf_set_alpha( source, 0.3 ); + gdk_pixbuf_saturate_and_pixelate( stated, stated, 0.1, false ); + + } else if( useEffect && (state>K_STATE_FLAG_PRELIGHT) ) { + + stated = gdk_pixbuf_copy( source ); + if(!Gtk::gdk_pixbuf_to_gamma( stated, 0.7 ) ) + { + // FIXME: correct the value to match KDE + /* + in fact KDE allows one to set many different effects on icon + not sure we want to copy this code all over the place, especially since nobody changes the default settings, + as far as I know */ + gdk_pixbuf_saturate_and_pixelate( source, stated, 1.2, false ); + } + + } + + return stated; + } + //________________________________________________________________________________________________ GdkPixbuf* render_icon_pixbuf( GtkThemingEngine *engine, const GtkIconSource *source, GtkIconSize size) { + #if OXYGEN_DEBUG std::cerr - << "Oxygen::render_icon_pixbuf-" + << "Oxygen::render_icon_pixbuf -" << " source: " << source << " size: " << size << " path: " << gtk_theming_engine_get_path(engine) @@ -2451,42 +2519,77 @@ GtkStateFlags state(gtk_theming_engine_get_state( engine ) ); const GtkWidgetPath* path( gtk_theming_engine_get_path( engine ) ); - // non-flat pushbuttons don't have any icon effect - /* since we can't access the button directly, we enable effect only for toolbutton widgets */ - const bool useEffect( - Style::instance().settings().useIconEffect() && - Gtk::gtk_widget_path_has_type( path, GTK_TYPE_TOOL_BUTTON ) ); - /* If the state was wildcarded, then generate a state. */ - GdkPixbuf *stated( scaled ); - if( gtk_icon_source_get_state_wildcarded( source ) ) + if( !gtk_icon_source_get_state_wildcarded( source ) ) return scaled; + else { + + // non-flat pushbuttons don't have any icon effect + /* since we can't access the button directly, we enable effect only for toolbutton widgets */ + const bool useEffect( + Style::instance().settings().useIconEffect() && + Gtk::gtk_widget_path_has_type( path, GTK_TYPE_TOOL_BUTTON ) ); + + /* If the state was wildcarded, then generate a state. */ + GdkPixbuf *stated( render_stated_pixbuf( scaled, state, useEffect ) ); + + // clean-up + if( stated != scaled ) + { g_object_unref( scaled ); } + + // return + return stated; + } + + } + + //_______________________________________________________________________________________________________________ + void render_icon( GtkThemingEngine* engine, cairo_t *context, GdkPixbuf* pixbuf, gdouble x, gdouble y ) + { + + #if OXYGEN_DEBUG + std::cerr + << "Oxygen::render_icon -" + << " context: " << context + << " pixbuf: " << pixbuf + << " position: (" << x << "," << y << ")" + << " path: " << gtk_theming_engine_get_path(engine) + << std::endl; + #endif + + // get state and path + GtkStateFlags state( gtk_theming_engine_get_state( engine ) ); + const GtkWidgetPath* path( gtk_theming_engine_get_path( engine ) ); + if( gtk_widget_path_is_type( path, GTK_TYPE_SPIN_BUTTON ) ) { - if( state>K_STATE_FLAG_INSENSITIVE ) - { + // need to apply state effect on pixbuf because it is not done by Gtk + // nor is render_icon_pixbuf called + // TODO: see if one can implement some sort of cache. - stated = Gtk::gdk_pixbuf_set_alpha( scaled, 0.3 ); - gdk_pixbuf_saturate_and_pixelate( stated, stated, 0.1, false ); - g_object_unref (scaled); + /* since we can't access the button directly, we enable effect only for toolbutton widgets */ + const bool useEffect( Style::instance().settings().useIconEffect() ); + GdkPixbuf* stated( render_stated_pixbuf( pixbuf, state, useEffect ) ); - } else if( useEffect && (state>K_STATE_FLAG_PRELIGHT) ) { + // call parent method with stated pixbuf + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_icon()\n"; + #endif + ThemingEngine::parentClass()->render_icon( engine, context, stated, x, y ); - stated = gdk_pixbuf_copy( scaled ); - if(!Gtk::gdk_pixbuf_to_gamma( stated, 0.7 ) ) - { - // FIXME: correct the value to match KDE - /* - in fact KDE allows one to set many different effects on icon - not sure we want to copy this code all over the place, especially since nobody changes the default settings, - as far as I know */ - gdk_pixbuf_saturate_and_pixelate( scaled, stated, 1.2, false ); - } - g_object_unref( scaled ); + // and cleanup + if( stated != pixbuf ) g_object_unref( stated ); + return; - } - } + } else { - return stated; + // call parent method + #if OXYGEN_DEBUG + std::cerr << "Calling parentClass()->render_icon()\n"; + #endif + ThemingEngine::parentClass()->render_icon( engine, context, pixbuf, x, y ); + return; + + } } @@ -2536,6 +2639,7 @@ theming_engine_class->render_handle = render_handle; theming_engine_class->render_activity = render_activity; theming_engine_class->render_icon_pixbuf = render_icon_pixbuf; + theming_engine_class->render_icon = render_icon; return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenwindecobutton.cpp new/oxygen-gtk3-1.0.4/src/oxygenwindecobutton.cpp --- old/oxygen-gtk3-1.0.3/src/oxygenwindecobutton.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenwindecobutton.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -114,6 +114,7 @@ cairo_stroke(context); cairo_arc_qt( context, 9,8,4, 135*M_PI/180, M_PI/4 ); + cairo_stroke( context ); cairo_move_to( context, 9,12 ); cairo_close_path( context ); cairo_stroke( context ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenwindowmanager.cpp new/oxygen-gtk3-1.0.4/src/oxygenwindowmanager.cpp --- old/oxygen-gtk3-1.0.3/src/oxygenwindowmanager.cpp 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenwindowmanager.cpp 2012-05-14 08:38:34.000000000 +0200 @@ -26,6 +26,7 @@ */ #include "oxygenwindowmanager.h" +#include "oxygenpropertynames.h" #include "oxygenstyle.h" #include "config.h" @@ -87,10 +88,28 @@ bool WindowManager::registerWidget( GtkWidget* widget ) { - if( _map.contains( widget ) || widgetIsBlackListed( widget ) ) return false; + if( _map.contains( widget ) ) return false; + + // check against black listed typenames + if( widgetIsBlackListed( widget ) ) + { + registerBlackListWidget( widget ); + return false; + } + + // check blocking property + if( g_object_get_data( G_OBJECT( widget ), PropertyNames::noWindowGrab ) ) + { + registerBlackListWidget( widget ); + return false; + } // Window with no decorations (set by app), let window manage it self - if( GTK_IS_WINDOW( widget ) && !gtk_window_get_decorated( GTK_WINDOW( widget ) ) ) return false; + if( GTK_IS_WINDOW( widget ) && !gtk_window_get_decorated( GTK_WINDOW( widget ) ) ) + { + registerBlackListWidget( widget ); + return false; + } // widgets used in tabs also must be ignored (happens, unfortunately) GtkWidget* parent( gtk_widget_get_parent( widget ) ); @@ -107,6 +126,13 @@ std::string( G_OBJECT_TYPE_NAME( widget ) ) == "GtkWindow" && (gtk_widget_get_events ( widget ) & (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK) ) ) + { + registerBlackListWidget( widget ); + return false; + } + + // check for blacklisted parent + if( widgetHasBlackListedParent( widget ) ) { return false; } #if OXYGEN_DEBUG @@ -156,6 +182,41 @@ } //_________________________________________________ + bool WindowManager::registerBlackListWidget( GtkWidget* widget ) + { + + // make sure that widget is not already connected + if( _blackListWidgets.find( widget ) != _blackListWidgets.end() ) return false; + + #if OXYGEN_DEBUG + std::cerr << "Oxygen::WindowManager::registerBlackListWidget - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; + #endif + + // connect destroy signal and insert in map + Signal destroyId; + destroyId.connect( G_OBJECT( widget ), "destroy", G_CALLBACK( wmBlackListDestroy ), this ); + _blackListWidgets.insert( std::make_pair( widget, destroyId ) ); + return true; + + } + + //_________________________________________________ + void WindowManager::unregisterBlackListWidget( GtkWidget* widget ) + { + + WidgetMap::iterator iter( _blackListWidgets.find( widget ) ); + if( iter == _blackListWidgets.end() ) return; + + #if OXYGEN_DEBUG + std::cerr << "Oxygen::WindowManager::unregisterBlackListWidget - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; + #endif + + iter->second.disconnect(); + _blackListWidgets.erase( widget ); + + } + + //_________________________________________________ void WindowManager::setMode( WindowManager::Mode mode ) { if( mode == _mode ) return; @@ -182,6 +243,13 @@ } //_________________________________________________ + gboolean WindowManager::wmBlackListDestroy( GtkWidget* widget, gpointer data ) + { + static_cast<WindowManager*>(data)->unregisterBlackListWidget( widget ); + return false; + } + + //_________________________________________________ gboolean WindowManager::wmButtonPress(GtkWidget *widget, GdkEventButton* event, gpointer data ) { @@ -597,6 +665,21 @@ } //_________________________________________________ + bool WindowManager::widgetHasBlackListedParent( GtkWidget* widget ) const + { + + #if OXYGEN_DEBUG + std::cerr << "Oxygen::WindowManager::widgetHasBlackListedParent - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; + #endif + + // loop over widget parent + for( GtkWidget* parent = gtk_widget_get_parent( widget ); parent; parent = gtk_widget_get_parent( parent ) ) + { if( _blackListWidgets.find( parent ) != _blackListWidgets.end() ) return true; } + + return false; + } + + //_________________________________________________ void WindowManager::initializeBlackList( void ) { // clear list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk3-1.0.3/src/oxygenwindowmanager.h new/oxygen-gtk3-1.0.4/src/oxygenwindowmanager.h --- old/oxygen-gtk3-1.0.3/src/oxygenwindowmanager.h 2012-04-13 15:02:08.000000000 +0200 +++ new/oxygen-gtk3-1.0.4/src/oxygenwindowmanager.h 2012-05-14 08:38:34.000000000 +0200 @@ -93,6 +93,9 @@ //! on window destroy static gboolean wmDestroy( GtkWidget*, gpointer ); + //! on window destroy + static gboolean wmBlackListDestroy( GtkWidget*, gpointer ); + //! delayed drag static gboolean startDelayedDrag( gpointer ); @@ -106,10 +109,16 @@ //! register widget /*! returns true if widget is effictively registered */ - virtual bool registerWidget( GtkWidget* ); + bool registerWidget( GtkWidget* ); //! unregister widget - virtual void unregisterWidget( GtkWidget* ); + void unregisterWidget( GtkWidget* ); + + //! register blacklist widget + bool registerBlackListWidget( GtkWidget* ); + + //! unregister blacklist widget + void unregisterBlackListWidget( GtkWidget* ); //! start dragging widget bool startDrag( GtkWidget*, GdkEventMotion* ); @@ -166,6 +175,9 @@ bool widgetIsBlackListed( GtkWidget* widget ) const { return std::find_if( _blackList.begin(), _blackList.end(), BlackListFTor( G_OBJECT( widget ) ) ) != _blackList.end(); } + //! return true if widget has a black listed parent + bool widgetHasBlackListedParent( GtkWidget* widget ) const; + //! stores connections class Data { @@ -240,9 +252,14 @@ int _x; int _y; - //! widget black list + //! widget typenames black-list std::vector<std::string> _blackList; + //! widget black-list + typedef std::map< GtkWidget*, Signal > WidgetMap; + WidgetMap _blackListWidgets; + + //! map widgets to data structure DataMap<Data> _map; -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org