[50042] trunk/dports/x11/qt3

takanori at macports.org takanori at macports.org
Thu Apr 23 02:50:19 PDT 2009


Revision: 50042
          http://trac.macports.org/changeset/50042
Author:   takanori at macports.org
Date:     2009-04-23 02:50:17 -0700 (Thu, 23 Apr 2009)
Log Message:
-----------
qt3:
- applied the following qt-copy patches:

  0078-argb-visual-hack.patch
  0079-compositing-types.patch
  0080-net-wm-sync-request.patch
  0082-fix-qdatetime-fromstring.diff
  0083-CVE-2007-4137.diff
  0084-compositing-properties.patch
  0085-fix-buildkey.diff
  0086-revert-qt-khmer-fix.diff
  0087-use-xrandr-1.2.diff
  0088-fix-xinput-clash.diff

Modified Paths:
--------------
    trunk/dports/x11/qt3/Portfile
    trunk/dports/x11/qt3/files/CompileScript.sh

Added Paths:
-----------
    trunk/dports/x11/qt3/files/qt-copy/
    trunk/dports/x11/qt3/files/qt-copy/0078-argb-visual-hack.patch
    trunk/dports/x11/qt3/files/qt-copy/0079-compositing-types.patch
    trunk/dports/x11/qt3/files/qt-copy/0080-net-wm-sync-request.patch
    trunk/dports/x11/qt3/files/qt-copy/0082-fix-qdatetime-fromstring.diff
    trunk/dports/x11/qt3/files/qt-copy/0083-CVE-2007-4137.diff
    trunk/dports/x11/qt3/files/qt-copy/0084-compositing-properties.patch
    trunk/dports/x11/qt3/files/qt-copy/0085-fix-buildkey.diff
    trunk/dports/x11/qt3/files/qt-copy/0086-revert-qt-khmer-fix.diff
    trunk/dports/x11/qt3/files/qt-copy/0087-use-xrandr-1.2.diff
    trunk/dports/x11/qt3/files/qt-copy/0088-fix-xinput-clash.diff

Removed Paths:
-------------
    trunk/dports/x11/qt3/files/175791_3.diff

Modified: trunk/dports/x11/qt3/Portfile
===================================================================
--- trunk/dports/x11/qt3/Portfile	2009-04-23 09:19:05 UTC (rev 50041)
+++ trunk/dports/x11/qt3/Portfile	2009-04-23 09:50:17 UTC (rev 50042)
@@ -1,11 +1,11 @@
 # $Id$
 
-#Synced with Fink, Version 3.3.8-1026
+#Synced with Fink, revision 1.25
 
 PortSystem 1.0
 name		qt3
 version		3.3.8
-revision	5
+revision	6
 categories	x11
 maintainers	nomaintainer
 description	Qt Tool Kit
@@ -31,10 +31,16 @@
 checksums	${distname}.tar.bz2 md5 cf3c43a7dfde5bfb76f8001102fe6e85 \
 		qt-upstream-patches-0004.tar.bz2 md5 1f27d5222813a0a29fe53fd8669e2239
 
+post-extract {
+    eval copy [glob ${filespath}/qt-copy/*] ${workpath}/patches/
+}
+
 patchfiles      qt3-tiger.patch dp01.patch
-set patchfiles2	175791_3.diff
 patch	{
 		foreach p ${patchfiles} { system "cd ${worksrcpath} && sed -e 's|@PREFIX@|${prefix}|g' < ${portpath}/${filesdir}/${p} | patch -p1" }
+                #if {[variant_isset x86_64]} {
+                #    system "perl -pi -e \"s,\\(int\\)owner\\, \\(int\\),\\(long\\)owner\\, \\(long\\),g\" ${worksrcpath}/src/tools/qmutex_unix.cpp"
+                #}
 		#system "perl -pi -e 's|cp \-P|/bin/cp \-RL|' ${worksrcpath}/qmake/Makefile.unix"
 
 		foreach p { patches/qt-3.3.4-print-CJK.patch \
@@ -70,12 +76,19 @@
 			    patches/0061-qscrollview-propagate-horizontal-wheelevent.patch \
 			    patches/0073-xinerama-aware-qpopup.patch \
 			    patches/0076-fix-qprocess.diff \
-			    patches/0077-utf8-decoder-fixes.diff } {
+			    patches/0077-utf8-decoder-fixes.diff
+			    patches/0078-argb-visual-hack.patch
+                            patches/0079-compositing-types.patch
+                            patches/0080-net-wm-sync-request.patch
+                            patches/0082-fix-qdatetime-fromstring.diff
+                            patches/0083-CVE-2007-4137.diff
+                            patches/0084-compositing-properties.patch
+                            patches/0085-fix-buildkey.diff
+                            patches/0086-revert-qt-khmer-fix.diff
+                            patches/0087-use-xrandr-1.2.diff
+                            patches/0088-fix-xinput-clash.diff} {
 			    	system "cd ${worksrcpath} && patch -p0 --fuzz=4 < ${workpath}/${p}"
 		}
-		foreach p ${patchfiles2} {
-			system "cd ${worksrcpath} && patch -p0 < ${portpath}/${filesdir}/${p}"
-		}
 }
 
 post-patch	{

Deleted: trunk/dports/x11/qt3/files/175791_3.diff
===================================================================
--- trunk/dports/x11/qt3/files/175791_3.diff	2009-04-23 09:19:05 UTC (rev 50041)
+++ trunk/dports/x11/qt3/files/175791_3.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -1,11 +0,0 @@
---- src/codecs/qutfcodec.cpp
-+++ src/codecs/qutfcodec.cpp
-@@ -165,7 +165,7 @@ public:
-     QString toUnicode(const char* chars, int len)
-     {
- 	QString result;
--	result.setLength( len ); // worst case
-+	result.setLength( len + 1 ); // worst case
- 	QChar *qch = (QChar *)result.unicode();
- 	uchar ch;
-         int error = -1;

Modified: trunk/dports/x11/qt3/files/CompileScript.sh
===================================================================
--- trunk/dports/x11/qt3/files/CompileScript.sh	2009-04-23 09:19:05 UTC (rev 50041)
+++ trunk/dports/x11/qt3/files/CompileScript.sh	2009-04-23 09:50:17 UTC (rev 50042)
@@ -70,6 +70,11 @@
 #fink
 #        # we have to force header/lib ordering or things get really wiggy
 #        # looks ugly, but it's better than patching the source
+#
+#        # TODO: also, can't change the -buildkey until the next major OS release, unless
+#        # I want to break binary-compat.  Wish I'd noticed it before it made it into
+#        # the wild.   Lookin' forward to 10.5!  :)
+#
 #        echo "yes" | ./configure $DEFINES \
 #                '-I$(QTDIR)/include' '-L$(QTDIR)/lib' \
 #                '-I%p/lib/freetype219/include' '-I%p/lib/freetype219/include/freetype2' '-L%p/lib/freetype219/lib' \
@@ -91,4 +96,12 @@
 	    '-I/usr/X11R6/include' '-L/usr/X11R6/lib' \
 	    $LIBRESOLV %c
 
+        # don't link against older versions of self
+        /usr/bin/find . -name Makefile -print0 | xargs -0 perl -pi -e 's,-L%p/lib/%n/lib,,g'
+        # attempt to counterfix qmake's warped fileFixify logic that makes install break
+        # when %p is a symlink and something exists already at -libdir or -datadir etc
+        # second, better attempt at unfixifying %p:
+        pushd %p; FixifiedSW=`/bin/pwd -P`; popd
+        /usr/bin/find . -name Makefile -print0 | xargs -0 perl -pi -e "s,\\$\\(INSTALL_ROOT\\)$FixifiedSW,\\$\\(INSTALL_ROOT\\)%p,g"
+
         __MAKE__

Added: trunk/dports/x11/qt3/files/qt-copy/0078-argb-visual-hack.patch
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0078-argb-visual-hack.patch	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0078-argb-visual-hack.patch	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,71 @@
+qt-bugs@ issue : none
+bugs.kde.org number : 83974
+applied: no
+author: Lubos Lunak <l.lunak at kde.org>
+
+An ugly hack to get real transparency in Konsole working somehow, with Qt not having
+any support for the ARGB visual. QApplication has one ctor that allows passing
+any X connection and X visual, but that has some side effects, so this patch
+adds a magic flag to turn the side effects off.
+
+
+--- src/kernel/qapplication.cpp.sav	2007-02-23 14:01:19.000000000 +0100
++++ src/kernel/qapplication.cpp	2007-05-29 15:42:39.000000000 +0200
+@@ -317,6 +317,7 @@ void qt_init( int *, char **, QApplicati
+ void qt_cleanup();
+ #if defined(Q_WS_X11)
+ void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE );
++void qt_init( int *, char **, Display* dpy, Qt::HANDLE, Qt::HANDLE );
+ #endif
+ Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop );
+ 
+@@ -905,7 +906,7 @@ QApplication::QApplication(Display *dpy,
+ 
+ 	qt_init( &argc, argv, GuiClient );
+     } else {
+-	qt_init(dpy, visual, colormap);
++	qt_init( &argc, argv, dpy, visual, colormap);
+     }
+ 
+     process_cmdline( &argc, argv );
+--- src/kernel/qapplication_x11.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qapplication_x11.cpp	2007-05-29 16:24:58.000000000 +0200
+@@ -196,6 +196,7 @@ static bool	noxim		= FALSE;	// connect t
+ static Display *appDpy		= 0;		// X11 application display
+ static char    *appDpyName	= 0;		// X11 display name
+ static bool	appForeignDpy	= FALSE;        // we didn't create display
++Q_EXPORT bool qt_no_foreign_hack = false;
+ static bool	appSync		= FALSE;	// X11 synchronization
+ #if defined(QT_DEBUG)
+ static bool	appNoGrab	= FALSE;	// X11 grabbing enabled
+@@ -1541,7 +1542,7 @@ void qt_init_internal( int *argcptr, cha
+     setlocale( LC_ALL, "" );		// use correct char set mapping
+     setlocale( LC_NUMERIC, "C" );	// make sprintf()/scanf() work
+ 
+-    if ( display ) {
++    if ( display && !qt_no_foreign_hack ) {
+ 	// Qt part of other application
+ 
+ 	appForeignDpy = TRUE;
+@@ -1698,7 +1699,9 @@ void qt_init_internal( int *argcptr, cha
+ 	// Connect to X server
+ 
+ 	if( qt_is_gui_used ) {
+-	    if ( ( appDpy = XOpenDisplay(appDpyName) ) == 0 ) {
++            if( display != NULL && qt_no_foreign_hack )
++                appDpy = display;
++	    else if ( ( appDpy = XOpenDisplay(appDpyName) ) == 0 ) {
+ 		qWarning( "%s: cannot connect to X server %s", appName,
+ 			  XDisplayName(appDpyName) );
+ 		qApp = 0;
+@@ -2345,6 +2348,10 @@ void qt_init( Display *display, Qt::HAND
+     qt_init_internal( 0, 0, display, visual, colormap );
+ }
+ 
++void qt_init( int *argcptr, char **argv, Display *display, Qt::HANDLE visual, Qt::HANDLE colormap )
++{
++    qt_init_internal( argcptr, argv, display, visual, colormap );
++}
+ 
+ /*****************************************************************************
+   qt_cleanup() - cleans up when the application is finished

Added: trunk/dports/x11/qt3/files/qt-copy/0079-compositing-types.patch
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0079-compositing-types.patch	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0079-compositing-types.patch	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,424 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: Lubos Lunak <l.lunak at kde.org>
+
+This patch adds support for window types used for compositing (popup menu, dropdown menu,
+tooltip, combobox, dnd).
+
+--- src/kernel/qdnd_x11.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qdnd_x11.cpp	2007-05-31 10:30:58.000000000 +0200
+@@ -261,6 +261,7 @@ public:
+ 	QWidget(QApplication::desktop()->screen( screen ),
+ 		0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 )
+     {
++    x11SetWindowType( X11WindowTypeDND );
+     }
+ 
+     void setPixmap(QPixmap pm, QPoint hot)
+@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint & 
+ 	// recreate the pixmap on the new screen...
+ 	delete qt_xdnd_deco;
+ 	qt_xdnd_deco = new QShapedPixmapWidget( screen );
++        qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
+ 	if (!QWidget::mouseGrabber()) {
+ 	    updatePixmap();
+ 	    qt_xdnd_deco->grabMouse();
+@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o
+ 
+     dragSource = (QWidget *)(object->parent());
+ 
++    qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
+     qApp->installEventFilter( this );
+     qt_xdnd_source_current_time = qt_x_time;
+     XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection,
+--- src/kernel/qapplication_x11.cpp.sav	2007-05-29 16:24:58.000000000 +0200
++++ src/kernel/qapplication_x11.cpp	2007-05-31 10:30:58.000000000 +0200
+@@ -268,6 +268,11 @@ Atom		qt_net_wm_window_type_menu	= 0;
+ Atom		qt_net_wm_window_type_utility	= 0;
+ Atom            qt_net_wm_window_type_splash    = 0;
+ Atom            qt_net_wm_window_type_override	= 0;	// KDE extension
++Atom            qt_net_wm_window_type_dropdown_menu = 0;
++Atom            qt_net_wm_window_type_popup_menu    = 0;
++Atom            qt_net_wm_window_type_tooltip   = 0;
++Atom            qt_net_wm_window_type_combo     = 0;
++Atom            qt_net_wm_window_type_dnd       = 0;
+ Atom		qt_net_wm_frame_strut		= 0;	// KDE extension
+ Atom		qt_net_wm_state_stays_on_top	= 0;	// KDE extension
+ Atom		qt_net_wm_pid		= 0;
+@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha
+ 	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility );
+ 	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash );
+ 	qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override );
++	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu );
++	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu );
++	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip );
++	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo );
++	qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd );
+ 	qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut );
+ 	qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP",
+ 			    &qt_net_wm_state_stays_on_top );
+--- src/kernel/qwidget_x11.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qwidget_x11.cpp	2007-05-31 10:30:58.000000000 +0200
+@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu;
+ extern Atom qt_net_wm_window_type_utility;
+ extern Atom qt_net_wm_window_type_splash;
+ extern Atom qt_net_wm_window_type_override;
++extern Atom qt_net_wm_window_type_dropdown_menu;
++extern Atom qt_net_wm_window_type_popup_menu;
++extern Atom qt_net_wm_window_type_combo;
++extern Atom qt_net_wm_window_type_dnd;
++extern Atom qt_net_wm_window_type_tooltip;
+ extern Atom qt_net_wm_pid;
+ extern Atom qt_net_wm_user_time;
+ extern Atom qt_enlightenment_desktop;
+@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i
+ 					 x11Colormap() );
+ #endif // QT_NO_XFTFREETYPE
+ 
+-    // NET window types
+-    long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
+-    int curr_wintype = 0;
+-
+     // NET window states
+     long net_winstates[6] = { 0, 0, 0, 0, 0, 0 };
+     int curr_winstate = 0;
+@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i
+ 	if ( testWFlags(WStyle_Splash) ) {
+             if (qt_net_supports(qt_net_wm_window_type_splash)) {
+                 clearWFlags( WX11BypassWM );
+-                net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
+ 	    } else {
+ 		setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder );
+ 	    }
+@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i
+ 	    mwmhints.decorations = 0L;
+ 	    mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS
+ 
+-	    if ( testWFlags( WStyle_NoBorder ) ) {
+-		// override netwm type - quick and easy for KDE noborder
+-		net_wintypes[curr_wintype++] = qt_net_wm_window_type_override;
+-	    } else {
+-		if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
+-		    mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
+-		    mwmhints.decorations |= (1L << 2); //  MWM_DECOR_RESIZEH
+-		}
++	    if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
++		mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
++		mwmhints.decorations |= (1L << 2); //  MWM_DECOR_RESIZEH
++	    }
+ 
+-		if ( testWFlags( WStyle_Title ) )
+-		    mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
++	    if ( testWFlags( WStyle_Title ) )
++		mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
+ 
+-		if ( testWFlags( WStyle_SysMenu ) )
+-		    mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
++	    if ( testWFlags( WStyle_SysMenu ) )
++		mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
+ 
+-		if ( testWFlags( WStyle_Minimize ) )
+-		    mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
++	    if ( testWFlags( WStyle_Minimize ) )
++		mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
+ 
+-		if ( testWFlags( WStyle_Maximize ) )
+-		    mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
+-	    }
++	    if ( testWFlags( WStyle_Maximize ) )
++		mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
+ 
+ 	    if (testWFlags(WStyle_Tool)) {
+ 		wsa.save_under = True;
+@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i
+ 	    }
+ 	}
+ 
+-	// ### need a better way to do this
+-	if (inherits("QPopupMenu")) {
+-	    // menu netwm type
+-	    net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
+-	} else if (inherits("QToolBar")) {
+-	    // toolbar netwm type
+-	    net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
+-	} else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
+-	    // utility netwm type
+-	    net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
+-	}
+-
+-	if (dialog) // dialog netwm type
+-            net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
+-	// normal netwm type - default
+-	net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
+-
+ 	// stays on top
+ 	if (testWFlags(WStyle_StaysOnTop)) {
+ 	    net_winstates[curr_winstate++] = qt_net_wm_state_above;
+@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i
+ 	wsa.save_under = True;
+ 	XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder,
+ 				 &wsa );
++	x11SetWindowType();
+     } else if ( topLevel && !desktop ) {	// top-level widget
+ 	QWidget *p = parentWidget();	// real parent
+ 	if (p)
+@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i
+         else
+             XDeleteProperty(dpy, id, qt_xa_motif_wm_hints);
+ 
+-	// set _NET_WM_WINDOW_TYPE
+-	if (curr_wintype > 0)
+-	    XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
+-			    (unsigned char *) net_wintypes, curr_wintype);
+-        else
+-            XDeleteProperty(dpy, id, qt_net_wm_window_type);
++	x11SetWindowType();
+ 
+ 	// set _NET_WM_WINDOW_STATE
+ 	if (curr_winstate > 0)
+@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare
+ 	setMouseTracking(mouse_tracking);
+ }
+ 
++// Sets the EWMH (netwm) window type. Needed as a separate function
++// because create() may be too soon in some cases.
++void QWidget::x11SetWindowType( X11WindowType type )
++{
++    // NET window types
++    long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
++    int curr_wintype = 0;
++    if( testWFlags(WType_Desktop))
++        return;
++    if( type == X11WindowTypeSelect ) {
++        if ( testWFlags(WStyle_Splash)) {
++            if (qt_net_supports(qt_net_wm_window_type_splash)) {
++                net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
++            }
++        } else if (inherits("QToolBar")) {
++	    // toolbar netwm type
++	    net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
++        } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
++	    // utility netwm type
++	    net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
++        } else if (testWFlags(WType_Dialog)) {
++            // dialog netwm type
++            net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
++        }
++    } else if( type == X11WindowTypeCombo ) {
++        // combo netwm type
++	net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo;
++    } else if( type == X11WindowTypeDND ) {
++        // dnd netwm type
++    	net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd;
++    } else if( type == X11WindowTypeDropdown ) {
++        // dropdown netwm type
++    	net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu;
++    } else if( type == X11WindowTypePopup ) {
++        // popup netwm type
++    	net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu;
++    } else if( type == X11WindowTypeMenu ) {
++        // menu netwm type
++	net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
++    } else if( type == X11WindowTypeTooltip ) {
++        // tooltip netwm type
++    	net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip;
++    }
++
++    // normal netwm type - default
++    net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
++    // set _NET_WM_WINDOW_TYPE
++    if (curr_wintype > 0)
++        XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
++			(unsigned char *) net_wintypes, curr_wintype);
++    else
++        XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type);
++}
++
++void QWidget::x11SetWindowTransient( QWidget* parent )
++{
++    XSetTransientForHint( x11Display(), winId(), parent->winId());
++}
+ 
+ /*!
+     Translates the widget coordinate \a pos to global screen
+--- src/kernel/qwidget.h.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qwidget.h	2007-05-31 10:30:58.000000000 +0200
+@@ -464,7 +464,19 @@ public:
+     CGContextRef macCGContext(bool clipped=TRUE) const;
+ #endif
+ #endif
+-
++#if defined(Q_WS_X11)
++    enum X11WindowType {
++        X11WindowTypeSelect,
++        X11WindowTypeCombo,
++        X11WindowTypeDND,
++        X11WindowTypeTooltip,
++        X11WindowTypeMenu, // torn-off
++        X11WindowTypeDropdown,
++        X11WindowTypePopup
++    };
++    void x11SetWindowType( X11WindowType type = X11WindowTypeSelect );
++    void x11SetWindowTransient( QWidget* parent );
++#endif
+     void setWindowOpacity(double level);
+     double windowOpacity() const;
+ 
+--- src/dialogs/qdialog.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/dialogs/qdialog.cpp	2007-05-31 10:30:58.000000000 +0200
+@@ -668,10 +668,6 @@ bool QDialog::event( QEvent *e )
+   Geometry management.
+  *****************************************************************************/
+ 
+-#if defined(Q_WS_X11)
+-extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); }
+-#endif // Q_WS_X11
+-
+ /*!
+     Shows the dialog as a \link #modeless modeless \endlink dialog.
+     Control returns immediately to the calling code.
+@@ -705,7 +701,7 @@ void QDialog::show()
+ 	&& qApp->mainWidget() && qApp->mainWidget()->isVisible()
+ 	&& !qApp->mainWidget()->isMinimized()) {
+ 	// make sure the transient for hint is set properly for modal dialogs
+-        XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() );
++        x11SetWindowTransient( qApp->mainWidget());
+     }
+ #endif // Q_WS_X11
+ 
+--- src/widgets/qtooltip.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/widgets/qtooltip.cpp	2007-05-31 10:30:58.000000000 +0200
+@@ -72,6 +72,7 @@ public:
+ 	polish();
+ 	setText(text);
+ 	adjustSize();
++        x11SetWindowType( X11WindowTypeTooltip );
+     }
+     void setWidth( int w ) { resize( sizeForWidth( w ) ); }
+ };
+@@ -528,6 +529,10 @@ void QTipManager::showTip()
+     if (!widget)
+ 	return;
+ 
++#ifdef Q_WS_X11
++    label->x11SetWindowTransient( widget->topLevelWidget());
++#endif
++
+ #ifdef Q_WS_MAC
+     QRect screen = QApplication::desktop()->availableGeometry( scr );
+ #else
+--- src/widgets/qcombobox.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/widgets/qcombobox.cpp	2007-05-31 10:49:13.000000000 +0200
+@@ -389,12 +389,8 @@ public:
+     inline QListBox * listBox() { return lBox; }
+     inline QComboBoxPopup * popup() { return pop; }
+     void updateLinedGeometry();
+-
+-    void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE;
+-				l->setMouseTracking( TRUE );}
+-
+-    void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE )
+-	{ pop = pm; if(isPopup) usingLBox = FALSE; }
++    void setListBox( QListBox *l );
++    void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE );
+ 
+     int		current;
+     int		maxCount;
+@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry(
+ 	ed->setGeometry( r );
+ }
+ 
++void QComboBoxData::setListBox( QListBox *l )
++{
++    lBox = l;
++    usingLBox = TRUE;
++    l->setMouseTracking( TRUE );
++#ifdef Q_WS_X11
++    l->x11SetWindowType( QWidget::X11WindowTypeCombo );
++    l->x11SetWindowTransient( combo->topLevelWidget());
++#endif
++}
++
++void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup )
++{
++    pop = pm;
++    if(isPopup)
++        usingLBox = FALSE;
++#ifdef Q_WS_X11
++    if( pm ) {
++        pm->x11SetWindowType( QWidget::X11WindowTypeCombo );
++        pm->x11SetWindowTransient( combo->topLevelWidget());
++    }
++#endif
++}
++
+ static inline bool checkInsertIndex( const char *method, const char * name,
+ 				     int count, int *index)
+ {
+--- src/widgets/qpopupmenu.cpp.sav	2007-05-25 18:56:23.000000000 +0200
++++ src/widgets/qpopupmenu.cpp	2007-05-31 11:09:22.000000000 +0200
+@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent,
+     connectModalRecursionSafety = 0;
+ 
+     setFocusPolicy( StrongFocus );
++#ifdef Q_WS_X11
++    x11SetWindowType( X11WindowTypePopup );
++#endif
+ }
+ 
+ /*!
+@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po
+ 	emit aboutToShow();
+ 	updateSize(TRUE);
+     }
++#ifdef Q_WS_X11
++#ifndef QT_NO_MENUBAR
++    QMenuData *top = this;		// find top level
++    while ( top->parentMenu )
++	top = top->parentMenu;
++    if( top->isMenuBar )
++        x11SetWindowType( X11WindowTypeDropdown );
++    if( parentMenu && parentMenu->isMenuBar )
++        x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget());
++#endif
++    if( parentMenu && !parentMenu->isMenuBar )
++        x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu ));
++    if( !parentMenu ) {
++        // hackish ... try to find the main window related to this popup
++        QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL;
++        if( parent == NULL )
++            parent = QApplication::widgetAt( pos );
++        if( parent == NULL )
++            parent = qApp->activeWindow();
++        if( parent != NULL )
++            x11SetWindowTransient( parent );
++    }
++#endif
+ 
+     int sw = screen.width();			// screen width
+     int sh = screen.height();			// screen height
+@@ -1390,6 +1416,13 @@ void QPopupMenu::hide()
+ #if defined(QT_ACCESSIBILITY_SUPPORT)
+     QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd );
+ #endif
++#ifndef QT_NO_MENUBAR
++    QMenuData *top = this;		// find top level
++    while ( top->parentMenu )
++	top = top->parentMenu;
++    if( top->isMenuBar )
++        x11SetWindowType( X11WindowTypePopup ); // reset
++#endif
+     parentMenu = 0;
+     hidePopups();
+     QWidget::hide();
+@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff()
+ 		     geometry().topLeft(), FALSE );
+ 	p->mitems->setAutoDelete( FALSE );
+ 	p->tornOff = TRUE;
++#ifdef Q_WS_X11
++        p->x11SetWindowType( X11WindowTypeMenu );
++#endif
+ 	for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) {
+ 	    if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() )
+ 		p->mitems->append( it.current() );

Added: trunk/dports/x11/qt3/files/qt-copy/0080-net-wm-sync-request.patch
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0080-net-wm-sync-request.patch	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0080-net-wm-sync-request.patch	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,307 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: Lubos Lunak <l.lunak at kde.org>
+
+Support for _NET_WM_SYNC_REQUEST - allows the WM to find out when the app
+finished one redraw - less flicker during resize and with compositing
+also when opening a window.
+
+--- src/kernel/qwidget.h.sav	2007-06-22 14:14:05.000000000 +0200
++++ src/kernel/qwidget.h	2007-06-23 11:53:39.000000000 +0200
+@@ -586,6 +586,14 @@ private:
+     void	 destroyInputContext();
+     void	 focusInputContext();
+     void	 checkChildrenDnd();
++
++#ifndef QT_NO_XSYNC
++    void        createSyncCounter();
++    void        destroySyncCounter();
++    void        incrementSyncCounter();
++    void        handleSyncRequest( void* ev );
++#endif
++
+ #elif defined(Q_WS_MAC)
+     uint    own_id : 1, macDropEnabled : 1;
+     EventHandlerRef window_event;
+@@ -962,6 +970,10 @@ struct Q_EXPORT QTLWExtra {
+     uint     uspos : 1;				// User defined position
+     uint     ussize : 1;			// User defined size
+     void    *xic;				// XIM Input Context
++#ifndef QT_NO_XSYNC
++    ulong    syncCounter;
++    uint     syncRequestValue[2];
++#endif
+ #endif
+ #if defined(Q_WS_MAC)
+     WindowGroupRef group;
+--- src/kernel/qt_x11_p.h.sav	2007-02-23 14:01:18.000000000 +0100
++++ src/kernel/qt_x11_p.h	2007-06-23 11:53:39.000000000 +0200
+@@ -174,6 +174,11 @@ extern "C" {
+ #endif // QT_NO_XRENDER
+ 
+ 
++#ifndef QT_NO_XSYNC
++#  include <X11/extensions/sync.h>
++#endif // QT_NO_XSYNC
++
++
+ #ifndef QT_NO_XKB
+ #  include <X11/XKBlib.h>
+ #endif // QT_NO_XKB
+--- src/kernel/qwidget_x11.cpp.sav	2007-04-16 13:47:26.000000000 +0200
++++ src/kernel/qwidget_x11.cpp	2007-06-23 19:48:44.000000000 +0200
+@@ -87,6 +87,12 @@ static QWidget *keyboardGrb = 0;
+ extern Time qt_x_time;
+ extern Time qt_x_user_time;
+ 
++#ifndef QT_NO_XSYNC
++extern Atom qt_net_wm_sync_request_counter;
++extern Atom qt_net_wm_sync_request;
++extern bool qt_use_xsync;
++#endif
++
+ // defined in qfont_x11.cpp
+ extern bool qt_has_xft;
+ 
+@@ -595,11 +601,14 @@ void QWidget::create( WId window, bool i
+ 
+ 	XResizeWindow( dpy, id, crect.width(), crect.height() );
+ 	XStoreName( dpy, id, qAppName() );
+-	Atom protocols[4];
++	Atom protocols[5];
+ 	int n = 0;
+ 	protocols[n++] = qt_wm_delete_window;	// support del window protocol
+ 	protocols[n++] = qt_wm_take_focus;	// support take focus window protocol
+ 	protocols[n++] = qt_net_wm_ping;	// support _NET_WM_PING protocol
++#ifndef QT_NO_XSYNC
++	protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol
++#endif
+ 	if ( testWFlags( WStyle_ContextHelp ) )
+ 	    protocols[n++] = qt_net_wm_context_help;
+ 	XSetWMProtocols( dpy, id, protocols, n );
+@@ -625,6 +634,14 @@ void QWidget::create( WId window, bool i
+ 	XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
+ 			(unsigned char *) &curr_pid, 1);
+ 
++#ifndef QT_NO_XSYNC
++        // set _NET_WM_SYNC_COUNTER
++        createSyncCounter();
++        long counterVal = topData()->syncCounter;
++        XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace,
++                         (unsigned char*) &counterVal, 1);
++#endif
++
+ 	// when we create a toplevel widget, the frame strut should be dirty
+ 	fstrut_dirty = 1;
+ 
+@@ -720,6 +737,9 @@ void QWidget::destroy( bool destroyWindo
+ 	    if ( destroyWindow )
+ 		qt_XDestroyWindow( this, x11Display(), winid );
+ 	}
++#ifndef QT_NO_XSYNC
++        destroySyncCounter();
++#endif
+ 	setWinId( 0 );
+ 
+ 	extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp
+@@ -769,6 +789,10 @@ void QWidget::reparentSys( QWidget *pare
+         destroyInputContext();
+     }
+ 
++#ifndef QT_NO_XSYNC
++    destroySyncCounter();
++#endif
++
+     if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel
+         topData()->parentWinId = 0;
+ 
+@@ -2456,6 +2480,11 @@ void QWidget::createTLSysExtra()
+ {
+     // created lazily
+     extra->topextra->xic = 0;
++#ifndef QT_NO_XSYNC
++    extra->topextra->syncCounter = 0;
++    extra->topextra->syncRequestValue[0] = 0;
++    extra->topextra->syncRequestValue[1] = 0;
++#endif
+ }
+ 
+ void QWidget::deleteTLSysExtra()
+@@ -2501,6 +2530,51 @@ void QWidget::checkChildrenDnd()
+     }
+ }
+ 
++
++#ifndef QT_NO_XSYNC
++// create a window's XSyncCounter
++void QWidget::createSyncCounter()
++{
++    if( !qt_use_xsync || !isTopLevel() || topData()->syncCounter )
++        return;
++    XSyncValue zero;
++    XSyncIntToValue( &zero, 0 );
++    topData()->syncCounter = XSyncCreateCounter( x11Display(), zero );
++}
++
++// destroy a window's XSyncCounter
++void QWidget::destroySyncCounter()
++{
++    if( !qt_use_xsync || !extra || !extra->topextra
++        || !extra->topextra->syncCounter )
++        return;
++    XSyncDestroyCounter( x11Display(), extra->topextra->syncCounter );
++    extra->topextra->syncCounter = 0;
++}
++
++// increment a window's XSyncCounter
++void QWidget::incrementSyncCounter()
++{
++    if( qt_use_xsync && topData()->syncCounter &&
++        !(topData()->syncRequestValue[0] == 0 &&
++         topData()->syncRequestValue[1] == 0) ) {
++        XSyncValue val;
++        XSyncIntsToValue( &val, topData()->syncRequestValue[ 0 ], topData()->syncRequestValue[ 1 ] );
++        XSyncSetCounter( x11Display(), topData()->syncCounter, val );
++        topData()->syncRequestValue[0] = topData()->syncRequestValue[1] = 0;
++    }
++}
++
++// handle _NET_WM_SYNC_REQUEST
++void QWidget::handleSyncRequest( void* ev )
++{
++    XEvent* xev = (XEvent*)ev;
++    topData()->syncRequestValue[ 0 ] = xev->xclient.data.l[ 2 ];
++    topData()->syncRequestValue[ 1 ] = xev->xclient.data.l[ 3 ];
++}
++#endif  // QT_NO_XSYNC
++
++
+ /*!
+     \property QWidget::acceptDrops
+     \brief whether drop events are enabled for this widget
+--- src/kernel/qapplication_x11.cpp.sav	2007-04-16 13:47:26.000000000 +0200
++++ src/kernel/qapplication_x11.cpp	2007-06-23 19:49:15.000000000 +0200
+@@ -285,6 +285,11 @@ Atom		*qt_net_supported_list	= 0;
+ Window		*qt_net_virtual_root_list	= 0;
+ 
+ 
++// X11 SYNC support
++#ifndef QT_NO_XSYNC
++Atom		qt_net_wm_sync_request_counter	= 0;
++Atom		qt_net_wm_sync_request     	= 0;
++#endif
+ 
+ // client leader window
+ Window qt_x11_wm_client_leader = 0;
+@@ -309,6 +314,13 @@ static int xrandr_eventbase;
+ // Display
+ Q_EXPORT bool qt_use_xrender = FALSE;
+ 
++#ifndef QT_NO_XSYNC
++// True if SYNC extension exists on the connected display
++bool qt_use_xsync = FALSE;
++static int xsync_eventbase;
++static int xsync_errorbase;
++#endif
++
+ // modifier masks for alt/meta - detected when the application starts
+ static long qt_alt_mask = 0;
+ static long qt_meta_mask = 0;
+@@ -1938,6 +1950,11 @@ void qt_init_internal( int *argcptr, cha
+ 	qt_x11_intern_atom( "UTF8_STRING", &qt_utf8_string );
+         qt_x11_intern_atom( "_SGI_DESKS_MANAGER", &qt_sgi_desks_manager );
+ 
++#ifndef QT_NO_XSYNC
++	qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST_COUNTER", &qt_net_wm_sync_request_counter );
++	qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST", &qt_net_wm_sync_request );
++#endif
++
+ 	qt_xdnd_setup();
+ 	qt_x11_motifdnd_init();
+ 
+@@ -1974,6 +1991,15 @@ void qt_init_internal( int *argcptr, cha
+ 	}
+ #endif // QT_NO_XRENDER
+ 
++#ifndef QT_NO_XSYNC
++	// Try to initialize SYNC extension on the connected display
++	int xsync_major, xsync_minor;
++	if ( XSyncQueryExtension( appDpy, &xsync_eventbase, &xsync_errorbase ) && 
++	     XSyncInitialize( appDpy, &xsync_major,  &xsync_minor ) ) {
++	     qt_use_xsync = TRUE;
++	}
++#endif 
++
+ #ifndef QT_NO_XKB
+ 	// If XKB is detected, set the GrabsUseXKBState option so input method
+ 	// compositions continue to work (ie. deadkeys)
+@@ -3141,6 +3167,10 @@ int QApplication::x11ClientMessage(QWidg
+ 		    XSendEvent( event->xclient.display, event->xclient.window,
+ 				False, SubstructureNotifyMask|SubstructureRedirectMask, event );
+ 		}
++#ifndef QT_NO_XSYNC
++	    } else if (a == qt_net_wm_sync_request ) {
++		    widget->handleSyncRequest( event );
++#endif
+ 	    }
+ 	} else if ( event->xclient.message_type == qt_qt_scrolldone ) {
+ 	    widget->translateScrollDoneEvent(event);
+@@ -5681,6 +5711,21 @@ bool QETWidget::translateScrollDoneEvent
+     return FALSE;
+ }
+ 
++#if defined(Q_C_CALLBACKS)
++extern "C" {
++#endif
++#ifndef QT_NO_XSYNC
++static Bool qt_net_wm_sync_request_scanner(Display*, XEvent* event, XPointer arg)
++{
++    return (event->type == ClientMessage && event->xclient.window == *(Window*)arg
++        && event->xclient.message_type == qt_wm_protocols
++        && event->xclient.data.l[ 0 ] == qt_net_wm_sync_request );
++}
++#endif
++
++#if defined(Q_C_CALLBACKS)
++}
++#endif
+ 
+ //
+ // ConfigureNotify (window move and resize) event translation
+@@ -5712,6 +5757,7 @@ bool QETWidget::translateConfigEvent( co
+         if (! extra || extra->compress_events) {
+             // ConfigureNotify compression for faster opaque resizing
+             XEvent otherEvent;
++            int compressed_configs = 0;
+             while ( XCheckTypedWindowEvent( x11Display(), winId(), ConfigureNotify,
+                                             &otherEvent ) ) {
+                 if ( qt_x11EventFilter( &otherEvent ) )
+@@ -5732,7 +5778,18 @@ bool QETWidget::translateConfigEvent( co
+                     newCPos.ry() = otherEvent.xconfigure.y +
+                                    otherEvent.xconfigure.border_width;
+                 }
++                ++compressed_configs;
++            }
++#ifndef QT_NO_XSYNC
++            // _NET_WM_SYNC_REQUEST compression 
++            Window wid = winId();
++            while ( compressed_configs &&
++                    XCheckIfEvent( x11Display(), &otherEvent,
++                    qt_net_wm_sync_request_scanner, (XPointer)&wid ) ) {
++                handleSyncRequest( (void*)&otherEvent );
++                --compressed_configs;
+             }
++#endif
+         }
+ 
+ 	QRect cr ( geometry() );
+@@ -5786,6 +5843,8 @@ bool QETWidget::translateConfigEvent( co
+ 	repaint( !testWFlags(WResizeNoErase) || transbg );
+     }
+ 
++    incrementSyncCounter();
++
+     return TRUE;
+ }
+ 

Added: trunk/dports/x11/qt3/files/qt-copy/0082-fix-qdatetime-fromstring.diff
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0082-fix-qdatetime-fromstring.diff	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0082-fix-qdatetime-fromstring.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,20 @@
+qt-bugs@ issue : 153183
+bugs.kde.org number : 
+applied: yes
+author: woebbeking at kde.org
+
+In Qt 3.3.8 QDateTime::fromString() has an off by one regression:
+- Thu Mar  3 19:45:58 2005 -> invalid QDateTime
+- Thu Mar 13 19:45:58 2005 -> Mar 1 2005
+ 
+--- src/tools/qdatetime.cpp
++++ src/tools/qdatetime.cpp
+@@ -2485,7 +2485,7 @@
+ 	    return dt;
+ 	}
+ #endif
+-	int day = s.mid( firstSpace + 4, 2 ).simplifyWhiteSpace().toInt();
++	int day = s.mid( firstSpace + 5, 2 ).simplifyWhiteSpace().toInt();
+ 	int year = s.right( 4 ).toInt();
+ 	QDate date( year, month, day );
+ 	QTime time;

Added: trunk/dports/x11/qt3/files/qt-copy/0083-CVE-2007-4137.diff
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0083-CVE-2007-4137.diff	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0083-CVE-2007-4137.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,19 @@
+qt-bugs@ issue : N175791
+bugs.kde.org number :
+applied: yes
+author: mueller at kde.org
+
+fixes an off-by-one buffer overflow in the utf8 decoder
+
+
+--- src/codecs/qutfcodec.cpp
++++ src/codecs/qutfcodec.cpp
+@@ -164,7 +164,7 @@ public:
+     QString toUnicode(const char* chars, int len)
+     {
+ 	QString result;
+-	result.setLength( len ); // worst case
++	result.setLength( len + 1 ); // worst case
+ 	QChar *qch = (QChar *)result.unicode();
+ 	uchar ch;
+ 	for (int i=0; i<len; i++) {

Added: trunk/dports/x11/qt3/files/qt-copy/0084-compositing-properties.patch
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0084-compositing-properties.patch	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0084-compositing-properties.patch	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,80 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: Lubos Lunak <l.lunak at kde.org>
+
+This patch makes override-redirect windows (popup menu, dropdown menu,
+tooltip, combobox, etc.) also have more window properties like WM_CLASS,
+so they can be used when compositing.
+
+--- src/kernel/qwidget_x11.cpp.sav	2007-06-25 10:36:42.000000000 +0200
++++ src/kernel/qwidget_x11.cpp	2007-10-02 15:30:13.000000000 +0200
+@@ -557,7 +557,10 @@ void QWidget::create( WId window, bool i
+ 	wsa.save_under = True;
+ 	XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder,
+ 				 &wsa );
+-	x11SetWindowType();
++	XClassHint class_hint;
++	class_hint.res_name = (char *) qAppName(); // application name
++	class_hint.res_class = (char *) qAppClass();	// application class
++        XSetClassHint( dpy, id, &class_hint );
+     } else if ( topLevel && !desktop ) {	// top-level widget
+ 	QWidget *p = parentWidget();	// real parent
+ 	if (p)
+@@ -620,8 +623,6 @@ void QWidget::create( WId window, bool i
+         else
+             XDeleteProperty(dpy, id, qt_xa_motif_wm_hints);
+ 
+-	x11SetWindowType();
+-
+ 	// set _NET_WM_WINDOW_STATE
+ 	if (curr_winstate > 0)
+ 	    XChangeProperty(dpy, id, qt_net_wm_state, XA_ATOM, 32, PropModeReplace,
+@@ -629,11 +630,6 @@ void QWidget::create( WId window, bool i
+         else
+             XDeleteProperty(dpy, id, qt_net_wm_state);
+ 
+-	// set _NET_WM_PID
+-	long curr_pid = getpid();
+-	XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
+-			(unsigned char *) &curr_pid, 1);
+-
+ #ifndef QT_NO_XSYNC
+         // set _NET_WM_SYNC_COUNTER
+         createSyncCounter();
+@@ -645,19 +641,31 @@ void QWidget::create( WId window, bool i
+ 	// when we create a toplevel widget, the frame strut should be dirty
+ 	fstrut_dirty = 1;
+ 
++    } else {
++	// non-toplevel widgets don't have a frame, so no need to
++	// update the strut
++	fstrut_dirty = 0;
++    }
++
++    if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
++	x11SetWindowType();
++
++	// set _NET_WM_PID
++	long curr_pid = getpid();
++	XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
++			(unsigned char *) &curr_pid, 1);
++
+ 	// declare the widget's object name as window role
+ 	XChangeProperty( dpy, id,
+ 			 qt_window_role, XA_STRING, 8, PropModeReplace,
+ 			 (unsigned char *)name(), qstrlen( name() ) );
+ 
+ 	// set client leader property
++	if ( !qt_x11_wm_client_leader )
++	    qt_x11_create_wm_client_leader();
+ 	XChangeProperty( dpy, id, qt_wm_client_leader,
+ 			 XA_WINDOW, 32, PropModeReplace,
+ 			 (unsigned char *)&qt_x11_wm_client_leader, 1 );
+-    } else {
+-	// non-toplevel widgets don't have a frame, so no need to
+-	// update the strut
+-	fstrut_dirty = 0;
+     }
+ 
+     if ( initializeWindow ) {

Added: trunk/dports/x11/qt3/files/qt-copy/0085-fix-buildkey.diff
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0085-fix-buildkey.diff	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0085-fix-buildkey.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,30 @@
+qt-bugs@ issue : 
+bugs.kde.org number :
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+gcc 4.3 produces a "3.*" buildkey. That's oh so wrong.
+
+
+--- configure
++++ configure
+@@ -3140,15 +3140,15 @@ case "$COMPILER" in
+ g++*)
+     # GNU C++
+     QMAKE_CONF_COMPILER=`grep "QMAKE_CXX[^_A-Z0-9a-z]" $QMAKESPEC/qmake.conf | sed "s,.* *= *\(.*\)$,\1,"`
+-    COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null`
++    COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null | sed 's,^[^0-9]*,,g'`
+     case "$COMPILER_VERSION" in
+-    *2.95.*)
++    2.95.*)
+ 	COMPILER_VERSION="2.95.*"
+ 	;;
+-    *3.*)
++    3.*)
+ 	COMPILER_VERSION="3.*"
+ 	;;
+-    *4.*)
++    4.*)
+ 	COMPILER_VERSION="4"
+ 	;;
+     *)

Added: trunk/dports/x11/qt3/files/qt-copy/0086-revert-qt-khmer-fix.diff
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0086-revert-qt-khmer-fix.diff	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0086-revert-qt-khmer-fix.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,40 @@
+qt-bugs@ issue : 
+bugs.kde.org number : 
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+according to bug 345459, this fix for stacking letters from 3.3.8 
+made it only a lot worse. revert.
+
+
+--- src/kernel/qfontengine_x11.cpp	
++++ src/kernel/qfontengine_x11.cpp	
+@@ -2672,23 +2655,16 @@ bool QOpenType::positionAndAdd(QShaperIt
+             // ###### fix the case where we have y advances. How do we handle this in Uniscribe?????
+             if (positions[i].new_advance) {
+                 item->advances[i] = item->flags & QTextEngine::RightToLeft
+-                                    ? -qRound((positions[i].x_advance >> 6)*scale)
++                                    ? -qRound((positions[i].x_advance >> 6)*scale) 
+                                     :  qRound((positions[i].x_advance >> 6)*scale);
+             } else {
+                 item->advances[i] += item->flags & QTextEngine::RightToLeft
+-                                     ? -qRound((positions[i].x_advance >> 6)*scale)
++                                     ? -qRound((positions[i].x_advance >> 6)*scale) 
+                                      :  qRound((positions[i].x_advance >> 6)*scale);
+             }
+-            int back = 0;
+-	  item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale);
+-	  item->offsets[i].y = qRound((positions[i].y_pos >> 6)*scale);
+-            while (positions[i-back].back) {
+-                back += positions[i - back].back;
+-                item->offsets[i].x += qRound((positions[i - back].x_pos >> 6)*scale);
+-	      item->offsets[i].y += qRound((positions[i - back].y_pos >> 6)*scale);
+-            }
+-	  item->offsets[i].y = -item->offsets[i].y;
+-            back = positions[i].back;
++	    item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale);
++	    item->offsets[i].y = -qRound((positions[i].y_pos >> 6)*scale);
++            int back = positions[i].back;
+             if (item->flags & QTextEngine::RightToLeft) {
+                 while (back--) {
+                     item->offsets[i].x -= item->advances[i-back];

Added: trunk/dports/x11/qt3/files/qt-copy/0087-use-xrandr-1.2.diff
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0087-use-xrandr-1.2.diff	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0087-use-xrandr-1.2.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,107 @@
+qt-bugs@ issue :
+bugs.kde.org number :
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+support xrandr 1.2 configurations. same patch like for trunk qt-copy,
+please see there for details.
+
+
+--- src/kernel/qdesktopwidget_x11.cpp
++++ src/kernel/qdesktopwidget_x11.cpp
+@@ -107,7 +107,7 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr
+ 	    screens[i] = 0;
+ 	}
+ 
+-	delete [] screens;
++	free(screens);
+     }
+ 
+     if ( rects )     delete [] rects;
+@@ -117,6 +117,8 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr
+ void QDesktopWidgetPrivate::init()
+ {
+     // get the screen count
++    int newScreenCount;
++
+ #ifndef QT_NO_XINERAMA
+     XineramaScreenInfo *xinerama_screeninfo = 0;
+     int unused;
+@@ -126,23 +128,26 @@ void QDesktopWidgetPrivate::init()
+ 
+     if (use_xinerama) {
+ 	xinerama_screeninfo =
+-	    XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &screenCount);
++	    XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &newScreenCount);
++
++    if (xinerama_screeninfo)
+ 	defaultScreen = 0;
+     } else
+ #endif // QT_NO_XINERAMA
+     {
+ 	defaultScreen = DefaultScreen(QPaintDevice::x11AppDisplay());
+-	screenCount = ScreenCount(QPaintDevice::x11AppDisplay());
++	newScreenCount = ScreenCount(QPaintDevice::x11AppDisplay());
++        use_xinerama = false;
+     }
+ 
+     delete [] rects;
+-    rects     = new QRect[ screenCount ];
++    rects     = new QRect[ newScreenCount ];
+     delete [] workareas;
+-    workareas = new QRect[ screenCount ];
++    workareas = new QRect[ newScreenCount ];
+ 
+     // get the geometry of each screen
+-    int i, x, y, w, h;
+-    for ( i = 0; i < screenCount; i++ ) {
++    int i, j, x, y, w, h;
++    for ( i = 0, j = 0; i < newScreenCount; i++ ) {
+ 
+ #ifndef QT_NO_XINERAMA
+ 	if (use_xinerama) {
+@@ -159,11 +164,33 @@ void QDesktopWidgetPrivate::init()
+ 		h = HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), i));
+ 	    }
+ 
+-	rects[i].setRect(x, y, w, h);
+ 	workareas[i] = QRect();
++	rects[j].setRect(x, y, w, h);
++
++        // overlapping?
++        if (j > 0 && rects[j-1].intersects(rects[j])) {
++            // pick the bigger one, ignore the other
++            if ((rects[j].width()*rects[j].height()) >
++                (rects[j-1].width()*rects[j-1].height()))
++            rects[j-1] = rects[j];
++        }
++        else
++            j++;
+     }
+ 
++    if (screens) {
++        // leaks QWidget* pointers on purpose, can't delete them as pointer escapes
++        screens = (QWidget**) realloc(screens, j * sizeof(QWidget*));
++        if (j > screenCount)
++            memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*));
++    }
++
++    screenCount = j;
++
+ #ifndef QT_NO_XINERAMA
++    if (use_xinerama && screenCount == 1)
++        use_xinerama = false;
++
+     if (xinerama_screeninfo)
+ 	XFree(xinerama_screeninfo);
+ #endif // QT_NO_XINERAMA
+@@ -216,8 +243,7 @@ QWidget *QDesktopWidget::screen( int scr
+ 	screen = d->defaultScreen;
+ 
+     if ( ! d->screens ) {
+-	d->screens = new QWidget*[ d->screenCount ];
+-	memset( d->screens, 0, d->screenCount * sizeof( QWidget * ) );
++	d->screens = (QWidget**) calloc( d->screenCount, sizeof(QWidget*));
+ 	d->screens[ d->defaultScreen ] = this;
+     }
+ 

Added: trunk/dports/x11/qt3/files/qt-copy/0088-fix-xinput-clash.diff
===================================================================
--- trunk/dports/x11/qt3/files/qt-copy/0088-fix-xinput-clash.diff	                        (rev 0)
+++ trunk/dports/x11/qt3/files/qt-copy/0088-fix-xinput-clash.diff	2009-04-23 09:50:17 UTC (rev 50042)
@@ -0,0 +1,55 @@
+qt-bugs@ issue :
+bugs.kde.org number :
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+fix compile errors with newer X.org
+
+--- include/private/qt_x11_p.h
++++ include/private/qt_x11_p.h
+@@ -86,7 +86,7 @@
+ 
+ 
+ // the wacom tablet (currently just the IRIX version)
+-#if defined (QT_TABLET_SUPPORT)
++#if defined (QT_TABLET_SUPPORT) && defined (QT_CLEAN_NAMESPACE)
+ #  include <X11/extensions/XInput.h>
+ #if defined (Q_OS_IRIX)
+ #  include <wacom.h>  // wacom driver defines for IRIX (quite handy)
+--- src/kernel/qtaddons_x11.cpp
++++ src/kernel/qtaddons_x11.cpp
+@@ -22,6 +22,10 @@
+  * PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
++#ifndef QT_CLEAN_NAMESPACE
++#define QT_CLEAN_NAMESPACE
++#endif
++
+ #include "qt_x11_p.h"
+ 
+ #if !defined(QT_NO_XFTFREETYPE) && !defined(QT_XFT2)
+--- src/kernel/qt_x11_p.h
++++ src/kernel/qt_x11_p.h
+@@ -86,7 +86,7 @@
+ 
+ 
+ // the wacom tablet (currently just the IRIX version)
+-#if defined (QT_TABLET_SUPPORT)
++#if defined (QT_TABLET_SUPPORT) && defined (QT_CLEAN_NAMESPACE)
+ #  include <X11/extensions/XInput.h>
+ #if defined (Q_OS_IRIX)
+ #  include <wacom.h>  // wacom driver defines for IRIX (quite handy)
+--- src/kernel/qwidget_x11.cpp
++++ src/kernel/qwidget_x11.cpp
+@@ -38,6 +38,10 @@
+ **
+ **********************************************************************/
+ 
++#ifndef QT_CLEAN_NAMESPACE
++#define QT_CLEAN_NAMESPACE
++#endif
++
+ #include "qapplication.h"
+ #include "qapplication_p.h"
+ #include "qnamespace.h"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090423/89ff2c16/attachment-0001.html>


More information about the macports-changes mailing list