]> git.pld-linux.org Git - packages/qt4.git/blame - qt4-kde-git.patch
rebuild with openssl 3.0.0
[packages/qt4.git] / qt4-kde-git.patch
CommitLineData
e356592b
AM
1diff --git a/README.kde-qt b/README.kde-qt
2new file mode 100644
53372821 3index 0000000..512f034
e356592b
AM
4--- /dev/null
5+++ b/README.kde-qt
53372821 6@@ -0,0 +1,270 @@
e356592b
AM
7+This is a patched version of Qt. It may include changes made by KDE
8+and Qt developers that have either not been accepted for inclusion
9+into Qt, or have been accepted for a later version of Qt than this
10+one.
11+
12+1. Configuring Qt
13+=================
14+
15+The recommended compile line is:
16+
17+--default-config-begin--
18+
19+ ./configure -qt-gif -debug -fast -no-separate-debug-info \
20+ -system-libpng -system-libjpeg -system-zlib \
21+ -dbus -webkit -plugin-sql-mysql \
22+ -nomake examples -nomake demos -prefix <installdir>
23+
24+--default-config-end--
25+
26+It contains "-debug", which greatly improves the use for backtraces (but
27+also needs a lot more disk space and makes things slower). To build in
28+release mode, replace it with "-release".
29+
30+It also contains "-no-separate-debug-info", which disables separate .debug
31+files. Instead, the debug information will be built into the libraries.
32+This option is needed when you install Qt.
33+
34+If you don't install Qt, it can be useful to disable this option,
35+thus having separate debug symbol files. With separate debug files, you can
36+just move those debug files to another directory to remove Qt debug symbols.
37+Moving the files back will enable Qt debug symbols again.
38+This is useful if you rarely need to step into Qt functions during debugging,
39+because GDB loads much faster and uses less memory without Qt debug symbols.
40+In the rare case you need to step into Qt code, you can temporarily enable
41+debug symbols again by moving the debug files back. You can even load the Qt
42+debug symbols from within GDB on demand, using the "symbol-file" command.
43+
44+If you are planning to compile Qt using an Icecream cluster you have to
45+pass the option -no-pch (no precompiled headers) to configure to make
46+distributed compilation work.
47+
48+2. Compiling Qt
49+===============
50+
51+To compile Qt on a Unix platform, run:
52+
53+ export MAKEFLAGS=-j2
54+ make
55+ make install
56+
57+If your computer has more than one core or processor, you may consider
58+increasing the "2" above. If you've got a compile farm available, you
59+should adjust the -j argument to match the number of slots in that
60+farm.
61+
62+3. Modifying & rebuilding Qt
63+============================
64+
65+If you make modifications to the Qt source code, you don't need to
66+build everything again. Simply go to the directory containing the
67+Makefile closest to the files you changed and run "make" again.
68+
69+For example, if you've modified src/corelib/io/qiodevice.cpp, do:
70+
71+ cd src/corelib
72+ make
73+
74+If you make a change that is not temporary, you should create a Git
75+commit out of it. However, you shouldn't push those changes to
76+kde-qt.git. If you have a fix that benefit others, see the "Creating
77+kde-qt.git modifications" section below.
78+
79+4. Building Qt examples and demos
80+=================================
81+
82+The "-nomake examples -nomake demos" arguments to the configure script
83+mean that those two sections will not be configured for building,
84+which is unneeded for usage of the library. If you want to compile
85+the examples or demos later, just enter either directory and type:
86+
87+ qmake
88+ make
89+
90+5. Build Qt tests
91+=================
92+
93+(Official information: http://qt.gitorious.org/qt/pages/QtAutotestsEnvironment)
94+
95+In order to run Qt tests, you must have a "developer build" of Qt. For
96+that, you need to reconfigure Qt and add the "-developer-build"
97+option. That option is technically equivalent to the options:
98+
99+ -debug -prefix $PWD -DQT_BUILD_INTERNAL
100+
101+To run a test, go to its source dir in tests/auto/testname. Type
102+"make" to build it, then run it (either ./tst_testname, or "make install").
103+
104+6. Building Qt documentation
105+============================
106+
107+To build and install the documentation, run:
108+
109+ make docs
110+ ./config.status
111+ make install
112+
113+It is necessary to do this once only, even if you rebuild Qt later.
114+
115+7. Using Qt uninstalled
116+=======================
117+
118+To use without having to install it, configure it as follows:
119+
120+ ./configure <other configure options> -prefix $PWD
121+ make sub-src
122+ make sub-tools
123+
124+Attention: DO NOT run
125+
126+ make install
127+
128+If you do, Qt will overwrite your include/ directory with its
129+installation.
130+
131+8. Creating kde-qt.git modifications
132+====================================
133+
134+If you have fixed a bug in Qt or modified it in any way that may
135+benefit others, please share your change in the form of a patch. Do
136+not commit your changes directly to the main branch because they
137+may be lost in a future update if they have not been added to the
138+official Qt release.
139+
140+The exception to the above rule is that if the fix has been accepted
099fec73
AM
141+by the Qt developers (and so will appear in the very next release of
142+Qt), then it should be simply cherry-picked from the Qt development
e356592b 143+branch. Note that you shouldn't do this for changes that have been
099fec73
AM
144+accepted into a release which is not the very next. In this case, you
145+should use the following command:
e356592b
AM
146+
147+ git cherry-pick -x SHA1_OF_THE_FIX
148+where SHA1_OF_THE_FIX is the SHA-1 of the commit that you want to
149+introduce. Then push the change to the server.
150+
099fec73
AM
151+In all other cases, before creating a patch, it is recommended to
152+contact the Qt developers via a new task in
153+http://bugreports.qt.nokia.com and explain the situation. There may be
154+a solution for the problem already or a new direction that should be
155+accounted for.
e356592b
AM
156+
157+To create a patch, do the following:
158+ a) look at the listing of branches in
159+ http://qt.gitorious.org/+kde-developers/qt/kde-qt/commits/HEAD and
160+ select the next number.
161+
162+ b) create a new branch out of a clean, released version of Qt, (for
163+ example, 4.5.1), using the number above and a brief description of
164+ your fix. For example:
165+ git checkout -b patches/0180-window-role v4.5.1
166+ You can see the available released versions of Qt with:
167+ git tag
168+
169+ c) make your changes to the Qt source code and verify that it
099fec73
AM
170+ compiles, links and works (please run the respective unit tests from
171+ tests/auto in the source tree).
e356592b
AM
172+
173+ c) commit your changes to Git, using the "git commit" command. Please
174+ see http://qt.gitorious.org/qt/pages/GitIntroductionWithQt and
175+ http://qt.gitorious.org/qt/pages/QtCodingStyle for information on
176+ how to create commits
e356592b 177+
099fec73
AM
178+ Note that you are allowed to create as many commits as necessary to
179+ accomplish a working change that can be easily reviewed.
180+
181+ e) merge the change to the patch branch, for example, 4.5.1-patched:
e356592b
AM
182+ git checkout 4.5.1-patched
183+ git merge patches/0180-window-role
184+
099fec73
AM
185+ f) merge the patch branch to master:
186+ git checkout master
187+ git merge 4.5.1-patched
188+
189+ g) push the changes you made to your branch and to the main server:
190+ git push git@gitorious.org:qt/kde-qt.git master 4.5.1-patched patches/0180-window-role
191+ (Don't forget to list all 3 branch names)
e356592b
AM
192+
193+Don't forget to submit your patch to using the Qt Contribution Model,
194+along with the long description of the issue found. See
195+http://qt.gitorious.org/qt/pages/QtContributionGuidelines for
196+information how. You can submit the branch you've just sent to the
197+server.
198+
199+9. Troubleshooting: Re-configuring and re-compiling
099fec73 200+===================================================
e356592b
AM
201+
202+For those updating the source in a directory where Qt has already
203+been compiled, you may need to run the following commands from the
204+top directory of your Qt sources:
205+
206+ find . -name '*.moc' | xargs rm
207+
208+Sometimes ./configure will refuse to run. You may need to:
209+ rm .qmake.cache
53372821 210+ rm src/corelib/global/qconfig.*
e356592b
AM
211+
212+If you think you may have run "make install" on an install-less Qt
213+(srcdir == $QTDIR), run:
214+
215+ rm -rf include
216+ bin/syncqt
099fec73
AM
217+
218+10. Maintenance: updating kde-qt to a newer Qt version
219+======================================================
220+
221+When a new version of Qt is released, do the following to update the
222+repository (assuming Qt 4.6.1 is the release you're updating to):
223+
224+ a) rebase each of the individual patches against this new version.
225+ for branch in patches/*; do
226+ git checkout -b $branch origin/$branch
227+ git rebase v4.6.1
228+ resolve conflicts
229+ done # Note: pseudo-shell, don't try to run this
230+
231+ If a given branch is no longer valid (it's been applied to this Qt
232+ version), then delete it on the server:
233+ git push origin :$branch
234+
235+ b) create a new "patched" branch locally, starting on the release tag:
236+ git checkout -b 4.6.1-patched v4.6.1
237+
238+ c) merge the patch branches and the README branch, one by one. There
239+ should be no conflicts at this stage; if there are, it indicates
240+ one patch conflicts with another.
241+ git merge patches/0997-patch1
242+ git merge patches/0998-patch2
243+ git merge patches/0999-patch3
244+ # etc.
245+ git merge README
246+
247+ d) overwrite the master branch's contents with the new branch. If the
248+ Git merge strategy "theirs" exist (it doesn't as of Git 1.6), use
249+ it:
250+ git checkout master
251+ git merge -s theirs 4.6.1-patched
252+
253+ If it doesn't exist, do the equivalent by inverting the point of
254+ view:
255+ git checkout -b tmp 4.6.1-patched
256+ git merge -s ours master
257+ git checkout master
258+ git merge tmp
259+ git branch -d tmp
260+
261+ Also possible using Git plumbing:
262+ git checkout master
263+ git merge -s ours --no-commit 4.6.1-patched
264+ rm .git/index
265+ git read-tree 4.6.1-patched
266+ git commit
267+
268+ e) push everything to kde-qt.git, including the new Qt. Note that
269+ the individiual patch branches will require force, because they
270+ have been rebased (that is, the new branch tip is no longer a
271+ direct descendant of the previous tip).
272+
273+ # Push the individual patch branches with force
274+ git push -f origin patches/0997-patch1 patches/0998-patch2 patches/0999-patch3 etc
275+ # Push the tag, the new patched branch and master
276+ git push v4.6.1 4.6.1-patched master
e356592b 277diff --git a/bin/syncqt b/bin/syncqt
40fbaec7 278index c73d119..9e10576 100755
e356592b
AM
279--- a/bin/syncqt
280+++ b/bin/syncqt
40fbaec7 281@@ -382,9 +382,13 @@ sub fixPaths {
e356592b
AM
282 $match_dir = $tmp;
283 $i = $slash;
284 }
285+ my $cnt_ofs = 0;
286+ if($match_dir =~ /^[a-zA-Z]:$/) {
287+ $cnt_ofs = 1;
288+ }
289 if($match_dir) {
290 my $after = substr($dir, length($match_dir));
291- my $count = ($after =~ tr,/,,);
292+ my $count = ($after =~ tr,/,,) - $cnt_ofs;
293 my $dots = "";
294 for(my $i = 0; $i < $count; $i++) {
295 $dots .= "../";
296diff --git a/configure b/configure
40fbaec7 297index 0d9df16..b88fc3e 100755
e356592b
AM
298--- a/configure
299+++ b/configure
40fbaec7 300@@ -1058,6 +1058,11 @@ while [ "$#" -gt 0 ]; do
4c749030 301 VAL=$1
e356592b
AM
302 fi
303 ;;
304+ -isystem)
305+ VAR="add_isystempath"
306+ shift
307+ VAL="$1"
308+ ;;
309 -I?*|-I)
310 VAR="add_ipath"
311 if [ "$1" = "-I" ]; then
40fbaec7 312@@ -2182,6 +2187,9 @@ while [ "$#" -gt 0 ]; do
e356592b
AM
313 add_ipath)
314 I_FLAGS="$I_FLAGS -I\"${VAL}\""
315 ;;
316+ add_isystempath)
317+ I_FLAGS="$I_FLAGS -isystem \"${VAL}\""
318+ ;;
319 add_lpath)
320 L_FLAGS="$L_FLAGS -L\"${VAL}\""
321 ;;
e356592b 322diff --git a/qmake/property.cpp b/qmake/property.cpp
40fbaec7 323index 8bfc353..22a847a 100644
e356592b
AM
324--- a/qmake/property.cpp
325+++ b/qmake/property.cpp
40fbaec7 326@@ -81,31 +81,34 @@ QMakeProperty::keyBase(bool version) const
e356592b
AM
327 QString
328 QMakeProperty::value(QString v, bool just_check)
329 {
330+ QString ret;
331 if(v == "QT_INSTALL_PREFIX")
332- return QLibraryInfo::location(QLibraryInfo::PrefixPath);
333+ ret = QLibraryInfo::location(QLibraryInfo::PrefixPath);
334 else if(v == "QT_INSTALL_DATA")
335- return QLibraryInfo::location(QLibraryInfo::DataPath);
336+ ret = QLibraryInfo::location(QLibraryInfo::DataPath);
337 else if(v == "QT_INSTALL_DOCS")
338- return QLibraryInfo::location(QLibraryInfo::DocumentationPath);
339+ ret = QLibraryInfo::location(QLibraryInfo::DocumentationPath);
340 else if(v == "QT_INSTALL_HEADERS")
341- return QLibraryInfo::location(QLibraryInfo::HeadersPath);
342+ ret = QLibraryInfo::location(QLibraryInfo::HeadersPath);
343 else if(v == "QT_INSTALL_LIBS")
344- return QLibraryInfo::location(QLibraryInfo::LibrariesPath);
345+ ret = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
346 else if(v == "QT_INSTALL_BINS")
347- return QLibraryInfo::location(QLibraryInfo::BinariesPath);
348+ ret = QLibraryInfo::location(QLibraryInfo::BinariesPath);
349 else if(v == "QT_INSTALL_PLUGINS")
350- return QLibraryInfo::location(QLibraryInfo::PluginsPath);
351+ ret = QLibraryInfo::location(QLibraryInfo::PluginsPath);
53372821
AM
352 else if(v == "QT_INSTALL_IMPORTS")
353- return QLibraryInfo::location(QLibraryInfo::ImportsPath);
354+ ret = QLibraryInfo::location(QLibraryInfo::ImportsPath);
e356592b
AM
355 else if(v == "QT_INSTALL_TRANSLATIONS")
356- return QLibraryInfo::location(QLibraryInfo::TranslationsPath);
357+ ret = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
358 else if(v == "QT_INSTALL_CONFIGURATION")
359- return QLibraryInfo::location(QLibraryInfo::SettingsPath);
360+ ret = QLibraryInfo::location(QLibraryInfo::SettingsPath);
361 else if(v == "QT_INSTALL_EXAMPLES")
362- return QLibraryInfo::location(QLibraryInfo::ExamplesPath);
363+ ret = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
364 else if(v == "QT_INSTALL_DEMOS")
365- return QLibraryInfo::location(QLibraryInfo::DemosPath);
366- else if(v == "QMAKE_MKSPECS")
367+ ret = QLibraryInfo::location(QLibraryInfo::DemosPath);
368+ if(!ret.isEmpty())
369+ return QDir::toNativeSeparators(ret);
370+ if(v == "QMAKE_MKSPECS")
40fbaec7 371 return qmake_mkspec_paths().join(Option::dirlist_sep);
e356592b
AM
372 else if(v == "QMAKE_VERSION")
373 return qmake_version();
53372821 374@@ -118,7 +121,7 @@ QMakeProperty::value(QString v, bool just_check)
e356592b
AM
375 int slash = v.lastIndexOf('/');
376 QVariant var = settings->value(keyBase(slash == -1) + v);
377 bool ok = var.isValid();
378- QString ret = var.toString();
379+ ret = var.toString();
380 if(!ok) {
381 QString version = qmake_version();
382 if(slash != -1) {
e356592b 383diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
53372821 384index 2e2a0f4..239de2d 100644
e356592b
AM
385--- a/src/corelib/kernel/qobject.cpp
386+++ b/src/corelib/kernel/qobject.cpp
49bbca89
AM
387@@ -1101,8 +1101,18 @@
388
389 if (objectNameChanged)
390 d->declarativeData->objectNameChanged(d->declarativeData, this);
391+
e356592b
AM
392+#if defined(Q_WS_X11)
393+ d->checkWindowRole();
394+#endif
49bbca89 395+
e356592b
AM
396 }
397
398+#if defined(Q_WS_X11)
399+void QObjectPrivate::checkWindowRole()
400+{
401+}
402+#endif
403
404 #ifdef QT3_SUPPORT
405 /*! \internal
406diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
53372821 407index 2574b74..9f57417 100644
e356592b
AM
408--- a/src/corelib/kernel/qobject_p.h
409+++ b/src/corelib/kernel/qobject_p.h
53372821 410@@ -82,7 +82,9 @@ void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet
e356592b 411
c57a122a 412 extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set;
e356592b
AM
413
414-enum { QObjectPrivateVersion = QT_VERSION };
415+// add 0x1000000 to mark it as qt-copy version, with possible modifications
416+// in some Q*Private class
417+enum { QObjectPrivateVersion = QT_VERSION + 0x1000000 };
418
53372821 419 class Q_CORE_EXPORT QAbstractDeclarativeData
e356592b 420 {
53372821 421@@ -155,6 +157,9 @@ public:
4c749030 422 #ifdef QT3_SUPPORT
c57a122a 423 void sendPendingChildInsertedEvents();
c57a122a 424 #endif
e356592b
AM
425+#if defined(Q_WS_X11)
426+ virtual void checkWindowRole();
427+#endif
428
53372821 429 static inline Sender *setCurrentSender(QObject *receiver,
c57a122a 430 Sender *sender);
e356592b 431diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
53372821 432index 9662a9e..3160911 100644
e356592b
AM
433--- a/src/gui/kernel/qwidget_p.h
434+++ b/src/gui/kernel/qwidget_p.h
53372821 435@@ -757,6 +757,7 @@ public:
c57a122a 436 static QWidget *keyboardGrabber;
e356592b 437
e356592b
AM
438 void setWindowRole();
439+ virtual void checkWindowRole();
440 void sendStartupMessage(const char *message) const;
441 void setNetWmWindowTypes();
442 void x11UpdateIsOpaque();
443diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
40fbaec7 444index 09abb7b..5f43fee 100644
e356592b
AM
445--- a/src/gui/kernel/qwidget_x11.cpp
446+++ b/src/gui/kernel/qwidget_x11.cpp
f13b07df 447@@ -762,6 +762,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
e356592b
AM
448 Q_ASSERT(id);
449 XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder,
450 &wsa);
451+ XClassHint class_hint;
452+ QByteArray appName = qAppName().toLatin1();
453+ class_hint.res_name = appName.data(); // application name
454+ class_hint.res_class = const_cast<char *>(QX11Info::appClass()); // application class
455+ XSetWMProperties(dpy, id, 0, 0, 0, 0, 0, 0, &class_hint);
456 } else if (topLevel && !desktop) { // top-level widget
457 if (!X11->wm_client_leader)
458 create_wm_client_leader();
f13b07df 459@@ -815,32 +820,40 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
e356592b
AM
460 // set EWMH window types
461 setNetWmWindowTypes();
462
463+ // when we create a toplevel widget, the frame strut should be dirty
464+ data.fstrut_dirty = 1;
465+
466+ } else {
467+ // non-toplevel widgets don't have a frame, so no need to
468+ // update the strut
469+ data.fstrut_dirty = 0;
470+ }
471+
472+ if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
473 // set _NET_WM_PID
474 long curr_pid = getpid();
475 XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace,
476 (unsigned char *) &curr_pid, 1);
477
478- // when we create a toplevel widget, the frame strut should be dirty
479- data.fstrut_dirty = 1;
480
481 // declare the widget's window role
482+ QByteArray windowRole;
483 if (QTLWExtra *topData = maybeTopData()) {
484- if (!topData->role.isEmpty()) {
485- QByteArray windowRole = topData->role.toUtf8();
486- XChangeProperty(dpy, id,
487- ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
488- (unsigned char *)windowRole.constData(), windowRole.length());
489- }
490+ if (!topData->role.isEmpty())
491+ windowRole = topData->role.toUtf8();
492+ }
493+ if (windowRole.isEmpty()) // use object name as a fallback
494+ windowRole = objectName.toUtf8();
495+ if (!windowRole.isEmpty()) {
496+ XChangeProperty(dpy, id,
497+ ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
498+ (unsigned char *)windowRole.constData(), windowRole.length());
499 }
500
501 // set client leader property
502 XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER),
503 XA_WINDOW, 32, PropModeReplace,
504 (unsigned char *)&X11->wm_client_leader, 1);
505- } else {
506- // non-toplevel widgets don't have a frame, so no need to
507- // update the strut
508- data.fstrut_dirty = 0;
509 }
510
511 if (initializeWindow && q->internalWinId()) {
40fbaec7 512@@ -2943,6 +2956,17 @@ void QWidgetPrivate::setWindowRole()
e356592b
AM
513 (unsigned char *)windowRole.constData(), windowRole.length());
514 }
515
516+void QWidgetPrivate::checkWindowRole()
517+{
518+ Q_Q(QWidget);
519+ if( !q->windowRole().isEmpty() || !q->internalWinId())
520+ return;
521+ QByteArray windowRole = objectName.toUtf8(); // use as a fallback
522+ XChangeProperty(X11->display, q->internalWinId(),
523+ ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
524+ (unsigned char *)windowRole.constData(), windowRole.length());
525+}
526+
527 Q_GLOBAL_STATIC(QX11PaintEngine, qt_widget_paintengine)
528 QPaintEngine *QWidget::paintEngine() const
529 {
e356592b 530diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp
40fbaec7 531index 954478d..7c9099d 100644
e356592b
AM
532--- a/src/gui/widgets/qtabbar.cpp
533+++ b/src/gui/widgets/qtabbar.cpp
53372821 534@@ -723,8 +723,8 @@ void QTabBarPrivate::refresh()
e356592b
AM
535 layoutTabs();
536 makeVisible(currentIndex);
537 q->update();
538- q->updateGeometry();
539 }
540+ q->updateGeometry();
541 }
542
543 /*!
544diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
53372821 545index 81cdd93..f8b9a50 100644
e356592b
AM
546--- a/src/tools/moc/main.cpp
547+++ b/src/tools/moc/main.cpp
548@@ -94,7 +94,13 @@ static QByteArray combinePath(const char *infile, const char *outfile)
549 inSplitted.prepend(QLatin1String(".."));
550 }
551 inSplitted.append(inFileInfo.fileName());
552+#ifdef Q_WS_WIN
553+ const QString rel = inSplitted.join(QLatin1String("/"));
554+ const QString abs = inFileInfo.absoluteFilePath();
555+ return QFile::encodeName(rel.length() < abs.length() ? rel : abs);
556+#else
557 return QFile::encodeName(inSplitted.join(QLatin1String("/")));
558+#endif
559 }
560
561
This page took 0.146693 seconds and 4 git commands to generate.