Compare commits
17 Commits
Author | SHA1 | Date |
---|---|---|
Fedora Release Engineering | 6516ac3599 | |
Than Ngo | fe916f1645 | |
Than Ngo | 8070e3b34c | |
Than Ngo | 3566bd7d68 | |
Than Ngo | 27b5108ec4 | |
Than Ngo | c1d52b555e | |
Than Ngo | e0d4778772 | |
Than Ngo | 2463a6c56c | |
Than Ngo | cf57791839 | |
Than Ngo | 132e4f4ae7 | |
Than Ngo | 4fb2278bfb | |
Than Ngo | 30b1674691 | |
Than Ngo | adf970ce5b | |
Than Ngo | a7c2b54a92 | |
Than Ngo | 04efdca1d3 | |
Than Ngo | dc97acc2b0 | |
Bill Nottingham | c448b4662b |
|
@ -7,3 +7,4 @@ qt-x11-immodule-unified-qt3.3.5-20051012.diff.bz2
|
|||
qt-x11-immodule-unified-qt3.3.5-20051018.diff.bz2
|
||||
qt-x11-immodule-unified-qt3.3.7-20061229.diff.bz2
|
||||
qt-x11-free-3.3.8.tar.bz2
|
||||
qt-x11-free-3.3.8b.tar.gz
|
|
@ -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 );
|
||||
}
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
qt-bugs@ issue : N154454
|
||||
bugs.kde.org number : none
|
||||
applied: no
|
||||
author: Dirk Mueller <mueller@kde.org>
|
||||
|
||||
This patch makes the utf8 decoders in Qt reject overlong
|
||||
sequences, like required.
|
||||
|
||||
--- 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<len; i++) {
|
||||
- ch = *chars++;
|
||||
+ ch = chars[i];
|
||||
if (need) {
|
||||
if ( (ch&0xc0) == 0x80 ) {
|
||||
uc = (uc << 6) | (ch & 0x3f);
|
||||
@@ -182,6 +184,8 @@
|
||||
*qch++ = QChar(high);
|
||||
*qch++ = QChar(low);
|
||||
headerDone = TRUE;
|
||||
+ } else if ((uc < min_uc) || (uc >= 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);
|
|
@ -0,0 +1,424 @@
|
|||
qt-bugs@ issue : none
|
||||
bugs.kde.org number : none
|
||||
applied: no
|
||||
author: Lubos Lunak <l.lunak@kde.org>
|
||||
|
||||
This patch adds support for window types used for compositing (popup menu, dropdown menu,
|
||||
tooltip, combobox, dnd).
|
||||
|
||||
--- src/kernel/qdnd_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/kernel/qdnd_x11.cpp 2007-05-31 10:30:58.000000000 +0200
|
||||
@@ -261,6 +261,7 @@ public:
|
||||
QWidget(QApplication::desktop()->screen( screen ),
|
||||
0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 )
|
||||
{
|
||||
+ x11SetWindowType( X11WindowTypeDND );
|
||||
}
|
||||
|
||||
void setPixmap(QPixmap pm, QPoint hot)
|
||||
@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint &
|
||||
// recreate the pixmap on the new screen...
|
||||
delete qt_xdnd_deco;
|
||||
qt_xdnd_deco = new QShapedPixmapWidget( screen );
|
||||
+ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
|
||||
if (!QWidget::mouseGrabber()) {
|
||||
updatePixmap();
|
||||
qt_xdnd_deco->grabMouse();
|
||||
@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o
|
||||
|
||||
dragSource = (QWidget *)(object->parent());
|
||||
|
||||
+ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
|
||||
qApp->installEventFilter( this );
|
||||
qt_xdnd_source_current_time = qt_x_time;
|
||||
XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection,
|
||||
--- src/kernel/qapplication_x11.cpp.sav 2007-05-29 16:24:58.000000000 +0200
|
||||
+++ src/kernel/qapplication_x11.cpp 2007-05-31 10:30:58.000000000 +0200
|
||||
@@ -268,6 +268,11 @@ Atom qt_net_wm_window_type_menu = 0;
|
||||
Atom qt_net_wm_window_type_utility = 0;
|
||||
Atom qt_net_wm_window_type_splash = 0;
|
||||
Atom qt_net_wm_window_type_override = 0; // KDE extension
|
||||
+Atom qt_net_wm_window_type_dropdown_menu = 0;
|
||||
+Atom qt_net_wm_window_type_popup_menu = 0;
|
||||
+Atom qt_net_wm_window_type_tooltip = 0;
|
||||
+Atom qt_net_wm_window_type_combo = 0;
|
||||
+Atom qt_net_wm_window_type_dnd = 0;
|
||||
Atom qt_net_wm_frame_strut = 0; // KDE extension
|
||||
Atom qt_net_wm_state_stays_on_top = 0; // KDE extension
|
||||
Atom qt_net_wm_pid = 0;
|
||||
@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha
|
||||
qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility );
|
||||
qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash );
|
||||
qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override );
|
||||
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu );
|
||||
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu );
|
||||
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip );
|
||||
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo );
|
||||
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd );
|
||||
qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut );
|
||||
qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP",
|
||||
&qt_net_wm_state_stays_on_top );
|
||||
--- src/kernel/qwidget_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/kernel/qwidget_x11.cpp 2007-05-31 10:30:58.000000000 +0200
|
||||
@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu;
|
||||
extern Atom qt_net_wm_window_type_utility;
|
||||
extern Atom qt_net_wm_window_type_splash;
|
||||
extern Atom qt_net_wm_window_type_override;
|
||||
+extern Atom qt_net_wm_window_type_dropdown_menu;
|
||||
+extern Atom qt_net_wm_window_type_popup_menu;
|
||||
+extern Atom qt_net_wm_window_type_combo;
|
||||
+extern Atom qt_net_wm_window_type_dnd;
|
||||
+extern Atom qt_net_wm_window_type_tooltip;
|
||||
extern Atom qt_net_wm_pid;
|
||||
extern Atom qt_net_wm_user_time;
|
||||
extern Atom qt_enlightenment_desktop;
|
||||
@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i
|
||||
x11Colormap() );
|
||||
#endif // QT_NO_XFTFREETYPE
|
||||
|
||||
- // NET window types
|
||||
- long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||
- int curr_wintype = 0;
|
||||
-
|
||||
// NET window states
|
||||
long net_winstates[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
int curr_winstate = 0;
|
||||
@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i
|
||||
if ( testWFlags(WStyle_Splash) ) {
|
||||
if (qt_net_supports(qt_net_wm_window_type_splash)) {
|
||||
clearWFlags( WX11BypassWM );
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
|
||||
} else {
|
||||
setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder );
|
||||
}
|
||||
@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i
|
||||
mwmhints.decorations = 0L;
|
||||
mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS
|
||||
|
||||
- if ( testWFlags( WStyle_NoBorder ) ) {
|
||||
- // override netwm type - quick and easy for KDE noborder
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_override;
|
||||
- } else {
|
||||
- if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
|
||||
- mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
|
||||
- mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH
|
||||
- }
|
||||
+ if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
|
||||
+ mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
|
||||
+ mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH
|
||||
+ }
|
||||
|
||||
- if ( testWFlags( WStyle_Title ) )
|
||||
- mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
|
||||
+ if ( testWFlags( WStyle_Title ) )
|
||||
+ mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
|
||||
|
||||
- if ( testWFlags( WStyle_SysMenu ) )
|
||||
- mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
|
||||
+ if ( testWFlags( WStyle_SysMenu ) )
|
||||
+ mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
|
||||
|
||||
- if ( testWFlags( WStyle_Minimize ) )
|
||||
- mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
|
||||
+ if ( testWFlags( WStyle_Minimize ) )
|
||||
+ mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
|
||||
|
||||
- if ( testWFlags( WStyle_Maximize ) )
|
||||
- mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
|
||||
- }
|
||||
+ if ( testWFlags( WStyle_Maximize ) )
|
||||
+ mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
|
||||
|
||||
if (testWFlags(WStyle_Tool)) {
|
||||
wsa.save_under = True;
|
||||
@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i
|
||||
}
|
||||
}
|
||||
|
||||
- // ### need a better way to do this
|
||||
- if (inherits("QPopupMenu")) {
|
||||
- // menu netwm type
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
|
||||
- } else if (inherits("QToolBar")) {
|
||||
- // toolbar netwm type
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
|
||||
- } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
|
||||
- // utility netwm type
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
|
||||
- }
|
||||
-
|
||||
- if (dialog) // dialog netwm type
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
|
||||
- // normal netwm type - default
|
||||
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
|
||||
-
|
||||
// stays on top
|
||||
if (testWFlags(WStyle_StaysOnTop)) {
|
||||
net_winstates[curr_winstate++] = qt_net_wm_state_above;
|
||||
@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i
|
||||
wsa.save_under = True;
|
||||
XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder,
|
||||
&wsa );
|
||||
+ x11SetWindowType();
|
||||
} else if ( topLevel && !desktop ) { // top-level widget
|
||||
QWidget *p = parentWidget(); // real parent
|
||||
if (p)
|
||||
@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i
|
||||
else
|
||||
XDeleteProperty(dpy, id, qt_xa_motif_wm_hints);
|
||||
|
||||
- // set _NET_WM_WINDOW_TYPE
|
||||
- if (curr_wintype > 0)
|
||||
- XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
|
||||
- (unsigned char *) net_wintypes, curr_wintype);
|
||||
- else
|
||||
- XDeleteProperty(dpy, id, qt_net_wm_window_type);
|
||||
+ x11SetWindowType();
|
||||
|
||||
// set _NET_WM_WINDOW_STATE
|
||||
if (curr_winstate > 0)
|
||||
@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare
|
||||
setMouseTracking(mouse_tracking);
|
||||
}
|
||||
|
||||
+// Sets the EWMH (netwm) window type. Needed as a separate function
|
||||
+// because create() may be too soon in some cases.
|
||||
+void QWidget::x11SetWindowType( X11WindowType type )
|
||||
+{
|
||||
+ // NET window types
|
||||
+ long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||
+ int curr_wintype = 0;
|
||||
+ if( testWFlags(WType_Desktop))
|
||||
+ return;
|
||||
+ if( type == X11WindowTypeSelect ) {
|
||||
+ if ( testWFlags(WStyle_Splash)) {
|
||||
+ if (qt_net_supports(qt_net_wm_window_type_splash)) {
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
|
||||
+ }
|
||||
+ } else if (inherits("QToolBar")) {
|
||||
+ // toolbar netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
|
||||
+ } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
|
||||
+ // utility netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
|
||||
+ } else if (testWFlags(WType_Dialog)) {
|
||||
+ // dialog netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
|
||||
+ }
|
||||
+ } else if( type == X11WindowTypeCombo ) {
|
||||
+ // combo netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo;
|
||||
+ } else if( type == X11WindowTypeDND ) {
|
||||
+ // dnd netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd;
|
||||
+ } else if( type == X11WindowTypeDropdown ) {
|
||||
+ // dropdown netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu;
|
||||
+ } else if( type == X11WindowTypePopup ) {
|
||||
+ // popup netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu;
|
||||
+ } else if( type == X11WindowTypeMenu ) {
|
||||
+ // menu netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
|
||||
+ } else if( type == X11WindowTypeTooltip ) {
|
||||
+ // tooltip netwm type
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip;
|
||||
+ }
|
||||
+
|
||||
+ // normal netwm type - default
|
||||
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
|
||||
+ // set _NET_WM_WINDOW_TYPE
|
||||
+ if (curr_wintype > 0)
|
||||
+ XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
|
||||
+ (unsigned char *) net_wintypes, curr_wintype);
|
||||
+ else
|
||||
+ XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type);
|
||||
+}
|
||||
+
|
||||
+void QWidget::x11SetWindowTransient( QWidget* parent )
|
||||
+{
|
||||
+ XSetTransientForHint( x11Display(), winId(), parent->winId());
|
||||
+}
|
||||
|
||||
/*!
|
||||
Translates the widget coordinate \a pos to global screen
|
||||
--- src/kernel/qwidget.h.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/kernel/qwidget.h 2007-05-31 10:30:58.000000000 +0200
|
||||
@@ -464,7 +464,19 @@ public:
|
||||
CGContextRef macCGContext(bool clipped=TRUE) const;
|
||||
#endif
|
||||
#endif
|
||||
-
|
||||
+#if defined(Q_WS_X11)
|
||||
+ enum X11WindowType {
|
||||
+ X11WindowTypeSelect,
|
||||
+ X11WindowTypeCombo,
|
||||
+ X11WindowTypeDND,
|
||||
+ X11WindowTypeTooltip,
|
||||
+ X11WindowTypeMenu, // torn-off
|
||||
+ X11WindowTypeDropdown,
|
||||
+ X11WindowTypePopup
|
||||
+ };
|
||||
+ void x11SetWindowType( X11WindowType type = X11WindowTypeSelect );
|
||||
+ void x11SetWindowTransient( QWidget* parent );
|
||||
+#endif
|
||||
void setWindowOpacity(double level);
|
||||
double windowOpacity() const;
|
||||
|
||||
--- src/dialogs/qdialog.cpp.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/dialogs/qdialog.cpp 2007-05-31 10:30:58.000000000 +0200
|
||||
@@ -668,10 +668,6 @@ bool QDialog::event( QEvent *e )
|
||||
Geometry management.
|
||||
*****************************************************************************/
|
||||
|
||||
-#if defined(Q_WS_X11)
|
||||
-extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); }
|
||||
-#endif // Q_WS_X11
|
||||
-
|
||||
/*!
|
||||
Shows the dialog as a \link #modeless modeless \endlink dialog.
|
||||
Control returns immediately to the calling code.
|
||||
@@ -705,7 +701,7 @@ void QDialog::show()
|
||||
&& qApp->mainWidget() && qApp->mainWidget()->isVisible()
|
||||
&& !qApp->mainWidget()->isMinimized()) {
|
||||
// make sure the transient for hint is set properly for modal dialogs
|
||||
- XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() );
|
||||
+ x11SetWindowTransient( qApp->mainWidget());
|
||||
}
|
||||
#endif // Q_WS_X11
|
||||
|
||||
--- src/widgets/qtooltip.cpp.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/widgets/qtooltip.cpp 2007-05-31 10:30:58.000000000 +0200
|
||||
@@ -72,6 +72,7 @@ public:
|
||||
polish();
|
||||
setText(text);
|
||||
adjustSize();
|
||||
+ x11SetWindowType( X11WindowTypeTooltip );
|
||||
}
|
||||
void setWidth( int w ) { resize( sizeForWidth( w ) ); }
|
||||
};
|
||||
@@ -528,6 +529,10 @@ void QTipManager::showTip()
|
||||
if (!widget)
|
||||
return;
|
||||
|
||||
+#ifdef Q_WS_X11
|
||||
+ label->x11SetWindowTransient( widget->topLevelWidget());
|
||||
+#endif
|
||||
+
|
||||
#ifdef Q_WS_MAC
|
||||
QRect screen = QApplication::desktop()->availableGeometry( scr );
|
||||
#else
|
||||
--- src/widgets/qcombobox.cpp.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/widgets/qcombobox.cpp 2007-05-31 10:49:13.000000000 +0200
|
||||
@@ -389,12 +389,8 @@ public:
|
||||
inline QListBox * listBox() { return lBox; }
|
||||
inline QComboBoxPopup * popup() { return pop; }
|
||||
void updateLinedGeometry();
|
||||
-
|
||||
- void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE;
|
||||
- l->setMouseTracking( TRUE );}
|
||||
-
|
||||
- void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE )
|
||||
- { pop = pm; if(isPopup) usingLBox = FALSE; }
|
||||
+ void setListBox( QListBox *l );
|
||||
+ void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE );
|
||||
|
||||
int current;
|
||||
int maxCount;
|
||||
@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry(
|
||||
ed->setGeometry( r );
|
||||
}
|
||||
|
||||
+void QComboBoxData::setListBox( QListBox *l )
|
||||
+{
|
||||
+ lBox = l;
|
||||
+ usingLBox = TRUE;
|
||||
+ l->setMouseTracking( TRUE );
|
||||
+#ifdef Q_WS_X11
|
||||
+ l->x11SetWindowType( QWidget::X11WindowTypeCombo );
|
||||
+ l->x11SetWindowTransient( combo->topLevelWidget());
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup )
|
||||
+{
|
||||
+ pop = pm;
|
||||
+ if(isPopup)
|
||||
+ usingLBox = FALSE;
|
||||
+#ifdef Q_WS_X11
|
||||
+ if( pm ) {
|
||||
+ pm->x11SetWindowType( QWidget::X11WindowTypeCombo );
|
||||
+ pm->x11SetWindowTransient( combo->topLevelWidget());
|
||||
+ }
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
static inline bool checkInsertIndex( const char *method, const char * name,
|
||||
int count, int *index)
|
||||
{
|
||||
--- src/widgets/qpopupmenu.cpp.sav 2007-05-25 18:56:23.000000000 +0200
|
||||
+++ src/widgets/qpopupmenu.cpp 2007-05-31 11:09:22.000000000 +0200
|
||||
@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent,
|
||||
connectModalRecursionSafety = 0;
|
||||
|
||||
setFocusPolicy( StrongFocus );
|
||||
+#ifdef Q_WS_X11
|
||||
+ x11SetWindowType( X11WindowTypePopup );
|
||||
+#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po
|
||||
emit aboutToShow();
|
||||
updateSize(TRUE);
|
||||
}
|
||||
+#ifdef Q_WS_X11
|
||||
+#ifndef QT_NO_MENUBAR
|
||||
+ QMenuData *top = this; // find top level
|
||||
+ while ( top->parentMenu )
|
||||
+ top = top->parentMenu;
|
||||
+ if( top->isMenuBar )
|
||||
+ x11SetWindowType( X11WindowTypeDropdown );
|
||||
+ if( parentMenu && parentMenu->isMenuBar )
|
||||
+ x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget());
|
||||
+#endif
|
||||
+ if( parentMenu && !parentMenu->isMenuBar )
|
||||
+ x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu ));
|
||||
+ if( !parentMenu ) {
|
||||
+ // hackish ... try to find the main window related to this popup
|
||||
+ QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL;
|
||||
+ if( parent == NULL )
|
||||
+ parent = QApplication::widgetAt( pos );
|
||||
+ if( parent == NULL )
|
||||
+ parent = qApp->activeWindow();
|
||||
+ if( parent != NULL )
|
||||
+ x11SetWindowTransient( parent );
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
int sw = screen.width(); // screen width
|
||||
int sh = screen.height(); // screen height
|
||||
@@ -1390,6 +1416,13 @@ void QPopupMenu::hide()
|
||||
#if defined(QT_ACCESSIBILITY_SUPPORT)
|
||||
QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd );
|
||||
#endif
|
||||
+#ifndef QT_NO_MENUBAR
|
||||
+ QMenuData *top = this; // find top level
|
||||
+ while ( top->parentMenu )
|
||||
+ top = top->parentMenu;
|
||||
+ if( top->isMenuBar )
|
||||
+ x11SetWindowType( X11WindowTypePopup ); // reset
|
||||
+#endif
|
||||
parentMenu = 0;
|
||||
hidePopups();
|
||||
QWidget::hide();
|
||||
@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff()
|
||||
geometry().topLeft(), FALSE );
|
||||
p->mitems->setAutoDelete( FALSE );
|
||||
p->tornOff = TRUE;
|
||||
+#ifdef Q_WS_X11
|
||||
+ p->x11SetWindowType( X11WindowTypeMenu );
|
||||
+#endif
|
||||
for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) {
|
||||
if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() )
|
||||
p->mitems->append( it.current() );
|
|
@ -0,0 +1,311 @@
|
|||
qt-bugs@ issue : none
|
||||
bugs.kde.org number : none
|
||||
applied: no
|
||||
author: Lubos Lunak <l.lunak@kde.org>
|
||||
|
||||
Support for _NET_WM_SYNC_REQUEST - allows the WM to find out when the app
|
||||
finished one redraw - less flicker during resize and with compositing
|
||||
also when opening a window.
|
||||
|
||||
--- src/kernel/qwidget.h.sav 2007-06-22 14:14:05.000000000 +0200
|
||||
+++ src/kernel/qwidget.h 2007-06-23 11:53:39.000000000 +0200
|
||||
@@ -586,6 +586,14 @@ private:
|
||||
void destroyInputContext();
|
||||
void focusInputContext();
|
||||
void checkChildrenDnd();
|
||||
+
|
||||
+#ifndef QT_NO_XSYNC
|
||||
+ void createSyncCounter();
|
||||
+ void destroySyncCounter();
|
||||
+ void incrementSyncCounter();
|
||||
+ void handleSyncRequest( void* ev );
|
||||
+#endif
|
||||
+
|
||||
#elif defined(Q_WS_MAC)
|
||||
uint own_id : 1, macDropEnabled : 1;
|
||||
EventHandlerRef window_event;
|
||||
@@ -962,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 <X11/extensions/sync.h>
|
||||
+#endif // QT_NO_XSYNC
|
||||
+
|
||||
+
|
||||
#ifndef QT_NO_XKB
|
||||
# include <X11/XKBlib.h>
|
||||
#endif // QT_NO_XKB
|
||||
--- src/kernel/qwidget_x11.cpp.sav 2007-04-16 13:47:26.000000000 +0200
|
||||
+++ src/kernel/qwidget_x11.cpp 2007-06-23 19:48:44.000000000 +0200
|
||||
@@ -87,6 +87,12 @@ static QWidget *keyboardGrb = 0;
|
||||
extern Time qt_x_time;
|
||||
extern Time qt_x_user_time;
|
||||
|
||||
+#ifndef QT_NO_XSYNC
|
||||
+extern Atom qt_net_wm_sync_request_counter;
|
||||
+extern Atom qt_net_wm_sync_request;
|
||||
+extern bool qt_use_xsync;
|
||||
+#endif
|
||||
+
|
||||
// defined in qfont_x11.cpp
|
||||
extern bool qt_has_xft;
|
||||
|
||||
@@ -595,11 +601,14 @@ void QWidget::create( WId window, bool i
|
||||
|
||||
XResizeWindow( dpy, id, crect.width(), crect.height() );
|
||||
XStoreName( dpy, id, qAppName() );
|
||||
- Atom protocols[4];
|
||||
+ Atom protocols[5];
|
||||
int n = 0;
|
||||
protocols[n++] = qt_wm_delete_window; // support del window protocol
|
||||
protocols[n++] = qt_wm_take_focus; // support take focus window protocol
|
||||
protocols[n++] = qt_net_wm_ping; // support _NET_WM_PING protocol
|
||||
+#ifndef QT_NO_XSYNC
|
||||
+ protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol
|
||||
+#endif
|
||||
if ( testWFlags( WStyle_ContextHelp ) )
|
||||
protocols[n++] = qt_net_wm_context_help;
|
||||
XSetWMProtocols( dpy, id, protocols, n );
|
||||
@@ -625,6 +634,14 @@ void QWidget::create( WId window, bool i
|
||||
XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
|
||||
(unsigned char *) &curr_pid, 1);
|
||||
|
||||
+#ifndef QT_NO_XSYNC
|
||||
+ // set _NET_WM_SYNC_COUNTER
|
||||
+ createSyncCounter();
|
||||
+ long counterVal = topData()->syncCounter;
|
||||
+ XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace,
|
||||
+ (unsigned char*) &counterVal, 1);
|
||||
+#endif
|
||||
+
|
||||
// when we create a toplevel widget, the frame strut should be dirty
|
||||
fstrut_dirty = 1;
|
||||
|
||||
@@ -720,6 +737,9 @@ void QWidget::destroy( bool destroyWindo
|
||||
if ( destroyWindow )
|
||||
qt_XDestroyWindow( this, x11Display(), winid );
|
||||
}
|
||||
+#ifndef QT_NO_XSYNC
|
||||
+ destroySyncCounter();
|
||||
+#endif
|
||||
setWinId( 0 );
|
||||
|
||||
extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp
|
||||
@@ -769,6 +789,10 @@ void QWidget::reparentSys( QWidget *pare
|
||||
destroyInputContext();
|
||||
}
|
||||
|
||||
+#ifndef QT_NO_XSYNC
|
||||
+ destroySyncCounter();
|
||||
+#endif
|
||||
+
|
||||
if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel
|
||||
topData()->parentWinId = 0;
|
||||
|
||||
@@ -2456,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;
|
||||
}
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
qt-bugs@ issue : none
|
||||
bugs.kde.org number : none
|
||||
applied: no
|
||||
author: Lubos Lunak <l.lunak@kde.org>
|
||||
|
||||
This patch makes override-redirect windows (popup menu, dropdown menu,
|
||||
tooltip, combobox, etc.) also have more window properties like WM_CLASS,
|
||||
so they can be used when compositing.
|
||||
|
||||
--- src/kernel/qwidget_x11.cpp.sav 2007-06-25 10:36:42.000000000 +0200
|
||||
+++ src/kernel/qwidget_x11.cpp 2007-10-02 15:30:13.000000000 +0200
|
||||
@@ -557,7 +557,10 @@ void QWidget::create( WId window, bool i
|
||||
wsa.save_under = True;
|
||||
XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder,
|
||||
&wsa );
|
||||
- x11SetWindowType();
|
||||
+ XClassHint class_hint;
|
||||
+ class_hint.res_name = (char *) qAppName(); // application name
|
||||
+ class_hint.res_class = (char *) qAppClass(); // application class
|
||||
+ XSetClassHint( dpy, id, &class_hint );
|
||||
} else if ( topLevel && !desktop ) { // top-level widget
|
||||
QWidget *p = parentWidget(); // real parent
|
||||
if (p)
|
||||
@@ -620,8 +623,6 @@ void QWidget::create( WId window, bool i
|
||||
else
|
||||
XDeleteProperty(dpy, id, qt_xa_motif_wm_hints);
|
||||
|
||||
- x11SetWindowType();
|
||||
-
|
||||
// set _NET_WM_WINDOW_STATE
|
||||
if (curr_winstate > 0)
|
||||
XChangeProperty(dpy, id, qt_net_wm_state, XA_ATOM, 32, PropModeReplace,
|
||||
@@ -629,11 +630,6 @@ void QWidget::create( WId window, bool i
|
||||
else
|
||||
XDeleteProperty(dpy, id, qt_net_wm_state);
|
||||
|
||||
- // set _NET_WM_PID
|
||||
- long curr_pid = getpid();
|
||||
- XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
|
||||
- (unsigned char *) &curr_pid, 1);
|
||||
-
|
||||
#ifndef QT_NO_XSYNC
|
||||
// set _NET_WM_SYNC_COUNTER
|
||||
createSyncCounter();
|
||||
@@ -645,19 +641,31 @@ void QWidget::create( WId window, bool i
|
||||
// when we create a toplevel widget, the frame strut should be dirty
|
||||
fstrut_dirty = 1;
|
||||
|
||||
+ } else {
|
||||
+ // non-toplevel widgets don't have a frame, so no need to
|
||||
+ // update the strut
|
||||
+ fstrut_dirty = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
|
||||
+ x11SetWindowType();
|
||||
+
|
||||
+ // set _NET_WM_PID
|
||||
+ long curr_pid = getpid();
|
||||
+ XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
|
||||
+ (unsigned char *) &curr_pid, 1);
|
||||
+
|
||||
// declare the widget's object name as window role
|
||||
XChangeProperty( dpy, id,
|
||||
qt_window_role, XA_STRING, 8, PropModeReplace,
|
||||
(unsigned char *)name(), qstrlen( name() ) );
|
||||
|
||||
// set client leader property
|
||||
+ if ( !qt_x11_wm_client_leader )
|
||||
+ qt_x11_create_wm_client_leader();
|
||||
XChangeProperty( dpy, id, qt_wm_client_leader,
|
||||
XA_WINDOW, 32, PropModeReplace,
|
||||
(unsigned char *)&qt_x11_wm_client_leader, 1 );
|
||||
- } else {
|
||||
- // non-toplevel widgets don't have a frame, so no need to
|
||||
- // update the strut
|
||||
- fstrut_dirty = 0;
|
||||
}
|
||||
|
||||
if ( initializeWindow ) {
|
6
Makefile
6
Makefile
|
@ -1,6 +0,0 @@
|
|||
# Makefile for source rpm: qt
|
||||
# $Id$
|
||||
NAME := qt
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
include ../common/Makefile.common
|
|
@ -1,6 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Name=Qt3 Assistant
|
||||
Comment=Add translations to Qt3 applications
|
||||
Comment=A tool for presenting on-line documentation
|
||||
Exec=assistant
|
||||
Icon=assistant3
|
||||
Terminal=false
|
||||
|
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -1,24 +1,24 @@
|
|||
--- qt-x11-free-3.3.8/tools/designer/uic/main.cpp.uic-multilib 2007-03-18 23:47:32.000000000 +0100
|
||||
+++ qt-x11-free-3.3.8/tools/designer/uic/main.cpp 2007-03-18 23:50:34.000000000 +0100
|
||||
@@ -316,8 +316,7 @@
|
||||
diff -up qt-x11-free-3.3.8b/tools/designer/uic/main.cpp.orig qt-x11-free-3.3.8b/tools/designer/uic/main.cpp
|
||||
--- qt-x11-free-3.3.8b/tools/designer/uic/main.cpp.orig 2008-01-24 13:25:29.000000000 +0100
|
||||
+++ qt-x11-free-3.3.8b/tools/designer/uic/main.cpp 2008-01-24 13:28:17.000000000 +0100
|
||||
@@ -320,7 +320,7 @@ int main( int argc, char * argv[] )
|
||||
out << "/****************************************************************************" << endl;
|
||||
out << "** Form "<< (impl? "implementation" : "interface") << " generated from reading ui file '" << fileName << "'" << endl;
|
||||
out << "**" << endl;
|
||||
- out << "** Created: " << QDateTime::currentDateTime().toString() << endl;
|
||||
- out << "** by: The User Interface Compiler ($Id: qt/main.cpp 3.3.8 edited Jan 11 14:47 $)" << endl;
|
||||
+ out << "** Created by: The User Interface Compiler ($Id: qt/main.cpp 3.3.8 edited Jan 11 14:47 $)" << endl;
|
||||
+ out << "** Created by User Interface Compiler" << endl;
|
||||
out << "**" << endl;
|
||||
out << "** WARNING! All changes made in this file will be lost!" << endl;
|
||||
out << "****************************************************************************/" << endl << endl;
|
||||
--- qt-x11-free-3.3.8/tools/designer/uic/embed.cpp.uic-multilib 2007-02-02 15:01:39.000000000 +0100
|
||||
+++ qt-x11-free-3.3.8/tools/designer/uic/embed.cpp 2007-03-18 23:51:36.000000000 +0100
|
||||
@@ -130,8 +130,7 @@
|
||||
diff -up qt-x11-free-3.3.8b/tools/designer/uic/embed.cpp.orig qt-x11-free-3.3.8b/tools/designer/uic/embed.cpp
|
||||
--- qt-x11-free-3.3.8b/tools/designer/uic/embed.cpp.orig 2008-01-24 13:28:30.000000000 +0100
|
||||
+++ qt-x11-free-3.3.8b/tools/designer/uic/embed.cpp 2008-01-24 13:29:10.000000000 +0100
|
||||
@@ -137,7 +137,7 @@ void Uic::embed( QTextStream& out, const
|
||||
for ( it = images.begin(); it != images.end(); ++it )
|
||||
out << "** " << *it << "\n";
|
||||
out << "**\n";
|
||||
- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n";
|
||||
- out << "** by: The User Interface Compiler ($Id: qt/embed.cpp 3.3.8 edited Jan 11 14:47 $)\n";
|
||||
+ out << "** Created by: The User Interface Compiler ($Id: qt/embed.cpp 3.3.8 edited Jan 11 14:47 $)\n";
|
||||
+ out << "** Created by The User Interface Compiler" << "\n";
|
||||
out << "**\n";
|
||||
out << "** WARNING! All changes made in this file will be lost!\n";
|
||||
out << "****************************************************************************/\n";
|
63
qt.spec
63
qt.spec
|
@ -1,13 +1,13 @@
|
|||
Summary: The shared library for the Qt GUI toolkit.
|
||||
Name: qt
|
||||
Version: 3.3.8
|
||||
Release: 5%{?dist}
|
||||
Version: 3.3.8b
|
||||
Release: 2%{?dist}
|
||||
Epoch: 1
|
||||
License: GPL/QPL
|
||||
License: QPL or GPLv2 or GPLv3
|
||||
Group: System Environment/Libraries
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
Url: http://www.troll.no
|
||||
Source0: ftp://ftp.troll.no/qt/source/qt-x11-free-%{version}.tar.bz2
|
||||
Source0: ftp://ftp.troll.no/qt/source/qt-x11-free-%{version}.tar.gz
|
||||
Source2: qt.sh
|
||||
Source3: qt.csh
|
||||
Source4: designer3.desktop
|
||||
|
@ -28,17 +28,14 @@ Patch14: qt-x11-free-3.3.3-gl.patch
|
|||
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.8-uic-multilib.patch
|
||||
Patch26: qt-3.3.6-fontrendering-punjabi-209970.patch
|
||||
Patch25: qt-x11-free-3.3.8b-uic-multilib.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,10 +51,10 @@ 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: 0077-utf8-decoder-fixes.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
|
||||
|
@ -266,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
|
||||
|
@ -287,15 +282,17 @@ 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 .0077-utf8-decoder-fixes
|
||||
%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
|
||||
|
||||
# convert to UTF-8
|
||||
|
@ -485,7 +482,7 @@ rm -rf %{buildroot}
|
|||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc FAQ LICENSE.QPL README* changes*
|
||||
%doc FAQ LICENSE* README* changes*
|
||||
%dir %{qtdir}
|
||||
%dir %{qtdir}/bin
|
||||
%dir %{qtdir}/lib
|
||||
|
@ -568,6 +565,36 @@ rm -rf %{buildroot}
|
|||
|
||||
|
||||
%changelog
|
||||
* Tue Jan 29 2008 Than Ngo <than@redhat.com> 3.3.8b-2
|
||||
- fix assistant description
|
||||
|
||||
* Thu Jan 24 2008 Than Ngo <than@redhat.com> 3.3.8b-1
|
||||
- License: QPL or 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 <than@redhat.com> - 1:3.3.8-7
|
||||
- bz292941, CVE-2007-4137
|
||||
|
||||
* Wed Aug 29 2007 Than Ngo <than@redhat.com> - 1:3.3.8-6.fc7.1
|
||||
- cleanup security patch
|
||||
|
||||
* Tue Aug 28 2007 Than Ngo <than@redhat.com> - 1:3.3.8-6.fc7
|
||||
- CVE-2007-3388 qt3 format string flaw
|
||||
|
||||
* Thu Jun 14 2007 Than Ngo <than@redhat.com> - 1:3.3.8-5.fc7.1
|
||||
- backport to fix #bz243722, bz#244148, Applications using qt-mysql crash if database is
|
||||
removed before QApplication is destroyed
|
||||
|
||||
* Mon Apr 23 2007 Than Ngo <than@redhat.com> - 1:3.3.8-5.fc7
|
||||
- apply patch to fix fontrendering problem in gu_IN #228451,#228452
|
||||
|
||||
|
|
Loading…
Reference in New Issue