summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-qt/qt-meta/files')
-rw-r--r--dev-qt/qt-meta/files/0001-dnd_optimization.patch187
-rw-r--r--dev-qt/qt-meta/files/0002-dnd_active_window_fix.patch189
-rw-r--r--dev-qt/qt-meta/files/0038-dragobject-dont-prefer-unknown.patch57
-rw-r--r--dev-qt/qt-meta/files/0044-qscrollview-windowactivate-fix.diff38
-rw-r--r--dev-qt/qt-meta/files/0047-fix-kmenu-widget.diff25
-rw-r--r--dev-qt/qt-meta/files/0048-qclipboard_hack_80072.patch48
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-fix-compiler-detection.patch22
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-immqt+gcc-4.3.patch20
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-libpng15.patch212
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-mips.patch39
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-seli-xinerama.patch49
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-uic-fix.patch18
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8-visibility.patch159
-rw-r--r--dev-qt/qt-meta/files/qt-3.3.8b-cjk-fix.patch32
-rw-r--r--dev-qt/qt-meta/files/qt-ulibc.patch13
15 files changed, 1108 insertions, 0 deletions
diff --git a/dev-qt/qt-meta/files/0001-dnd_optimization.patch b/dev-qt/qt-meta/files/0001-dnd_optimization.patch
new file mode 100644
index 00000000..d9de2846
--- /dev/null
+++ b/dev-qt/qt-meta/files/0001-dnd_optimization.patch
@@ -0,0 +1,187 @@
+qt-bugs@ issue : 16115
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+See http://lists.kde.org/?t=104388858900001&r=1&w=2
+
+
+--- src/kernel/qdnd_x11.cpp.sav 2003-02-05 16:09:45.000000000 +0100
++++ src/kernel/qdnd_x11.cpp 2003-02-07 16:14:49.000000000 +0100
+@@ -49,13 +49,15 @@
+ #include "qdragobject.h"
+ #include "qobjectlist.h"
+ #include "qcursor.h"
++#include "qbitmap.h"
++#include "qpainter.h"
+
+ #include "qt_x11_p.h"
+
+ // conflict resolution
+
+-// unused, may be used again later: const int XKeyPress = KeyPress;
+-// unused, may be used again later: const int XKeyRelease = KeyRelease;
++const int XKeyPress = KeyPress;
++const int XKeyRelease = KeyRelease;
+ #undef KeyPress
+ #undef KeyRelease
+
+@@ -249,20 +251,47 @@ class QShapedPixmapWidget : public QWidg
+ public:
+ QShapedPixmapWidget(int screen = -1) :
+ QWidget(QApplication::desktop()->screen( screen ),
+- 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM )
++ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 )
+ {
+ }
+
+- void setPixmap(QPixmap pm)
++ void setPixmap(QPixmap pm, QPoint hot)
+ {
+- if ( pm.mask() ) {
++ int bmser = pm.mask() ? pm.mask()->serialNumber() : 0;
++ if( oldpmser == pm.serialNumber() && oldbmser == bmser
++ && oldhot == hot )
++ return;
++ oldpmser = pm.serialNumber();
++ oldbmser = bmser;
++ oldhot = hot;
++ bool hotspot_in = !(hot.x() < 0 || hot.y() < 0 || hot.x() >= pm.width() || hot.y() >= pm.height());
++// if the pixmap has hotspot in its area, make a "hole" in it at that position
++// this will allow XTranslateCoordinates() to find directly the window below the cursor instead
++// of finding this pixmap, and therefore there won't be needed any (slow) search for the window
++// using findRealWindow()
++ if( hotspot_in ) {
++ QBitmap mask = pm.mask() ? *pm.mask() : QBitmap( pm.width(), pm.height());
++ if( !pm.mask())
++ mask.fill( Qt::color1 );
++ QPainter p( &mask );
++ p.setPen( Qt::color0 );
++ p.drawPoint( hot.x(), hot.y());
++ p.end();
++ pm.setMask( mask );
++ setMask( mask );
++ } else if ( pm.mask() ) {
+ setMask( *pm.mask() );
+ } else {
+ clearMask();
+ }
+ resize(pm.width(),pm.height());
+ setErasePixmap(pm);
++ erase();
+ }
++private:
++ int oldpmser;
++ int oldbmser;
++ QPoint oldhot;
+ };
+
+ QShapedPixmapWidget * qt_xdnd_deco = 0;
+@@ -859,6 +888,45 @@ void QDragManager::timerEvent( QTimerEve
+ move( QCursor::pos() );
+ }
+
++static bool qt_xdnd_was_move = false;
++static bool qt_xdnd_found = false;
++// check whole incoming X queue for move events
++// checking whole queue is done by always returning False in the predicate
++// if there's another move event in the queue, and there's not a mouse button
++// or keyboard or ClientMessage event before it, the current move event
++// may be safely discarded
++// this helps avoiding being overloaded by being flooded from many events
++// from the XServer
++static
++Bool qt_xdnd_predicate( Display*, XEvent* ev, XPointer )
++{
++ if( qt_xdnd_found )
++ return False;
++ if( ev->type == MotionNotify )
++ {
++ qt_xdnd_was_move = true;
++ qt_xdnd_found = true;
++ }
++ if( ev->type == ButtonPress || ev->type == ButtonRelease
++ || ev->type == XKeyPress || ev->type == XKeyRelease
++ || ev->type == ClientMessage )
++ {
++ qt_xdnd_was_move = false;
++ qt_xdnd_found = true;
++ }
++ return False;
++}
++
++static
++bool qt_xdnd_another_movement()
++{
++ qt_xdnd_was_move = false;
++ qt_xdnd_found = false;
++ XEvent dummy;
++ XCheckIfEvent( qt_xdisplay(), &dummy, qt_xdnd_predicate, NULL );
++ return qt_xdnd_was_move;
++}
++
+ bool QDragManager::eventFilter( QObject * o, QEvent * e)
+ {
+ if ( beingCancelled ) {
+@@ -881,8 +949,10 @@ bool QDragManager::eventFilter( QObject
+
+ if ( e->type() == QEvent::MouseMove ) {
+ QMouseEvent* me = (QMouseEvent *)e;
+- updateMode(me->stateAfter());
+- move( me->globalPos() );
++ if( !qt_xdnd_another_movement()) {
++ updateMode(me->stateAfter());
++ move( me->globalPos() );
++ }
+ return TRUE;
+ } else if ( e->type() == QEvent::MouseButtonRelease ) {
+ qApp->removeEventFilter( this );
+@@ -1106,7 +1176,7 @@ void QDragManager::move( const QPoint &
+ delete qt_xdnd_deco;
+ qt_xdnd_deco = new QShapedPixmapWidget( screen );
+ }
+- updatePixmap();
++ updatePixmap( globalPos );
+
+ if ( qt_xdnd_source_sameanswer.contains( globalPos ) &&
+ qt_xdnd_source_sameanswer.isValid() ) {
+@@ -1679,7 +1749,7 @@ bool QDragManager::drag( QDragObject * o
+ // qt_xdnd_source_object persists until we get an xdnd_finish message
+ }
+
+-void QDragManager::updatePixmap()
++void QDragManager::updatePixmap( const QPoint& cursorPos )
+ {
+ if ( qt_xdnd_deco ) {
+ QPixmap pm;
+@@ -1694,9 +1764,8 @@ void QDragManager::updatePixmap()
+ defaultPm = new QPixmap(default_pm);
+ pm = *defaultPm;
+ }
+- qt_xdnd_deco->setPixmap(pm);
+- qt_xdnd_deco->move(QCursor::pos()-pm_hot);
+- qt_xdnd_deco->repaint(FALSE);
++ qt_xdnd_deco->setPixmap(pm, pm_hot);
++ qt_xdnd_deco->move(cursorPos-pm_hot);
+ //if ( willDrop ) {
+ qt_xdnd_deco->show();
+ //} else {
+@@ -1705,4 +1774,9 @@ void QDragManager::updatePixmap()
+ }
+ }
+
++void QDragManager::updatePixmap()
++{
++ updatePixmap( QCursor::pos());
++}
++
+ #endif // QT_NO_DRAGANDDROP
+--- src/kernel/qdragobject.h.sav 2002-11-01 19:25:07.000000000 +0100
++++ src/kernel/qdragobject.h 2001-01-01 01:01:00.000000000 +0100
+@@ -245,6 +245,7 @@ private:
+ void move( const QPoint & );
+ void drop();
+ void updatePixmap();
++ void updatePixmap( const QPoint& cursorPos );
+
+ private:
+ QDragObject * object;
diff --git a/dev-qt/qt-meta/files/0002-dnd_active_window_fix.patch b/dev-qt/qt-meta/files/0002-dnd_active_window_fix.patch
new file mode 100644
index 00000000..4b497d64
--- /dev/null
+++ b/dev-qt/qt-meta/files/0002-dnd_active_window_fix.patch
@@ -0,0 +1,189 @@
+qt-bugs@ issue : 25122
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+ Hello,
+
+ for example: Open Konqueror window, showing some files. Start dragging one
+ desktop icon. If you press/release Ctrl, there'll be a '+' attached to the
+ icon, showing the DND operation. Now, while still doing DND, make the
+ Konqueror window active (Alt+Tab with KDE-3.1.2+, hover over its taskbar
+ entry, Ctrl+Fn to switch to a different virtual desktop, etc.). As soon as
+ the app performing DND is not the active application, and the mouse is not
+ moving, pressing/releasing Ctrl doesn't do anything, the state only updates
+ when the mouse is moved.
+
+ This is caused by the fact that Qt has only pointer grab when doing DND, but
+ doesn't have keyboard grab. I actually consider this a good thing, because
+ the only keys important for DND are modifiers, and they come together with
+ pointer events, and not having keyboard grab allows using keyboard shortcuts
+ like Alt+Tab while DND. However, when the mouse is not moved, and only a
+ modifier key is pressed/released, the app won't get any mouse event, and
+ won't also get the keyboard event.
+
+ The attached patch changes Qt to explicitly check the modifiers state using
+ XQueryPointer() if there's wasn't recently any mouse/keyboard event, which
+ ensures the state is updated even in the situation described above.
+
+--- src/kernel/qapplication_x11.cpp.sav 2003-06-21 12:31:35.000000000 +0200
++++ src/kernel/qapplication_x11.cpp 2003-06-21 12:35:44.000000000 +0200
+@@ -4053,7 +4053,7 @@ void QApplication::closePopup( QWidget *
+ // Keyboard event translation
+ //
+
+-static int translateButtonState( int s )
++int qt_x11_translateButtonState( int s )
+ {
+ int bst = 0;
+ if ( s & Button1Mask )
+@@ -4119,7 +4119,7 @@ bool QETWidget::translateMouseEvent( con
+ pos.ry() = lastMotion.y;
+ globalPos.rx() = lastMotion.x_root;
+ globalPos.ry() = lastMotion.y_root;
+- state = translateButtonState( lastMotion.state );
++ state = qt_x11_translateButtonState( lastMotion.state );
+ if ( qt_button_down && (state & (LeftButton |
+ MidButton |
+ RightButton ) ) == 0 )
+@@ -4143,7 +4143,7 @@ bool QETWidget::translateMouseEvent( con
+ pos.ry() = xevent->xcrossing.y;
+ globalPos.rx() = xevent->xcrossing.x_root;
+ globalPos.ry() = xevent->xcrossing.y_root;
+- state = translateButtonState( xevent->xcrossing.state );
++ state = qt_x11_translateButtonState( xevent->xcrossing.state );
+ if ( qt_button_down && (state & (LeftButton |
+ MidButton |
+ RightButton ) ) == 0 )
+@@ -4155,7 +4155,7 @@ bool QETWidget::translateMouseEvent( con
+ pos.ry() = event->xbutton.y;
+ globalPos.rx() = event->xbutton.x_root;
+ globalPos.ry() = event->xbutton.y_root;
+- state = translateButtonState( event->xbutton.state );
++ state = qt_x11_translateButtonState( event->xbutton.state );
+ switch ( event->xbutton.button ) {
+ case Button1: button = LeftButton; break;
+ case Button2: button = MidButton; break;
+@@ -4950,7 +4950,7 @@ bool QETWidget::translateKeyEventInterna
+ XKeyEvent xkeyevent = event->xkey;
+
+ // save the modifier state, we will use the keystate uint later by passing
+- // it to translateButtonState
++ // it to qt_x11_translateButtonState
+ uint keystate = event->xkey.state;
+ // remove the modifiers where mode_switch exists... HPUX machines seem
+ // to have alt *AND* mode_switch both in Mod1Mask, which causes
+@@ -5064,7 +5064,7 @@ bool QETWidget::translateKeyEventInterna
+ }
+ #endif // !QT_NO_XIM
+
+- state = translateButtonState( keystate );
++ state = qt_x11_translateButtonState( keystate );
+
+ static int directionKeyEvent = 0;
+ if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) {
+--- src/kernel/qdnd_x11.cpp.sav 2003-06-30 15:26:42.000000000 +0200
++++ src/kernel/qdnd_x11.cpp 2003-06-30 15:32:23.000000000 +0200
+@@ -114,6 +114,8 @@ Atom qt_xdnd_finished;
+ Atom qt_xdnd_type_list;
+ const int qt_xdnd_version = 4;
+
++extern int qt_x11_translateButtonState( int s );
++
+ // Actions
+ //
+ // The Xdnd spec allows for user-defined actions. This could be implemented
+@@ -198,6 +200,8 @@ static Atom qt_xdnd_source_current_time;
+ static int qt_xdnd_current_screen = -1;
+ // state of dragging... true if dragging, false if not
+ bool qt_xdnd_dragging = FALSE;
++// need to check state of keyboard modifiers
++static bool need_modifiers_check = FALSE;
+
+ // dict of payload data, sorted by type atom
+ static QIntDict<QByteArray> * qt_xdnd_target_data = 0;
+@@ -879,8 +883,20 @@ void qt_handle_xdnd_finished( QWidget *,
+
+ void QDragManager::timerEvent( QTimerEvent* e )
+ {
+- if ( e->timerId() == heartbeat && qt_xdnd_source_sameanswer.isNull() )
+- move( QCursor::pos() );
++ if ( e->timerId() == heartbeat ) {
++ if( need_modifiers_check ) {
++ Window root, child;
++ int root_x, root_y, win_x, win_y;
++ unsigned int mask;
++ XQueryPointer( qt_xdisplay(), qt_xrootwin( qt_xdnd_current_screen ),
++ &root, &child, &root_x, &root_y, &win_x, &win_y, &mask );
++ if( updateMode( (ButtonState)qt_x11_translateButtonState( mask )))
++ qt_xdnd_source_sameanswer = QRect(); // force move
++ }
++ need_modifiers_check = TRUE;
++ if( qt_xdnd_source_sameanswer.isNull() )
++ move( QCursor::pos() );
++ }
+ }
+
+ static bool qt_xdnd_was_move = false;
+@@ -948,6 +964,7 @@ bool QDragManager::eventFilter( QObject
+ updateMode(me->stateAfter());
+ move( me->globalPos() );
+ }
++ need_modifiers_check = FALSE;
+ return TRUE;
+ } else if ( e->type() == QEvent::MouseButtonRelease ) {
+ qApp->removeEventFilter( this );
+@@ -986,9 +1003,11 @@ bool QDragManager::eventFilter( QObject
+ beingCancelled = FALSE;
+ qApp->exit_loop();
+ } else {
+- updateMode(ke->stateAfter());
+- qt_xdnd_source_sameanswer = QRect(); // force move
+- move( QCursor::pos() );
++ if( updateMode(ke->stateAfter())) {
++ qt_xdnd_source_sameanswer = QRect(); // force move
++ move( QCursor::pos() );
++ }
++ need_modifiers_check = FALSE;
+ }
+ return TRUE; // Eat all key events
+ }
+@@ -1014,10 +1033,10 @@ bool QDragManager::eventFilter( QObject
+
+
+ static Qt::ButtonState oldstate;
+-void QDragManager::updateMode( ButtonState newstate )
++bool QDragManager::updateMode( ButtonState newstate )
+ {
+ if ( newstate == oldstate )
+- return;
++ return false;
+ const int both = ShiftButton|ControlButton;
+ if ( (newstate & both) == both ) {
+ global_requested_action = QDropEvent::Link;
+@@ -1041,6 +1060,7 @@ void QDragManager::updateMode( ButtonSta
+ }
+ }
+ oldstate = newstate;
++ return true;
+ }
+
+
+@@ -1707,6 +1727,7 @@ bool QDragManager::drag( QDragObject * o
+ qt_xdnd_source_sameanswer = QRect();
+ move(QCursor::pos());
+ heartbeat = startTimer(200);
++ need_modifiers_check = FALSE;
+
+ #ifndef QT_NO_CURSOR
+ qApp->setOverrideCursor( arrowCursor );
+--- src/kernel/qdragobject.h.sav 2003-05-19 22:34:43.000000000 +0200
++++ src/kernel/qdragobject.h 2001-01-01 01:01:00.000000000 +0100
+@@ -248,7 +248,7 @@ private:
+
+ private:
+ QDragObject * object;
+- void updateMode( ButtonState newstate );
++ bool updateMode( ButtonState newstate );
+ void updateCursor();
+
+ QWidget * dragSource;
diff --git a/dev-qt/qt-meta/files/0038-dragobject-dont-prefer-unknown.patch b/dev-qt/qt-meta/files/0038-dragobject-dont-prefer-unknown.patch
new file mode 100644
index 00000000..ae4163ae
--- /dev/null
+++ b/dev-qt/qt-meta/files/0038-dragobject-dont-prefer-unknown.patch
@@ -0,0 +1,57 @@
+qt-bugs@ issue : 38642
+bugs.kde.org number : 71084
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+Hello,
+
+ start Mozilla, go e.g. to http://kde.org, start KWrite (or basically any Qt
+app that accepts text drops), select 'Conquer your Desktop!', and try to
+drag&drop it onto KWrite. The only text pasted should be 'm'.
+
+ I don't know much the related mimetype and encoding stuff, so I'm unsure
+whose fault this actually is. The text drag is provided as a lot of
+text/something targets, to list some text/_moz_htmlinfo, text/x-moz-url,
+text/unicode and similar. The problem is, Kate uses QTextDrag::decode() with
+no subtype specified, probably with the intention that as Kate is a text
+editor, it can accept any text pasted. And since the first target provided by
+mozilla is text/x-moz-url, (which moreover seems to be encoded as 16bit
+unicode), the text dropped is completely wrong. You can easily see all
+targets provided by Mozilla with see_mime.patch applied.
+
+ Solution #1: Say that Kate (any pretty much everybody else expecting text)
+should say "plain" as the subtype. In such case, I suggest you drop the
+QTextDrag::decode() variant with no subtype specified, and stress more the
+fact that not specifying a subtype can result in a lot of rubbish. It's
+simply too tempting to leave the subtype empty and try to accept anything.
+
+ Solution #2: When trying to accept anything, try to get useful data. Which
+means either sorting the subtypes available somehow, checking only the ones
+Qt knows.
+
+ To me, #1 seems to be a better choice, or possibly at least something like
+the attached QTextDrag patch, which simply always tries first "plain" subtype
+if none is specified. With this patch, Mozilla even works (that's irony, of
+course, Mozilla still pastes the text/plain text as HTML, but at least now it
+pastes something where it's easy to point at the offender).
+
+
+--- src/kernel/qdragobject.cpp.sav 2004-01-06 19:24:35.000000000 +0100
++++ src/kernel/qdragobject.cpp 2004-01-06 19:47:01.000000000 +0100
+@@ -844,6 +844,16 @@ bool QTextDrag::decode( const QMimeSourc
+ {
+ if(!e)
+ return FALSE;
++
++ // when subtype is not specified, try text/plain first, otherwise this may read
++ // things like text/x-moz-url even though better targets are available
++ if( subtype.isNull()) {
++ QCString subtmp = "plain";
++ if( decode( e, str, subtmp )) {
++ subtype = subtmp;
++ return true;
++ }
++ }
+
+ if ( e->cacheType == QMimeSource::Text ) {
+ str = *e->cache.txt.str;
diff --git a/dev-qt/qt-meta/files/0044-qscrollview-windowactivate-fix.diff b/dev-qt/qt-meta/files/0044-qscrollview-windowactivate-fix.diff
new file mode 100644
index 00000000..9a6df32a
--- /dev/null
+++ b/dev-qt/qt-meta/files/0044-qscrollview-windowactivate-fix.diff
@@ -0,0 +1,38 @@
+qt-bugs@ issue : N45716
+applied: no
+author: Enrico Ros <eros.kde@email.it>
+
+QScrollView unwanted repaint fix.
+
+This fixes the 'flashing' konqueror window on activation / deactivation by
+saving 1 unwanted repaint (when konqueror window has background).
+I tracked down to the problem to the internal QViewportWidget of the
+QScrollView class.
+
+When a window is activated the activation event is recursively propagated
+to all childs triggering the windowActivationChange() functions in the
+widget it passes by.
+What happens when the event gets to the Viewport?
+At this point the event has already been handled by windowActivationChange()
+of the parent widget (a QIconView for example) and has then been propagated
+to the Viewport that will handle it with the default
+QWidget::windowActivationChange implementation, maybe raising an unwanted
+update(); so here we stop the event.
+As an addition: if the parent reimplements the windowActivationChange()
+function, mainly to block the update, it won't be happy if the child will
+trigger the update. If the parent do not reimplement the function il will
+inherits the default implementation and there is no need for the viewport's
+one.
+
+--- src/widgets/qscrollview.cpp.orig 2004-03-29 10:17:04.000000000 +0000
++++ src/widgets/qscrollview.cpp 2004-03-30 16:40:07.599978320 +0000
+@@ -1551,6 +1551,9 @@
+ case QEvent::LayoutHint:
+ d->autoResizeHint(this);
+ break;
++ case QEvent::WindowActivate:
++ case QEvent::WindowDeactivate:
++ return TRUE;
+ default:
+ break;
+ }
diff --git a/dev-qt/qt-meta/files/0047-fix-kmenu-widget.diff b/dev-qt/qt-meta/files/0047-fix-kmenu-widget.diff
new file mode 100644
index 00000000..fb0bb167
--- /dev/null
+++ b/dev-qt/qt-meta/files/0047-fix-kmenu-widget.diff
@@ -0,0 +1,25 @@
+qt-bugs@ issue: N46882
+bugs.kde.org number: 77545
+applied: no
+author: Stephan Binner <binner@kde.org>
+
+Fix wrong K menu width for the case of enabled side pixmap and a menu title
+(like "Recently Used Applications") being longer than every other entry.
+
+Solution: Respect PanelKMenu::setMaximumSize() as up to Qt 3.2.3
+
+Index: src/widgets/qpopupmenu.cpp
+===================================================================
+RCS file: /home/kde/qt-copy/src/widgets/qpopupmenu.cpp,v
+retrieving revision 1.60
+diff -u -3 -p -b -r1.60 qpopupmenu.cpp
+--- src/widgets/qpopupmenu.cpp 29 Apr 2004 22:31:28 -0000 1.60
++++ src/widgets/qpopupmenu.cpp 30 Apr 2004 01:11:59 -0000
+@@ -2531,7 +2531,7 @@ QSize QPopupMenu::sizeHint() const
+
+ QPopupMenu* that = (QPopupMenu*) this;
+ //We do not need a resize here, just the sizeHint..
+- return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() );
++ return that->updateSize(FALSE).expandedTo( QApplication::globalStrut() );
+ }
+
diff --git a/dev-qt/qt-meta/files/0048-qclipboard_hack_80072.patch b/dev-qt/qt-meta/files/0048-qclipboard_hack_80072.patch
new file mode 100644
index 00000000..74c60fb2
--- /dev/null
+++ b/dev-qt/qt-meta/files/0048-qclipboard_hack_80072.patch
@@ -0,0 +1,48 @@
+qt-bugs@ issue : none, probably even won't be
+bugs.kde.org number : 80072
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+A crude hack for KDE #80072. No good idea how to fix it properly yet :(.
+
+--- src/kernel/qclipboard_x11.cpp.sav 2004-04-30 12:00:06.000000000 +0200
++++ src/kernel/qclipboard_x11.cpp 2004-05-09 21:18:10.269264304 +0200
+@@ -109,6 +109,7 @@ static int pending_timer_id = 0;
+ static bool pending_clipboard_changed = FALSE;
+ static bool pending_selection_changed = FALSE;
+
++Q_EXPORT bool qt_qclipboard_bailout_hack = false;
+
+ // event capture mechanism for qt_xclb_wait_for_event
+ static bool waiting_for_data = FALSE;
+@@ -453,6 +454,15 @@ static int qt_xclb_event_filter(XEvent *
+ return 0;
+ }
+
++static bool selection_request_pending = false;
++
++static Bool check_selection_request_pending( Display*, XEvent* e, XPointer )
++ {
++ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId())
++ selection_request_pending = true;
++ return False;
++ }
++
+ bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event,
+ int timeout )
+ {
+@@ -504,6 +514,14 @@ bool qt_xclb_wait_for_event( Display *dp
+ do {
+ if ( XCheckTypedWindowEvent(dpy,win,type,event) )
+ return TRUE;
++ if( qt_qclipboard_bailout_hack ) {
++ XEvent dummy;
++ selection_request_pending = false;
++ if ( owner != NULL )
++ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL);
++ if( selection_request_pending )
++ return TRUE;
++ }
+
+ now = QTime::currentTime();
+ if ( started > now ) // crossed midnight
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-fix-compiler-detection.patch b/dev-qt/qt-meta/files/qt-3.3.8-fix-compiler-detection.patch
new file mode 100644
index 00000000..203b71e6
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-fix-compiler-detection.patch
@@ -0,0 +1,22 @@
+--- qt-x11-free-3.3.8-orig/configure 2008-10-28 15:43:35.000000000 +0100
++++ qt-x11-free-3.3.8/configure 2008-10-28 15:45:48.000000000 +0100
+@@ -3079,15 +3079,15 @@
+ 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} -dumpversion 2>/dev/null`
+ case "$COMPILER_VERSION" in
+- *2.95.*)
++ 2.95.*)
+ COMPILER_VERSION="2.95.*"
+ ;;
+- *3.*)
++ 3.*)
+ COMPILER_VERSION="3.*"
+ ;;
+- *4.*)
++ 4.*)
+ COMPILER_VERSION="4"
+ ;;
+ *)
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-immqt+gcc-4.3.patch b/dev-qt/qt-meta/files/qt-3.3.8-immqt+gcc-4.3.patch
new file mode 100644
index 00000000..65610e37
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-immqt+gcc-4.3.patch
@@ -0,0 +1,20 @@
+--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp~ 2007-04-05 09:47:44.000000000 +0000
++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp 2007-04-05 09:48:08.000000000 +0000
+@@ -44,6 +44,7 @@
+ #include "qnoneinputcontextplugin.h"
+ #include <qinputcontextfactory.h>
+ #include <qsettings.h>
++#include <cstdlib>
+
+
+ QNoneInputContextPlugin::QNoneInputContextPlugin()
+--- plugins/src/inputmethods/simple/qsimpleinputcontext.cpp~ 2007-04-05 09:48:46.000000000 +0000
++++ plugins/src/inputmethods/simple/qsimpleinputcontext.cpp 2007-04-05 09:48:54.000000000 +0000
+@@ -45,6 +45,7 @@
+ #include <qnamespace.h>
+ #include <qevent.h>
+ #include <qglobal.h>
++#include <algorithm>
+
+ static const int ignoreKeys[] = {
+ Qt::Key_Shift,
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-libpng15.patch b/dev-qt/qt-meta/files/qt-3.3.8-libpng15.patch
new file mode 100644
index 00000000..e64fea36
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-libpng15.patch
@@ -0,0 +1,212 @@
+$NetBSD: patch-as,v 1.5 2011/03/25 15:28:26 wiz Exp $
+
+--- src/kernel/qpngio.cpp.orig 2007-02-02 10:01:15.000000000 -0400
++++ src/kernel/qpngio.cpp
+@@ -43,6 +43,7 @@
+ #include "qiodevice.h"
+
+ #include <png.h>
++#include <zlib.h>
+
+
+ #ifdef Q_OS_TEMP
+@@ -123,9 +124,24 @@ void setup_qt( QImage& image, png_struct
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
+ 0, 0, 0);
+
++ png_colorp info_ptr_palette = NULL;
++ int info_ptr_num_palette = 0;
++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE)) {
++ png_get_PLTE(png_ptr, info_ptr, &info_ptr_palette, &info_ptr_num_palette);
++ }
++
++ png_bytep info_ptr_trans_alpha = NULL;
++ int info_ptr_num_trans = 0;
++ png_color_16p info_ptr_trans_color = NULL;
++
++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
++ png_get_tRNS(png_ptr, info_ptr, &info_ptr_trans_alpha, &info_ptr_num_trans, &info_ptr_trans_color);
++ }
++
++
+ if ( color_type == PNG_COLOR_TYPE_GRAY ) {
+ // Black & White or 8-bit grayscale
+- if ( bit_depth == 1 && info_ptr->channels == 1 ) {
++ if ( bit_depth == 1 && png_get_channels(png_ptr, info_ptr) == 1 ) {
+ png_set_invert_mono( png_ptr );
+ png_read_update_info( png_ptr, info_ptr );
+ if (!image.create( width, height, 1, 2, QImage::BigEndian ))
+@@ -159,7 +175,7 @@ void setup_qt( QImage& image, png_struct
+ image.setColor( i, qRgba(c,c,c,0xff) );
+ }
+ if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) {
+- const int g = info_ptr->trans_values.gray;
++ const int g = info_ptr_trans_color->gray;
+ if (g < ncols) {
+ image.setAlphaBuffer(TRUE);
+ image.setColor(g, image.color(g) & RGB_MASK);
+@@ -168,7 +184,7 @@ void setup_qt( QImage& image, png_struct
+ }
+ } else if ( color_type == PNG_COLOR_TYPE_PALETTE
+ && png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE)
+- && info_ptr->num_palette <= 256 )
++ && info_ptr_num_palette <= 256 )
+ {
+ // 1-bit and 8-bit color
+ if ( bit_depth != 1 )
+@@ -176,28 +192,28 @@ void setup_qt( QImage& image, png_struct
+ png_read_update_info( png_ptr, info_ptr );
+ png_get_IHDR(png_ptr, info_ptr,
+ &width, &height, &bit_depth, &color_type, 0, 0, 0);
+- if (!image.create(width, height, bit_depth, info_ptr->num_palette,
++ if (!image.create(width, height, bit_depth, info_ptr_num_palette,
+ QImage::BigEndian))
+ return;
+ int i = 0;
+ if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) {
+ image.setAlphaBuffer( TRUE );
+- while ( i < info_ptr->num_trans ) {
++ while ( i < info_ptr_num_trans ) {
+ image.setColor(i, qRgba(
+- info_ptr->palette[i].red,
+- info_ptr->palette[i].green,
+- info_ptr->palette[i].blue,
+- info_ptr->trans[i]
++ info_ptr_palette[i].red,
++ info_ptr_palette[i].green,
++ info_ptr_palette[i].blue,
++ info_ptr_trans_alpha[i]
+ )
+ );
+ i++;
+ }
+ }
+- while ( i < info_ptr->num_palette ) {
++ while ( i < info_ptr_num_palette ) {
+ image.setColor(i, qRgba(
+- info_ptr->palette[i].red,
+- info_ptr->palette[i].green,
+- info_ptr->palette[i].blue,
++ info_ptr_palette[i].red,
++ info_ptr_palette[i].green,
++ info_ptr_palette[i].blue,
+ 0xff
+ )
+ );
+@@ -284,7 +300,7 @@ void read_png_image(QImageIO* iio)
+ return;
+ }
+
+- if (setjmp(png_ptr->jmpbuf)) {
++ if (setjmp(png_jmpbuf(png_ptr))) {
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+ iio->setStatus(-4);
+ return;
+@@ -469,7 +485,7 @@ bool QPNGImageWriter::writeImage(const Q
+ return FALSE;
+ }
+
+- if (setjmp(png_ptr->jmpbuf)) {
++ if (setjmp(png_jmpbuf(png_ptr))) {
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ return FALSE;
+ }
+@@ -491,10 +507,16 @@ bool QPNGImageWriter::writeImage(const Q
+
+ png_set_write_fn(png_ptr, (void*)this, qpiw_write_fn, qpiw_flush_fn);
+
++#warning XXXtnn not too sure about this
++/*
++according to png.h, channels is only used on read, not writes, so we
++should be able to comment this out.
++
+ info_ptr->channels =
+ (image.depth() == 32)
+ ? (image.hasAlphaBuffer() ? 4 : 3)
+ : 1;
++*/
+
+ png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(),
+ image.depth() == 1 ? 1 : 8 /* per channel */,
+@@ -504,11 +526,12 @@ bool QPNGImageWriter::writeImage(const Q
+ : PNG_COLOR_TYPE_RGB
+ : PNG_COLOR_TYPE_PALETTE, 0, 0, 0);
+
++ png_color_8 sig_bit;
++ sig_bit.red = 8;
++ sig_bit.green = 8;
++ sig_bit.blue = 8;
++ png_set_sBIT(png_ptr, info_ptr, &sig_bit);
+
+- //png_set_sBIT(png_ptr, info_ptr, 8);
+- info_ptr->sig_bit.red = 8;
+- info_ptr->sig_bit.green = 8;
+- info_ptr->sig_bit.blue = 8;
+
+ if (image.depth() == 1 && image.bitOrder() == QImage::LittleEndian)
+ png_set_packswap(png_ptr);
+@@ -522,11 +545,14 @@ bool QPNGImageWriter::writeImage(const Q
+ png_set_PLTE(png_ptr, info_ptr, palette, num_palette);
+ int* trans = new int[num_palette];
+ int num_trans = 0;
++ png_colorp info_ptr_palette = NULL;
++ int tmp;
++ png_get_PLTE(png_ptr, info_ptr, &info_ptr_palette, &tmp);
+ for (int i=0; i<num_palette; i++) {
+ QRgb rgb=image.color(i);
+- info_ptr->palette[i].red = qRed(rgb);
+- info_ptr->palette[i].green = qGreen(rgb);
+- info_ptr->palette[i].blue = qBlue(rgb);
++ info_ptr_palette[i].red = qRed(rgb);
++ info_ptr_palette[i].green = qGreen(rgb);
++ info_ptr_palette[i].blue = qBlue(rgb);
+ if (image.hasAlphaBuffer()) {
+ trans[i] = rgb >> 24;
+ if (trans[i] < 255) {
+@@ -534,6 +560,7 @@ bool QPNGImageWriter::writeImage(const Q
+ }
+ }
+ }
++ png_set_PLTE(png_ptr, info_ptr, info_ptr_palette, num_palette);
+ if (num_trans) {
+ copy_trans = new png_byte[num_trans];
+ for (int i=0; i<num_trans; i++)
+@@ -544,7 +571,10 @@ bool QPNGImageWriter::writeImage(const Q
+ }
+
+ if ( image.hasAlphaBuffer() ) {
+- info_ptr->sig_bit.alpha = 8;
++ png_color_8p sig_bit;
++ png_get_sBIT(png_ptr, info_ptr, &sig_bit);
++ sig_bit->alpha = 8;
++ png_set_sBIT(png_ptr, info_ptr, sig_bit);
+ }
+
+ // Swap ARGB to RGBA (normal PNG format) before saving on
+@@ -1030,7 +1060,7 @@ int QPNGFormat::decode(QImage& img, QIma
+ return -1;
+ }
+
+- if (setjmp((png_ptr)->jmpbuf)) {
++ if (setjmp(png_jmpbuf(png_ptr))) {
+ png_destroy_read_struct(&png_ptr, &info_ptr, 0);
+ image = 0;
+ return -1;
+@@ -1057,7 +1087,7 @@ int QPNGFormat::decode(QImage& img, QIma
+
+ if ( !png_ptr ) return 0;
+
+- if (setjmp(png_ptr->jmpbuf)) {
++ if (setjmp(png_jmpbuf(png_ptr))) {
+ png_destroy_read_struct(&png_ptr, &info_ptr, 0);
+ image = 0;
+ state = MovieStart;
+@@ -1117,7 +1147,7 @@ void QPNGFormat::end(png_structp png, pn
+ consumer->frameDone(QPoint(offx,offy),r);
+ consumer->end();
+ state = FrameStart;
+- unused_data = (int)png->buffer_size; // Since libpng doesn't tell us
++ unused_data = png_process_data_pause(png, 0);
+ }
+
+ #ifdef PNG_USER_CHUNKS_SUPPORTED
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-mips.patch b/dev-qt/qt-meta/files/qt-3.3.8-mips.patch
new file mode 100644
index 00000000..1f70900f
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-mips.patch
@@ -0,0 +1,39 @@
+Bug 210551.
+Fix compilation on mips
+
+Original commit message by Christopher Martin, debian bug 342545.
+
+ * Add a patch, courtesy of Steve Langasek, that fixes
+ qt-x11-free's longstanding intermittent FTBFS on hppa, caused
+ by "the bogus assumption in src/tools/qlocale.cpp that a
+ char[] can be cast to a double *." (Closes: #342545)
+
+--- qt-x11-free-3.3.6.orig/src/tools/qlocale.cpp
++++ qt-x11-free-3.3.6/src/tools/qlocale.cpp
+@@ -122,13 +122,24 @@
+ #endif
+
+ // We can't rely on -NAN, since all operations on a NAN should return a NAN.
++static double be_neg_nan;
++static double le_neg_nan;
+ static const unsigned char be_neg_nan_bytes[] = { 0xff, 0xf8, 0, 0, 0, 0, 0, 0 };
+ static const unsigned char le_neg_nan_bytes[] = { 0, 0, 0, 0, 0, 0, 0xf8, 0xff };
++static bool neg_nan_init = false;
++
+ static inline double negNan()
+ {
++ if (!neg_nan_init)
++ {
++ memcpy(&be_neg_nan,be_neg_nan_bytes,sizeof(be_neg_nan_bytes));
++ memcpy(&le_neg_nan,le_neg_nan_bytes,sizeof(le_neg_nan_bytes));
++ neg_nan_init = true;
++ }
+ return (ByteOrder == BigEndian ?
+- *((const double *) be_neg_nan_bytes) :
+- *((const double *) le_neg_nan_bytes));
++ be_neg_nan :
++ le_neg_nan);
++
+ }
+
+ // Sizes as defined by the ISO C99 standard - fallback
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-seli-xinerama.patch b/dev-qt/qt-meta/files/qt-3.3.8-seli-xinerama.patch
new file mode 100644
index 00000000..9fdd97a3
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-seli-xinerama.patch
@@ -0,0 +1,49 @@
+--- src/kernel/qapplication_x11.cpp.sav 2006-06-01 13:31:04.000000000 +0200
++++ src/kernel/qapplication_x11.cpp 2006-06-01 13:33:07.000000000 +0200
+@@ -271,6 +271,7 @@ Atom qt_net_wm_frame_strut = 0; // KDE
+ Atom qt_net_wm_state_stays_on_top = 0; // KDE extension
+ Atom qt_net_wm_pid = 0;
+ Atom qt_net_wm_user_time = 0;
++Atom qt_net_wm_full_placement = 0; // KDE extension
+ // Enlightenment support
+ Atom qt_enlightenment_desktop = 0;
+
+@@ -1922,6 +1923,7 @@ void qt_init_internal( int *argcptr, cha
+ &qt_net_wm_state_stays_on_top );
+ qt_x11_intern_atom( "_NET_WM_PID", &qt_net_wm_pid );
+ qt_x11_intern_atom( "_NET_WM_USER_TIME", &qt_net_wm_user_time );
++ qt_x11_intern_atom( "_NET_WM_FULL_PLACEMENT", &qt_net_wm_full_placement );
+ qt_x11_intern_atom( "ENLIGHTENMENT_DESKTOP", &qt_enlightenment_desktop );
+ qt_x11_intern_atom( "_NET_WM_NAME", &qt_net_wm_name );
+ qt_x11_intern_atom( "_NET_WM_ICON_NAME", &qt_net_wm_icon_name );
+--- src/dialogs/qdialog.cpp.sav 2006-03-17 14:33:44.000000000 +0100
++++ src/dialogs/qdialog.cpp 2006-06-01 13:38:00.000000000 +0200
+@@ -670,6 +670,11 @@ bool QDialog::event( QEvent *e )
+
+ #if defined(Q_WS_X11)
+ extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); }
++#include <private/qt_x11_p.h>
++#undef FocusIn
++// defined in qapplication_x11.cpp
++extern Atom qt_net_wm_full_placement;
++extern bool qt_net_supports(Atom atom);
+ #endif // Q_WS_X11
+
+ /*!
+@@ -691,10 +696,12 @@ void QDialog::show()
+
+ if ( !did_resize )
+ adjustSize();
+- if ( has_relpos && !did_move ) {
+- adjustPositionInternal( parentWidget(), TRUE );
+- } else if ( !did_move ) {
+- adjustPositionInternal( parentWidget() );
++ if( !qt_net_supports( qt_net_wm_full_placement )) {
++ if ( has_relpos && !did_move ) {
++ adjustPositionInternal( parentWidget(), TRUE );
++ } else if ( !did_move ) {
++ adjustPositionInternal( parentWidget() );
++ }
+ }
+
+ if (windowState() != state)
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-uic-fix.patch b/dev-qt/qt-meta/files/qt-3.3.8-uic-fix.patch
new file mode 100644
index 00000000..8e5bd559
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-uic-fix.patch
@@ -0,0 +1,18 @@
+Index: tools/designer/uic/form.cpp
+===================================================================
+--- tools/designer/uic/form.cpp (revision 460038)
++++ tools/designer/uic/form.cpp (working copy)
+@@ -731,6 +731,13 @@
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "includehint" ) {
+ QString file = n2.firstChild().toText().data();
++ int colons = file.find("::");
++
++ if (colons != -1)
++ {
++ file = file.right(file.length() - colons - 2);
++ }
++
+ localIncludes += file;
+ }
+ n2 = n2.nextSibling().toElement();
diff --git a/dev-qt/qt-meta/files/qt-3.3.8-visibility.patch b/dev-qt/qt-meta/files/qt-3.3.8-visibility.patch
new file mode 100644
index 00000000..a5246b9f
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8-visibility.patch
@@ -0,0 +1,159 @@
+Index: configure
+===================================================================
+--- configure (revision 471775)
++++ configure (working copy)
+@@ -1053,6 +1053,7 @@
+ [ -d $outpath/src/tools ] || mkdir -p $outpath/src/tools
+ cat > $outpath/src/tools/qconfig.cpp.new <<EOF
+ /* Install paths from configure */
++#include "qglobal.h"
+
+ static const char QT_INSTALL_PREFIX [267] = "qt_nstpath=$QT_INSTALL_PREFIX";
+ static const char QT_INSTALL_BINS [267] = "qt_binpath=$QT_INSTALL_BINS";
+Index: src/kernel/qgplugin.h
+===================================================================
+--- src/kernel/qgplugin.h (revision 471775)
++++ src/kernel/qgplugin.h (working copy)
+@@ -90,35 +90,19 @@
+ return i->iface(); \
+ }
+
+-# ifdef Q_WS_WIN
+-# ifdef Q_CC_BOR
+-# define Q_EXPORT_PLUGIN(PLUGIN) \
+- Q_PLUGIN_VERIFICATION_DATA \
+- Q_EXTERN_C __declspec(dllexport) \
+- const char * __stdcall qt_ucm_query_verification_data() \
+- { return qt_ucm_verification_data; } \
+- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* \
+- __stdcall ucm_instantiate() \
+- Q_PLUGIN_INSTANTIATE( PLUGIN )
+-# else
+-# define Q_EXPORT_PLUGIN(PLUGIN) \
+- Q_PLUGIN_VERIFICATION_DATA \
+- Q_EXTERN_C __declspec(dllexport) \
+- const char *qt_ucm_query_verification_data() \
+- { return qt_ucm_verification_data; } \
+- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* ucm_instantiate() \
+- Q_PLUGIN_INSTANTIATE( PLUGIN )
+-# endif
+-# else
+-# define Q_EXPORT_PLUGIN(PLUGIN) \
++#if defined(Q_WS_WIN) && defined(Q_CC_BOR)
++# define Q_STDCALL __stdcall
++#else
++# define Q_STDCALL
++#endif
++
++#define Q_EXPORT_PLUGIN(PLUGIN) \
+ Q_PLUGIN_VERIFICATION_DATA \
+- Q_EXTERN_C \
+- const char *qt_ucm_query_verification_data() \
++ Q_EXTERN_C Q_EXPORT \
++ const char * Q_STDCALL qt_ucm_query_verification_data() \
+ { return qt_ucm_verification_data; } \
+- Q_EXTERN_C QUnknownInterface* ucm_instantiate() \
++ Q_EXTERN_C Q_EXPORT QUnknownInterface* Q_STDCALL ucm_instantiate() \
+ Q_PLUGIN_INSTANTIATE( PLUGIN )
+-# endif
+-
+ #endif
+
+ struct QUnknownInterface;
+Index: src/kernel/qapplication_x11.cpp
+===================================================================
+--- src/kernel/qapplication_x11.cpp (revision 471775)
++++ src/kernel/qapplication_x11.cpp (working copy)
+@@ -314,7 +314,7 @@
+
+ // flags for extensions for special Languages, currently only for RTL languages
+ static bool qt_use_rtl_extensions = FALSE;
+-bool qt_hebrew_keyboard_hack = FALSE;
++Q_EXPORT bool qt_hebrew_keyboard_hack = FALSE;
+
+ static Window mouseActWindow = 0; // window where mouse is
+ static int mouseButtonPressed = 0; // last mouse button pressed
+@@ -3800,7 +3800,7 @@
+ }
+
+
+-bool qt_try_modal( QWidget *widget, XEvent *event )
++Q_EXPORT bool qt_try_modal( QWidget *widget, XEvent *event )
+ {
+ if (qt_xdnd_dragging) {
+ // allow mouse events while DnD is active
+Index: src/kernel/qtextengine_p.h
+===================================================================
+--- src/kernel/qtextengine_p.h (revision 471775)
++++ src/kernel/qtextengine_p.h (working copy)
+@@ -280,7 +280,7 @@
+
+ class QFontPrivate;
+
+-class QTextEngine {
++class Q_EXPORT QTextEngine {
+ public:
+ QTextEngine( const QString &str, QFontPrivate *f );
+ ~QTextEngine();
+Index: src/tools/qglobal.h
+===================================================================
+--- src/tools/qglobal.h (revision 471775)
++++ src/tools/qglobal.h (working copy)
+@@ -865,6 +865,10 @@
+ # define Q_TEMPLATE_EXTERN
+ # undef Q_DISABLE_COPY /* avoid unresolved externals */
+ # endif
++#elif defined(Q_CC_GNU) && __GNUC__ - 0 >= 4
++# define Q_EXPORT __attribute__((visibility("default")))
++# undef QT_MAKEDLL /* ignore these for other platforms */
++# undef QT_DLL
+ #else
+ # undef QT_MAKEDLL /* ignore these for other platforms */
+ # undef QT_DLL
+Index: tools/designer/uilib/qwidgetfactory.h
+===================================================================
+--- tools/designer/uilib/qwidgetfactory.h (revision 471775)
++++ tools/designer/uilib/qwidgetfactory.h (working copy)
+@@ -48,7 +48,7 @@
+ class QWidgetFactoryPrivate;
+ class UibStrTable;
+
+-class QWidgetFactory
++class Q_EXPORT QWidgetFactory
+ {
+ public:
+ QWidgetFactory();
+Index: tools/designer/uilib/qwidgetfactory.cpp
+===================================================================
+--- tools/designer/uilib/qwidgetfactory.cpp (revision 471775)
++++ tools/designer/uilib/qwidgetfactory.cpp (working copy)
+@@ -113,13 +113,13 @@
+ static QMap<QString, bool> *availableWidgetMap = 0;
+ static QStringList *availableWidgetList = 0;
+
+-QMap<QWidget*, QString> *qwf_forms = 0;
++Q_EXPORT QMap<QWidget*, QString> *qwf_forms = 0;
+ QString *qwf_language = 0;
+-bool qwf_execute_code = TRUE;
++Q_EXPORT bool qwf_execute_code = TRUE;
+ bool qwf_stays_on_top = FALSE;
+ QString qwf_currFileName = "";
+ QObject *qwf_form_object = 0;
+-QString *qwf_plugin_dir = 0;
++Q_EXPORT QString *qwf_plugin_dir = 0;
+
+ static void setupPluginDir()
+ {
+Index: tools/designer/shared/domtool.h
+===================================================================
+--- tools/designer/shared/domtool.h (revision 471775)
++++ tools/designer/shared/domtool.h (working copy)
+@@ -33,7 +33,7 @@
+ class QDomElement;
+ class QDomDocument;
+
+-class DomTool : public Qt
++class Q_EXPORT DomTool : public Qt
+ {
+ public:
+ static QVariant readProperty( const QDomElement& e, const QString& name, const QVariant& defValue );
diff --git a/dev-qt/qt-meta/files/qt-3.3.8b-cjk-fix.patch b/dev-qt/qt-meta/files/qt-3.3.8b-cjk-fix.patch
new file mode 100644
index 00000000..5372bdb8
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-3.3.8b-cjk-fix.patch
@@ -0,0 +1,32 @@
+--- src/kernel/qfontdatabase.cpp 2008-07-10 06:17:31.000000000 +0800
++++ src/kernel/qfontdatabase.cpp 2008-07-10 06:27:53.000000000 +0800
+@@ -960,19 +960,17 @@
+ #ifdef Q_WS_X11
+ if (script == QFont::Han) {
+ // modify script according to locale
+- static QFont::Script defaultHan = QFont::UnknownScript;
+- if (defaultHan == QFont::UnknownScript) {
+- QCString locale = setlocale(LC_ALL, NULL);
+- if (locale.contains("ko"))
+- defaultHan = QFont::Han_Korean;
+- else if (locale.contains("zh_TW") || locale.contains("zh_HK"))
+- defaultHan = QFont::Han_TraditionalChinese;
+- else if (locale.contains("zh"))
+- defaultHan = QFont::Han_SimplifiedChinese;
+- else
+- defaultHan = QFont::Han_Japanese;
++ static QFont::Script defaultHan = QFont::Han;
++ QCString locale = setlocale(LC_ALL, NULL);
++ if (locale.contains("ko"))
++ defaultHan = QFont::Han_Korean;
++ else if (locale.contains("zh_TW") || locale.contains("zh_HK"))
++ defaultHan = QFont::Han_TraditionalChinese;
++ else if (locale.contains("zh"))
++ defaultHan = QFont::Han_SimplifiedChinese;
++ else if (locale.contains("jp"))
++ defaultHan = QFont::Han_Japanese;
+- }
+ script = defaultHan;
+ }
+ #endif
+
diff --git a/dev-qt/qt-meta/files/qt-ulibc.patch b/dev-qt/qt-meta/files/qt-ulibc.patch
new file mode 100644
index 00000000..f188778e
--- /dev/null
+++ b/dev-qt/qt-meta/files/qt-ulibc.patch
@@ -0,0 +1,13 @@
+--- qt-x11-free-3.3.4.orig/src/tools/qlocale.cpp 2005-01-21 17:16:05.000000000 +0000
++++ qt-x11-free-3.3.4/src/tools/qlocale.cpp 2005-02-18 13:36:59.000000000 +0000
+@@ -55,6 +55,10 @@
+ # undef INFINITY
+ #endif
+
++#if defined(Q_OS_LINUX) && defined(__UCLIBC__)
++# undef Q_OS_LINUX
++#endif
++
+ #ifdef Q_OS_LINUX
+ # include <fenv.h>
+ #endif