diff --git a/0076-fix-qprocess.diff b/0076-fix-qprocess.diff deleted file mode 100644 index 78716ee..0000000 --- a/0076-fix-qprocess.diff +++ /dev/null @@ -1,19 +0,0 @@ -qt-bugs@ issue : none -bugs.kde.org number : none -applied: no -author: from trolltech - -Fixes a regression in QProgress::writeToStdin() - - ---- src/kernel/qprocess.cpp -+++ src/kernel/qprocess.cpp -@@ -727,7 +727,7 @@ void QProcess::closeStdinLaunch() - void QProcess::writeToStdin( const QString& buf ) - { - QByteArray tmp = buf.local8Bit(); -- tmp.resize( tmp.size() - 1 ); // drop the implicit \0 -+ tmp.resize( qstrlen( tmp.data() ) ); - writeToStdin( tmp ); - } - diff --git a/0079-compositing-types.patch b/0079-compositing-types.patch new file mode 100644 index 0000000..3c3649c --- /dev/null +++ b/0079-compositing-types.patch @@ -0,0 +1,424 @@ +qt-bugs@ issue : none +bugs.kde.org number : none +applied: no +author: Lubos Lunak + +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() ); diff --git a/0080-net-wm-sync-request-2.patch b/0080-net-wm-sync-request-2.patch new file mode 100644 index 0000000..0f996ac --- /dev/null +++ b/0080-net-wm-sync-request-2.patch @@ -0,0 +1,311 @@ +qt-bugs@ issue : none +bugs.kde.org number : none +applied: no +author: Lubos Lunak + +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,8 +970,12 @@ struct Q_EXPORT QTLWExtra { + uint uspos : 1; // User defined position + uint ussize : 1; // User defined size + #if defined(QT_NO_IM_EXTENSIONS) + void *xic; // Input Context + #endif ++#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 ++#endif // QT_NO_XSYNC ++ ++ + #ifndef QT_NO_XKB + # include + #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,8 +2480,13 @@ void QWidget::createTLSysExtra() + { + #if defined(QT_NO_IM_EXTENSIONS) + // created lazily + extra->topextra->xic = 0; + #endif ++#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; + } + diff --git a/0084-compositing-properties.patch b/0084-compositing-properties.patch new file mode 100644 index 0000000..368b6c2 --- /dev/null +++ b/0084-compositing-properties.patch @@ -0,0 +1,80 @@ +qt-bugs@ issue : none +bugs.kde.org number : none +applied: no +author: Lubos Lunak + +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 ) { diff --git a/qt-3.3.6-bz#292941-CVE-2007-4137.patch b/qt-3.3.6-bz#292941-CVE-2007-4137.patch deleted file mode 100644 index 06ae9e5..0000000 --- a/qt-3.3.6-bz#292941-CVE-2007-4137.patch +++ /dev/null @@ -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; diff --git a/qt-3.3.6-fontrendering-gu-228451.patch b/qt-3.3.6-fontrendering-gu-228451.patch deleted file mode 100644 index c20fea3..0000000 --- a/qt-3.3.6-fontrendering-gu-228451.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -pruN qt-x11-free-3.3.6.org/src/kernel/qscriptengine_x11.cpp qt-x11-free-3.3.6/src/kernel/qscriptengine_x11.cpp ---- qt-x11-free-3.3.6.org/src/kernel/qscriptengine_x11.cpp 2007-02-13 14:35:30.000000000 +0530 -+++ qt-x11-free-3.3.6/src/kernel/qscriptengine_x11.cpp 2007-02-13 14:37:58.000000000 +0530 -@@ -226,7 +226,7 @@ static const unsigned char indicForms[0x - Invalid, VowelMark, VowelMark, VowelMark, - Invalid, IndependentVowel, IndependentVowel, IndependentVowel, - IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel, -- Invalid, IndependentVowel, Invalid, IndependentVowel, -+ IndependentVowel, IndependentVowel, Invalid, IndependentVowel, - - IndependentVowel, IndependentVowel, Invalid, IndependentVowel, - IndependentVowel, Consonant, Consonant, Consonant, diff --git a/qt-3.3.6-fontrendering-or_IN-209098.patch b/qt-3.3.6-fontrendering-or_IN-209098.patch deleted file mode 100644 index 6a87988..0000000 --- a/qt-3.3.6-fontrendering-or_IN-209098.patch +++ /dev/null @@ -1,64 +0,0 @@ ---- qt-x11-free-3.3.6/src/kernel/qscriptengine_x11.cpp.bak 2006-10-13 13:21:37.000000000 +0800 -+++ qt-x11-free-3.3.6/src/kernel/qscriptengine_x11.cpp 2006-10-13 13:42:11.000000000 +0800 -@@ -280,7 +280,7 @@ - Consonant, Consonant, Consonant, Consonant, - - Consonant, Invalid, Consonant, Consonant, -- Invalid, Invalid, Consonant, Consonant, -+ Invalid, Consonant, Consonant, Consonant, - Consonant, Consonant, Unknown, Unknown, - Nukta, Other, Matra, Matra, - -@@ -299,7 +299,7 @@ - Other, Other, Other, Other, - Other, Other, Other, Other, - -- Other, Other, Other, Other, -+ Other, Consonant, Other, Other, - Other, Other, Other, Other, - Other, Other, Other, Other, - Other, Other, Other, Other, -@@ -695,18 +695,18 @@ - None, None, None, None, - - None, None, None, None, -- None, None, None, None, -- None, None, None, None, -- None, None, None, None, -+ None, Below, Below, Below, -+ Below, Below, Below, Below, -+ Below, Below, None, Below, - -- None, None, None, None, -- Below, None, None, None, -- Below, None, None, None, -+ Below, Below, Below, Below, -+ Below, Below, Below, Below, -+ Below, None, Below, Below, - Below, Below, Below, Post, - - Below, None, Below, Below, -- None, None, None, None, -- None, None, None, None, -+ None, Below, Below, Below, -+ Below, Below, None, None, - None, None, Post, Above, - - Post, Below, Below, Below, -@@ -717,14 +717,14 @@ - None, None, None, None, - None, None, Above, Post, - None, None, None, None, -- None, None, None, None, -+ None, None, None, Post, - - None, None, None, None, - None, None, None, None, - None, None, None, None, - None, None, None, None, - -- None, None, None, None, -+ None, Below, None, None, - None, None, None, None, - None, None, None, None, - None, None, None, None, diff --git a/qt-3.3.6-fontrendering-punjabi-209970.patch b/qt-3.3.6-fontrendering-punjabi-209970.patch deleted file mode 100644 index 4c8e562..0000000 --- a/qt-3.3.6-fontrendering-punjabi-209970.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- qt-x11-free-3.3.6/src/kernel/qscriptengine_x11.cpp.bak 2006-10-18 17:55:23.000000000 +0800 -+++ qt-x11-free-3.3.6/src/kernel/qscriptengine_x11.cpp 2006-10-19 11:22:13.226804056 +0800 -@@ -217,7 +217,7 @@ - Other, Other, Other, Other, - Other, Other, Other, Other, - -- StressMark, StressMark, Other, Other, -+ StressMark, StressMark, Consonant, Consonant, - Other, Other, Other, Other, - Other, Other, Other, Other, - Other, Other, Other, Other, diff --git a/qt-font-default-subst.diff b/qt-font-default-subst.diff deleted file mode 100644 index 3e286f7..0000000 --- a/qt-font-default-subst.diff +++ /dev/null @@ -1,77 +0,0 @@ ---- src/kernel/qfontdatabase_x11.cpp -+++ src/kernel/qfontdatabase_x11.cpp -@@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s - if (script == QFont::Latin) - // add Euro character - FcCharSetAddChar(cs, 0x20ac); -- if (script == QFont::Han_SimplifiedChinese) -- FcCharSetAddChar(cs, 0x3400); -- if (script == QFont::Han_TraditionalChinese){ -- FcCharSetAddChar(cs, 0x3435); -- FcCharSetAddChar(cs, 0xE000); -- FcCharSetAddChar(cs, 0xF6B1); -- } -- if (script == QFont::MiscellaneousSymbols) -- FcCharSetAddChar(cs, 0x2714); - FcPatternAddCharSet(pattern, FC_CHARSET, cs); - FcCharSetDestroy(cs); - } -@@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c - FcPatternPrint(pattern); - #endif - -+ // XftFontMatch calls the right ConfigSubstitute variants, but as we use -+ // FcFontMatch/Sort here we have to do it manually. - FcConfigSubstitute(0, pattern, FcMatchPattern); -+ XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern); -+ - // qDebug("1: pattern contains:"); - // FcPatternPrint(pattern); - -@@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c - value.u.s = (const FcChar8 *)cs.data(); - FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue); - } --#ifdef FONT_MATCH_DEBUG -- printf("final pattern contains:\n"); -- FcPatternPrint(pattern); --#endif - } - - if (script != QFont::Unicode) { -@@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c - if (script == QFont::Latin) - // add Euro character - FcCharSetAddChar(cs, 0x20ac); -- if (script == QFont::Han_SimplifiedChinese) -- FcCharSetAddChar(cs, 0x3400); -- if (script == QFont::Han_TraditionalChinese) { -- FcCharSetAddChar(cs, 0x3435); -- FcCharSetAddChar(cs, 0xE000); -- FcCharSetAddChar(cs, 0xF6B1); -- } -- if (script == QFont::MiscellaneousSymbols) -- FcCharSetAddChar(cs, 0x2714); - FcPatternAddCharSet(pattern, FC_CHARSET, cs); - FcCharSetDestroy(cs); - } - -+#ifdef FONT_MATCH_DEBUG -+ printf("final pattern contains:\n"); -+ FcPatternPrint(pattern); -+#endif -+ - QFontEngine *fe = 0; - - for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) { ---- src/kernel/qfontdatabase.cpp -+++ src/kernel/qfontdatabase.cpp -@@ -554,7 +554,7 @@ static const unsigned short sample_chars - // GeometricSymbols, - { 0x2500, 0x0 }, - // MiscellaneousSymbols, -- { 0x2640, 0x0 }, -+ { 0x2640, 0x2714, 0x0 }, - // EnclosedAndSquare, - { 0x2460, 0x0 }, - // Braille, diff --git a/qt-x11-free-3.3.8-bz#243722-mysql.patch b/qt-x11-free-3.3.8-bz#243722-mysql.patch deleted file mode 100644 index 2fe7eab..0000000 --- a/qt-x11-free-3.3.8-bz#243722-mysql.patch +++ /dev/null @@ -1,70 +0,0 @@ -diff -Nur qt-x11-free-3.3.8/src/sql/drivers/mysql/qsql_mysql.cpp qt-x11-free-3.3.8-me/src/sql/drivers/mysql/qsql_mysql.cpp ---- qt-x11-free-3.3.8/src/sql/drivers/mysql/qsql_mysql.cpp 2007-01-11 14:38:34.000000000 +0100 -+++ qt-x11-free-3.3.8-snapshot-me/src/sql/drivers/mysql/qsql_mysql.cpp 2007-05-22 17:15:26.000000000 +0200 -@@ -37,7 +37,6 @@ - #include "qsql_mysql.h" - #include - --#include - #include - #include - #include -@@ -52,6 +51,9 @@ - - QPtrDict *qSqlOpenExtDict(); - -+static int qMySqlConnectionCount = 0; -+static bool qMySqlInitHandledByUser = FALSE; -+ - class QMYSQLOpenExtension : public QSqlOpenExtension - { - public: -@@ -354,9 +356,8 @@ - { - #ifndef Q_NO_MYSQL_EMBEDDED - # if MYSQL_VERSION_ID >= 40000 -- static bool init = FALSE; -- if ( init ) -- return; -+ if ( qMySqlInitHandledByUser || qMySqlConnectionCount > 1 ) -+ return; - - // this should only be called once - // has no effect on client/server library -@@ -366,8 +367,6 @@ - qWarning( "QMYSQLDriver::qServerInit: unable to start server." ); - # endif - } -- qAddPostRoutine(qServerEnd); -- init = TRUE; - - # endif // MYSQL_VERSION_ID - #endif // Q_NO_MYSQL_EMBEDDED -@@ -392,8 +391,10 @@ - d->mysql = (MYSQL *) con; - setOpen( TRUE ); - setOpenError( FALSE ); -+ if (qMySqlConnectionCount == 1) -+ qMySqlInitHandledByUser = TRUE; - } else { -- qServerInit(); -+ qServerInit(); - } - } - -@@ -402,10 +403,15 @@ - qSqlOpenExtDict()->insert( this, new QMYSQLOpenExtension(this) ); - d = new QMYSQLDriverPrivate(); - d->mysql = 0; -+ qMySqlConnectionCount++; - } - - QMYSQLDriver::~QMYSQLDriver() - { -+ qMySqlConnectionCount--; -+ if (qMySqlConnectionCount == 0 && !qMySqlInitHandledByUser) -+ qServerEnd(); -+ - delete d; - if ( !qSqlOpenExtDict()->isEmpty() ) { - QSqlOpenExtension *ext = qSqlOpenExtDict()->take( this ); diff --git a/qt.spec b/qt.spec index e45a690..101626f 100644 --- a/qt.spec +++ b/qt.spec @@ -29,16 +29,13 @@ Patch19: qt-3.3.3-gtkstyle.patch Patch20: qt-x11-free-3.3.5-gcc4-buildkey.patch Patch24: qt-x11-free-3.3.5-uic.patch Patch25: qt-x11-free-3.3.8b-uic-multilib.patch -Patch26: qt-3.3.6-fontrendering-punjabi-209970.patch Patch27: qt-3.3.6-fontrendering-ml_IN-209097.patch -Patch28: qt-3.3.6-fontrendering-or_IN-209098.patch Patch29: qt-3.3.8-fontrendering-as_IN-209972.patch Patch31: qt-3.3.6-fontrendering-te_IN-211259.patch Patch32: qt-3.3.6-fontrendering-214371.patch Patch33: qt-3.3.8-fontrendering-#214570.patch Patch34: qt-3.3.6-fontrendering-ml_IN-209974.patch Patch35: qt-3.3.6-fontrendering-ml_IN-217657.patch -Patch36: qt-3.3.6-fontrendering-gu-228451.patch Patch37: qt-3.3.6-fontrendering-gu-228452.patch # immodule patches @@ -54,18 +51,13 @@ Patch100: 0038-dragobject-dont-prefer-unknown.patch Patch101: 0047-fix-kmenu-width.diff Patch102: 0048-qclipboard_hack_80072.patch Patch103: 0056-khotkeys_input_84434.patch -Patch104: qt-font-default-subst.diff patch105: 0073-xinerama-aware-qpopup.patch -Patch106: 0076-fix-qprocess.diff +Patch107: 0079-compositing-types.patch +Patch108: 0080-net-wm-sync-request-2.patch +Patch110: 0084-compositing-properties.patch # upstream patches Patch200: qt-x11-free-3.3.4-fullscreen.patch -Patch201: qt-x11-free-3.3.8-bz#243722-mysql.patch - -# security patces -Patch300: qt3-CVE-2007-3388.patch -Patch301: utf8-bug-qt3-CVE-2007-0242.diff -Patch302: qt-3.3.6-bz#292941-CVE-2007-4137.patch %define qt_dirname qt-3.3 %define qtdir %{_libdir}/%{qt_dirname} @@ -271,18 +263,16 @@ for the Qt toolkit. %patch20 -p1 -b .gcc4-buildkey %patch24 -p1 -b .uic %patch25 -p1 -b .uic-multilib -%patch26 -p1 -b .fontrendering-punjabi-bz#209970 %patch27 -p1 -b .fontrendering-ml_IN-bz#209097 -%patch28 -p1 -b .fontrendering-or_IN-bz#209098 %patch29 -p1 -b .fontrendering-as_IN-bz#209972 %patch31 -p1 -b .fontrendering-te_IN-bz#211259 %patch32 -p1 -b .fontrendering-bz#214371 %patch33 -p1 -b .fontrendering-#214570 %patch34 -p1 -b .fontrendering-#209974 %patch35 -p1 -b .fontrendering-ml_IN-217657 -%patch36 -p1 -b .fontrendering-gu-228451 %patch37 -p1 -b .fontrendering-gu-228452 +# immodule patches %if %{immodule} %patch50 -p1 -b .pre %patch51 -p1 @@ -292,21 +282,18 @@ for the Qt toolkit. %patch55 -p1 -b .resetinputcontext %endif +# qt-copy patches %patch100 -p0 -b .0038-dragobject-dont-prefer-unknown %patch101 -p0 -b .0047-fix-kmenu-width %patch102 -p0 -b .0048-qclipboard_hack_80072 %patch103 -p0 -b .0056-khotkeys_input_84434 -%patch104 -p0 -b .qt-font-default-subst %patch105 -p0 -b .0073-xinerama-aware-qpopup -%patch106 -p0 -b .0076-fix-qprocess +%patch107 -p0 -b .0079-compositing-types +%patch108 -p0 -b .0080-net-wm-sync-request +%patch110 -p0 -b .0084-compositing-properties +# upstream patches %patch200 -p1 -b .fullscreen -%patch201 -p1 -b .bz#243722-mysql - -# security patches -%patch300 -p1 -b .CVE-2007-3388 -%patch301 -p0 -b .CVE-2007-0242 -%patch302 -p0 -b .CVE-2007-4137 # convert to UTF-8 iconv -f iso-8859-1 -t utf-8 < doc/man/man3/qdial.3qt > doc/man/man3/qdial.3qt_ @@ -580,6 +567,17 @@ rm -rf %{buildroot} %changelog * Thu Jan 24 2008 Than Ngo 3.3.8b-1 - License: GPLv2 or GPLv3 +- merged in 3.3.8b -> drop following patches: + * qt-3.3.6-fontrendering-punjabi-209970.patch + * qt-3.3.6-fontrendering-or_IN-209098.patch + * qt-3.3.6-fontrendering-gu-228451.patch + * qt-font-default-subst.diff + * 0076-fix-qprocess.diff + * 0082-fix-qdatetime-fromstring.diff + * qt-x11-free-3.3.8-bz#243722-mysql.patch + * qt3-CVE-2007-3388.patch + * utf8-bug-qt3-CVE-2007-0242.diff + * qt-3.3.6-bz#292941-CVE-2007-4137.patch * Mon Sep 17 2007 Than Ngo - 1:3.3.8-7 - bz292941, CVE-2007-4137 diff --git a/qt3-CVE-2007-3388.patch b/qt3-CVE-2007-3388.patch deleted file mode 100644 index 768c594..0000000 --- a/qt3-CVE-2007-3388.patch +++ /dev/null @@ -1,189 +0,0 @@ ---- qt3/src/widgets/qtextedit.cpp Mon Jul 16 10:44:40 CEST 2007 -+++ qt3/src/widgets/qtextedit.cpp Mon Jul 16 10:44:40 CEST 2007 - -@@ -6349,7 +6349,7 @@ - cur = tag->prev; - if ( !cur ) { - #ifdef QT_CHECK_RANGE -- qWarning( "QTextEdit::optimParseTags: no left-tag for '<" + tag->tag + ">' in line %d.", tag->line + 1 ); -+ qWarning( "QTextEdit::optimParseTags: no left-tag for '<%s>' in line %d.", tag->tag.ascii(), tag->line + 1 ); - #endif - return; // something is wrong - give up - } -@@ -6372,7 +6372,7 @@ - break; - } else if ( !cur->leftTag ) { - #ifdef QT_CHECK_RANGE -- qWarning( "QTextEdit::optimParseTags: mismatching %s-tag for '<" + cur->tag + ">' in line %d.", cur->tag[0] == '/' ? "left" : "right", cur->line + 1 ); -+ qWarning( "QTextEdit::optimParseTags: mismatching %s-tag for '<%s>' in line %d.", cur->tag[0] == '/' ? "left" : "right", cur->tag.ascii(), cur->line + 1 ); - #endif - return; // something is amiss - give up - } ---- qt3/src/sql/qdatatable.cpp Mon Jul 16 10:45:03 CEST 2007 -+++ qt3/src/sql/qdatatable.cpp Mon Jul 16 10:45:03 CEST 2007 - -@@ -1043,8 +1043,8 @@ - return FALSE; - if ( !sqlCursor()->canInsert() ) { - #ifdef QT_CHECK_RANGE -- qWarning("QDataTable::insertCurrent: insert not allowed for " + -- sqlCursor()->name() ); -+ qWarning("QDataTable::insertCurrent: insert not allowed for %s", -+ sqlCursor()->name().latin1() ); - #endif - endInsert(); - return FALSE; -@@ -1117,16 +1117,16 @@ - return FALSE; - if ( sqlCursor()->primaryIndex().count() == 0 ) { - #ifdef QT_CHECK_RANGE -- qWarning("QDataTable::updateCurrent: no primary index for " + -- sqlCursor()->name() ); -+ qWarning("QDataTable::updateCurrent: no primary index for %s", -+ sqlCursor()->name().latin1() ); - #endif - endUpdate(); - return FALSE; - } - if ( !sqlCursor()->canUpdate() ) { - #ifdef QT_CHECK_RANGE -- qWarning("QDataTable::updateCurrent: updates not allowed for " + -- sqlCursor()->name() ); -+ qWarning("QDataTable::updateCurrent: updates not allowed for %s", -+ sqlCursor()->name().latin1() ); - #endif - endUpdate(); - return FALSE; -@@ -1191,8 +1191,8 @@ - return FALSE; - if ( sqlCursor()->primaryIndex().count() == 0 ) { - #ifdef QT_CHECK_RANGE -- qWarning("QDataTable::deleteCurrent: no primary index " + -- sqlCursor()->name() ); -+ qWarning("QDataTable::deleteCurrent: no primary index %s", -+ sqlCursor()->name().latin1() ); - #endif - return FALSE; - } - ---- qt3/src/sql/qsqldatabase.cpp Mon Jul 16 10:45:03 CEST 2007 -+++ qt3/src/sql/qsqldatabase.cpp Mon Jul 16 10:45:03 CEST 2007 - -@@ -234,7 +234,8 @@ - db->open(); - #ifdef QT_CHECK_RANGE - if ( !db->isOpen() ) -- qWarning("QSqlDatabaseManager::database: unable to open database: " + db->lastError().databaseText() + ": " + db->lastError().driverText() ); -+ qWarning("QSqlDatabaseManager::database: unable to open database: %s: %s", -+ db->lastError().databaseText().latin1(), db->lastError().driverText().latin1() ); - #endif - } - return db; -@@ -686,7 +687,7 @@ - if ( !d->driver ) { - #ifdef QT_CHECK_RANGE - qWarning( "QSqlDatabase: %s driver not loaded", type.latin1() ); -- qWarning( "QSqlDatabase: available drivers: " + drivers().join(" ") ); -+ qWarning( "QSqlDatabase: available drivers: %s", drivers().join(" ").latin1() ); - #endif - d->driver = new QNullDriver(); - d->driver->setLastError( QSqlError( "Driver not loaded", "Driver not loaded" ) ); - ---- qt3/src/sql/qsqlindex.cpp Mon Jul 16 10:45:03 CEST 2007 -+++ qt3/src/sql/qsqlindex.cpp Mon Jul 16 10:45:03 CEST 2007 - -@@ -273,7 +273,7 @@ - if ( field ) - newSort.append( *field, desc ); - else -- qWarning( "QSqlIndex::fromStringList: unknown field: '" + f + "'" ); -+ qWarning( "QSqlIndex::fromStringList: unknown field: '%s'", f.latin1()); - } - return newSort; - } - ---- qt3/src/sql/qsqlrecord.cpp Mon Jul 16 10:45:03 CEST 2007 -+++ qt3/src/sql/qsqlrecord.cpp Mon Jul 16 10:45:03 CEST 2007 - -@@ -298,7 +298,7 @@ - return i; - } - #ifdef QT_CHECK_RANGE -- qWarning( "QSqlRecord::position: unable to find field " + name ); -+ qWarning( "QSqlRecord::position: unable to find field %s", name.latin1() ); - #endif - return -1; - } -@@ -313,7 +313,7 @@ - checkDetach(); - if ( !sh->d->contains( i ) ) { - #ifdef QT_CHECK_RANGE -- qWarning( "QSqlRecord::field: index out of range: " + QString::number( i ) ); -+ qWarning( "QSqlRecord::field: index out of range: %d", i ); - #endif - return 0; - } -@@ -344,7 +344,7 @@ - { - if ( !sh->d->contains( i ) ) { - #ifdef QT_CHECK_RANGE -- qWarning( "QSqlRecord::field: index out of range: " + QString::number( i ) ); -+ qWarning( "QSqlRecord::field: index out of range: %d", i ); - #endif // QT_CHECK_RANGE - return 0; - } - ---- qt3/src/tools/qglobal.cpp Mon Jul 16 10:45:03 CEST 2007 -+++ qt3/src/tools/qglobal.cpp Mon Jul 16 10:45:03 CEST 2007 - -@@ -680,7 +680,7 @@ - if ( code != -1 ) - qWarning( "%s\n\tError code %d - %s", msg, code, strerror( code ) ); - else -- qWarning( msg ); -+ qWarning( "%s", msg ); - #endif - #else - Q_UNUSED( msg ); - ---- qt3/src/xml/qsvgdevice.cpp Mon Jul 16 10:45:03 CEST 2007 -+++ qt3/src/xml/qsvgdevice.cpp Mon Jul 16 10:45:03 CEST 2007 - -@@ -978,7 +978,7 @@ - // ### catch references to embedded .svg files - QPixmap pix; - if ( !pix.load( href ) ) { -- qWarning( "QSvgDevice::play: Couldn't load image "+href ); -+ qWarning( "QSvgDevice::play: Couldn't load image %s", href.latin1() ); - break; - } - pt->drawPixmap( QRect( x1, y1, w, h ), pix ); -@@ -1024,8 +1024,8 @@ - break; - } - case InvalidElement: -- qWarning( "QSvgDevice::play: unknown element type " + -- node.nodeName() ); -+ qWarning( "QSvgDevice::play: unknown element type %s", -+ node.nodeName().latin1() ); - break; - }; - -@@ -1111,7 +1111,7 @@ - { - QRegExp reg( QString::fromLatin1("([+-]?\\d*\\.*\\d*[Ee]?[+-]?\\d*)(em|ex|px|%|pt|pc|cm|mm|in|)$") ); - if ( reg.search( str ) == -1 ) { -- qWarning( "QSvgDevice::parseLen: couldn't parse " + str ); -+ qWarning( "QSvgDevice::parseLen: couldn't parse %s ", str.latin1() ); - if ( ok ) - *ok = FALSE; - return 0.0; -@@ -1140,7 +1140,7 @@ - else if ( u == "pc" ) - dbl *= m.logicalDpiX() / 6.0; - else -- qWarning( "QSvgDevice::parseLen: Unknown unit " + u ); -+ qWarning( "QSvgDevice::parseLen: Unknown unit %s", u.latin1() ); - } - if ( ok ) - *ok = TRUE; diff --git a/utf8-bug-qt3-CVE-2007-0242.diff b/utf8-bug-qt3-CVE-2007-0242.diff deleted file mode 100644 index 43e84a9..0000000 --- a/utf8-bug-qt3-CVE-2007-0242.diff +++ /dev/null @@ -1,101 +0,0 @@ ---- src/codecs/qutfcodec.cpp -+++ src/codecs/qutfcodec.cpp -@@ -154,6 +154,7 @@ - - class QUtf8Decoder : public QTextDecoder { - uint uc; -+ uint min_uc; - int need; - bool headerDone; - public: -@@ -167,8 +168,9 @@ - result.setLength( len ); // worst case - QChar *qch = (QChar *)result.unicode(); - uchar ch; -+ int error = -1; - for (int i=0; i= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) { -+ *qch++ = QChar::replacement; - } else { - if (headerDone || QChar(uc) != QChar::byteOrderMark) - *qch++ = uc; -@@ -190,6 +194,7 @@ - } - } else { - // error -+ i = error; - *qch++ = QChar::replacement; - need = 0; - } -@@ -200,12 +205,21 @@ - } else if ((ch & 0xe0) == 0xc0) { - uc = ch & 0x1f; - need = 1; -+ error = i; -+ min_uc = 0x80; - } else if ((ch & 0xf0) == 0xe0) { - uc = ch & 0x0f; - need = 2; -+ error = i; -+ min_uc = 0x800; - } else if ((ch&0xf8) == 0xf0) { - uc = ch & 0x07; - need = 3; -+ error = i; -+ min_uc = 0x10000; -+ } else { -+ // error -+ *qch++ = QChar::replacement; - } - } - } ---- src/tools/qstring.cpp -+++ src/tools/qstring.cpp -@@ -5805,6 +5805,7 @@ - result.setLength( len ); // worst case - QChar *qch = (QChar *)result.unicode(); - uint uc = 0; -+ uint min_uc = 0; - int need = 0; - int error = -1; - uchar ch; -@@ -5822,6 +5823,12 @@ - unsigned short low = uc%0x400 + 0xdc00; - *qch++ = QChar(high); - *qch++ = QChar(low); -+ } else if (uc < min_uc || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) { -+ // overlong seqence, UTF16 surrogate or BOM -+ i = error; -+ qch = addOne(qch, result); -+ *qch++ = QChar(0xdbff); -+ *qch++ = QChar(0xde00+((uchar)utf8[i])); - } else { - *qch++ = uc; - } -@@ -5844,14 +5851,17 @@ - uc = ch & 0x1f; - need = 1; - error = i; -+ min_uc = 0x80; - } else if ((ch & 0xf0) == 0xe0) { - uc = ch & 0x0f; - need = 2; - error = i; -+ min_uc = 0x800; - } else if ((ch&0xf8) == 0xf0) { - uc = ch & 0x07; - need = 3; - error = i; -+ min_uc = 0x10000; - } else { - // Error - qch = addOne(qch, result);