Hello community, here is the log from the commit of package oxygen-gtk2 for openSUSE:Factory checked in at 2012-05-15 17:42:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/oxygen-gtk2 (Old) and /work/SRC/openSUSE:Factory/.oxygen-gtk2.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "oxygen-gtk2", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/oxygen-gtk2/oxygen-gtk2.changes 2012-04-17 22:00:32.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.oxygen-gtk2.new/oxygen-gtk2.changes 2012-05-15 17:42:18.000000000 +0200 @@ -1,0 +2,7 @@ +Tue May 15 03:02:41 UTC 2012 - m...@suse.com + +- Update to version 1.2.4 + * Bugfix release + * Disable build oxygen-gtk-deco by default + +------------------------------------------------------------------- Old: ---- oxygen-gtk2-1.2.3.tar.bz2 New: ---- oxygen-gtk2-1.2.4.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ oxygen-gtk2.spec ++++++ --- /var/tmp/diff_new_pack.OknXt9/_old 2012-05-15 17:42:19.000000000 +0200 +++ /var/tmp/diff_new_pack.OknXt9/_new 2012-05-15 17:42:19.000000000 +0200 @@ -17,13 +17,13 @@ Name: oxygen-gtk2 -Version: 1.2.3 +Version: 1.2.4 Release: 0 Summary: A Port of the default KDE Widget Theme (Oxygen), to GTK 2.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-gtk2/1.2.3/src/%{name}-1.2.3.tar.bz2 +Source0: ftp://ftp.kde.org/pub/kde/stable/oxygen-gtk2/%{version}/src/%{name}-%{version}.tar.bz2 Source100: baselibs.conf BuildRequires: cmake BuildRequires: gcc-c++ @@ -90,7 +90,7 @@ This package contains the Oxygen gtk 2.x theme. %prep -%setup -q -n %{name}-1.2.3 +%setup -q %build mkdir -p build @@ -120,7 +120,6 @@ %files -n gtk2-theme-oxygen %defattr(-,root,root,-) %doc AUTHORS COPYING README TODO -%{_bindir}/oxygen-gtk-deco %{_bindir}/oxygen-gtk-demo %dir %{_datadir}/themes/oxygen-gtk %{_datadir}/themes/oxygen-gtk/gtk-2.0/ ++++++ oxygen-gtk2-1.2.3.tar.bz2 -> oxygen-gtk2-1.2.4.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/CMakeLists.txt new/oxygen-gtk2-1.2.4/CMakeLists.txt --- old/oxygen-gtk2-1.2.3/CMakeLists.txt 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/CMakeLists.txt 2012-05-14 08:39:08.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 "2" ) -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-gtk2-1.2.3/README new/oxygen-gtk2-1.2.4/README --- old/oxygen-gtk2-1.2.3/README 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/README 2012-05-14 08:39:08.000000000 +0200 @@ -81,6 +81,7 @@ OXYGEN_DISABLE_ARGB_HACK - set it to 1 to check if app will crash without the hack. Oxygen-GTK will print app name to report. OXYGEN_ARGB_DEBUG - set it to 1 to print all debug information concerning ARGB hack (mainly to debug blacklist logic). + OXYGEN_DISABLE_INNER_SHADOWS_HACK - set it to 1 to disable inner shadows hack, which might make some widgets render in a wrong way or not render at all III.2 DBus support ------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/demo/CMakeLists.txt new/oxygen-gtk2-1.2.4/demo/CMakeLists.txt --- old/oxygen-gtk2-1.2.3/demo/CMakeLists.txt 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/demo/CMakeLists.txt 2012-05-14 08:39:08.000000000 +0200 @@ -21,7 +21,9 @@ install( TARGETS oxygen-gtk-demo DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) ########### next target ############### -set( deco_test_SOURCES oxygengtkdeco_main.cpp ) -add_executable( oxygen-gtk-deco ${deco_test_SOURCES} ) -target_link_libraries( oxygen-gtk-deco ${GTK_LIBRARIES} ${CAIRO_LIBRARIES} ${X11_X11_LIB} ${CMAKE_DL_LIBS} ) -install( TARGETS oxygen-gtk-deco DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) +if( BUILD_DECO_TEST ) + set( deco_test_SOURCES oxygengtkdeco_main.cpp ) + add_executable( oxygen-gtk-deco ${deco_test_SOURCES} ) + target_link_libraries( oxygen-gtk-deco ${GTK_LIBRARIES} ${CAIRO_LIBRARIES} ${X11_X11_LIB} ${CMAKE_DL_LIBS} ) + install( TARGETS oxygen-gtk-deco DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) +endif( BUILD_DECO_TEST ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/rc/icons4 new/oxygen-gtk2-1.2.4/rc/icons4 --- old/oxygen-gtk2-1.2.3/rc/icons4 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/rc/icons4 2012-05-14 08:39:08.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-gtk2-1.2.3/src/CMakeLists.txt new/oxygen-gtk2-1.2.4/src/CMakeLists.txt --- old/oxygen-gtk2-1.2.3/src/CMakeLists.txt 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/CMakeLists.txt 2012-05-14 08:39:08.000000000 +0200 @@ -19,6 +19,7 @@ animations/oxygenmainwindowdata.cpp animations/oxygenmenubarstatedata.cpp animations/oxygenmenustatedata.cpp + animations/oxygenmenuitemengine.cpp animations/oxygenmenuitemdata.cpp animations/oxygenpaneddata.cpp animations/oxygensignal.cpp @@ -54,6 +55,7 @@ oxygenoptionmap.cpp oxygenpalette.cpp oxygenpathlist.cpp + oxygenpropertynames.cpp oxygenqtsettings.cpp oxygenrcstyle.cpp oxygenrgba.cpp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/src/animations/oxygenanimations.cpp new/oxygen-gtk2-1.2.4/src/animations/oxygenanimations.cpp --- old/oxygen-gtk2-1.2.3/src/animations/oxygenanimations.cpp 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/animations/oxygenanimations.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -147,7 +147,8 @@ // https://bugzilla.gnome.org/show_bug.cgi?id=643416 #if ENABLE_INNER_SHADOWS_HACK - _innerShadowHook.connect( "realize", (GSignalEmissionHook)innerShadowHook, this ); + if(!getenv("OXYGEN_DISABLE_INNER_SHADOWS_HACK")) + _innerShadowHook.connect( "realize", (GSignalEmissionHook)innerShadowHook, this ); #endif _sizeAllocationHook.connect( "size-allocate", (GSignalEmissionHook)sizeAllocationHook, this ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/src/animations/oxygendialogengine.cpp new/oxygen-gtk2-1.2.4/src/animations/oxygendialogengine.cpp --- old/oxygen-gtk2-1.2.3/src/animations/oxygendialogengine.cpp 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/animations/oxygendialogengine.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -73,12 +73,17 @@ #if OXYGEN_DEBUG std::cerr << "DialogEngine::registerWidget - numOfResponsesFound: " << numOfResponsesFound << std::endl; - for(int i=0; i<numOfResponseIDs; i++) - { - std::cerr << Gtk::TypeNames::response( responses[i] ) << ", "; - if(i==numOfResponsesFound-1) std::cerr<<"_END_of_found_,"; - } - std::cerr << "\n\n"; + std::cerr << "List of responses found: { "; + + for(int i=0; i<numOfResponsesFound; i++) + { std::cerr << Gtk::TypeNames::response( responses[i] ) << (i==numOfResponsesFound-1 ? " " :", "); } + + std::cerr << "}; remaining in the list: { "; + + for(int i=numOfResponsesFound; i<numOfResponseIDs; i++) + { std::cerr << Gtk::TypeNames::response( responses[i] ) << (i==numOfResponseIDs-1 ? " " :", "); } + + std::cerr << "}\n"; #endif // change order diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/src/animations/oxygeninnershadowdata.cpp new/oxygen-gtk2-1.2.4/src/animations/oxygeninnershadowdata.cpp --- old/oxygen-gtk2-1.2.3/src/animations/oxygeninnershadowdata.cpp 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/animations/oxygeninnershadowdata.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -85,7 +85,7 @@ void InnerShadowData::registerChild( GtkWidget* widget ) { - #if GTK_CHECK_VERSION(2,22,0) + #if ENABLE_INNER_SHADOWS_HACK // make sure widget is not already in map if( _childrenData.find( widget ) != _childrenData.end() ) return; @@ -127,6 +127,7 @@ //________________________________________________________________________________ void InnerShadowData::unregisterChild( GtkWidget* widget ) { + #if ENABLE_INNER_SHADOWS_HACK ChildDataMap::iterator iter( _childrenData.find( widget ) ); if( iter == _childrenData.end() ) return; @@ -141,11 +142,13 @@ iter->second.disconnect( widget ); _childrenData.erase( iter ); + #endif } //________________________________________________________________________________ void InnerShadowData::ChildData::disconnect( GtkWidget* widget ) { + #if ENABLE_INNER_SHADOWS_HACK // disconnect signals _unrealizeId.disconnect(); @@ -164,6 +167,8 @@ // restore compositing if different from initial state if( GDK_IS_WINDOW( window ) && !gdk_window_is_destroyed(window) && gdk_window_get_composited( window ) != _initiallyComposited ) { gdk_window_set_composited( window, _initiallyComposited ); } + + #endif } //____________________________________________________________________________________________ @@ -183,7 +188,7 @@ gboolean InnerShadowData::targetExposeEvent( GtkWidget* widget, GdkEventExpose* event, gpointer ) { - #if GTK_CHECK_VERSION(2,24,0) + #if ENABLE_INNER_SHADOWS_HACK GtkWidget* child=gtk_bin_get_child(GTK_BIN(widget)); GdkWindow* window=gtk_widget_get_window(child); @@ -328,7 +333,7 @@ allocation.x-offsetX, allocation.y-offsetY, allocation.width+offsetX*2, allocation.height+offsetY*2, options, data ); - #endif // Gtk version + #endif // enable inner shadows hack // let the event propagate return FALSE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/src/animations/oxygenmenuitemengine.cpp new/oxygen-gtk2-1.2.4/src/animations/oxygenmenuitemengine.cpp --- old/oxygen-gtk2-1.2.3/src/animations/oxygenmenuitemengine.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/oxygen-gtk2-1.2.4/src/animations/oxygenmenuitemengine.cpp 2012-05-14 08:39:08.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-gtk2-1.2.3/src/animations/oxygenmenuitemengine.h new/oxygen-gtk2-1.2.4/src/animations/oxygenmenuitemengine.h --- old/oxygen-gtk2-1.2.3/src/animations/oxygenmenuitemengine.h 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/animations/oxygenmenuitemengine.h 2012-05-14 08:39:08.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-gtk2-1.2.3/src/oxygenpropertynames.cpp new/oxygen-gtk2-1.2.4/src/oxygenpropertynames.cpp --- old/oxygen-gtk2-1.2.3/src/oxygenpropertynames.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/oxygen-gtk2-1.2.4/src/oxygenpropertynames.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -0,0 +1,34 @@ +/* +* oxygenpropertynames.cpp +* pass some window mouse press/release/move event actions to window manager +* ------------------- +* +* 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-gtk2-1.2.3/src/oxygenpropertynames.h new/oxygen-gtk2-1.2.4/src/oxygenpropertynames.h --- old/oxygen-gtk2-1.2.3/src/oxygenpropertynames.h 1970-01-01 01:00:00.000000000 +0100 +++ new/oxygen-gtk2-1.2.4/src/oxygenpropertynames.h 2012-05-14 08:39:08.000000000 +0200 @@ -0,0 +1,43 @@ +#ifndef oxygenpropertynames_h +#define oxygenpropertynames_h + +/* +* oxygenpropertynames.h +* pass some window mouse press/release/move event actions to window manager +* ------------------- +* +* 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-gtk2-1.2.3/src/oxygenstyle.cpp new/oxygen-gtk2-1.2.4/src/oxygenstyle.cpp --- old/oxygen-gtk2-1.2.3/src/oxygenstyle.cpp 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/oxygenstyle.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -2605,7 +2605,7 @@ pango_font_description_set_family( fdesc, font.family().c_str() ); pango_font_description_set_weight( fdesc, PangoWeight( (font.weight()+2)*10 ) ); pango_font_description_set_style( fdesc, font.italic() ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL ); - pango_font_description_set_size( fdesc, int(font.size()*PANGO_SCALE) ); + pango_font_description_set_absolute_size( fdesc, int(font.size()*PANGO_SCALE) ); PangoLayout* layout( pango_cairo_create_layout(context) ); pango_layout_set_text( layout,caption, -1 ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/src/oxygenstylewrapper.cpp new/oxygen-gtk2-1.2.4/src/oxygenstylewrapper.cpp --- old/oxygen-gtk2-1.2.3/src/oxygenstylewrapper.cpp 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/oxygenstylewrapper.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -1198,6 +1198,9 @@ // add mask if needed if( GTK_IS_MENU(widget) ) { + + Style::instance().animations().menuItemEngine().registerMenu( widget ); + Style::instance().animations().widgetSizeEngine().registerWidget( widget ); const bool wasAlpha(Style::instance().animations().widgetSizeEngine().wasAlpha(widget)); if( !(options&Alpha) ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oxygen-gtk2-1.2.3/src/oxygenwindowmanager.cpp new/oxygen-gtk2-1.2.4/src/oxygenwindowmanager.cpp --- old/oxygen-gtk2-1.2.3/src/oxygenwindowmanager.cpp 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/oxygenwindowmanager.cpp 2012-05-14 08:39:08.000000000 +0200 @@ -26,6 +26,7 @@ */ #include "oxygenwindowmanager.h" +#include "oxygenpropertynames.h" #include "oxygenstyle.h" #include "config.h" @@ -85,10 +86,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 ) ); @@ -105,6 +124,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 @@ -154,6 +180,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; @@ -180,6 +241,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 ) { @@ -572,6 +640,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-gtk2-1.2.3/src/oxygenwindowmanager.h new/oxygen-gtk2-1.2.4/src/oxygenwindowmanager.h --- old/oxygen-gtk2-1.2.3/src/oxygenwindowmanager.h 2012-04-13 14:55:44.000000000 +0200 +++ new/oxygen-gtk2-1.2.4/src/oxygenwindowmanager.h 2012-05-14 08:39:08.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 { @@ -237,9 +249,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