Contents of /trunk/qt4/patches/qt-4.5.3-kde-qt-063bded33b417cdf92fd51366fc7fdb06dea00ba.patch
Parent Directory | Revision Log
Revision 918 -
(show annotations)
(download)
Fri Oct 30 18:39:48 2009 UTC (14 years, 11 months ago) by niro
File size: 73315 byte(s)
Fri Oct 30 18:39:48 2009 UTC (14 years, 11 months ago) by niro
File size: 73315 byte(s)
more patches
1 | diff --git a/README.kde-qt b/README.kde-qt |
2 | new file mode 100644 |
3 | index 0000000..db3feb6 |
4 | --- /dev/null |
5 | +++ b/README.kde-qt |
6 | @@ -0,0 +1,201 @@ |
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 |
141 | +by Qt Software (and so will appear in the very next release of Qt), |
142 | +then it should be simply cherry-picked from the Qt development |
143 | +branch. Note that you shouldn't do this for changes that have been |
144 | +accepted into a release which is not the very next. |
145 | +In this case, you should use the following command: |
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 | + |
151 | +Before creating a patch, it is recommended to contact Qt Software |
152 | +support via qt-bugs@trolltech.com and explain the situation. There may |
153 | +be a solution for the problem already or a new direction that should |
154 | +be accounted for. |
155 | + |
156 | +To create a patch, do the following: |
157 | + a) look at the listing of branches in |
158 | + http://qt.gitorious.org/+kde-developers/qt/kde-qt/commits/HEAD and |
159 | + select the next number. |
160 | + |
161 | + b) create a new branch out of a clean, released version of Qt, (for |
162 | + example, 4.5.1), using the number above and a brief description of |
163 | + your fix. For example: |
164 | + git checkout -b patches/0180-window-role v4.5.1 |
165 | + You can see the available released versions of Qt with: |
166 | + git tag |
167 | + |
168 | + c) make your changes to the Qt source code and verify that it |
169 | + compiles, links and works (please run the respective unit tests). |
170 | + |
171 | + c) commit your changes to Git, using the "git commit" command. Please |
172 | + see http://qt.gitorious.org/qt/pages/GitIntroductionWithQt and |
173 | + http://qt.gitorious.org/qt/pages/QtCodingStyle for information on |
174 | + how to create commits |
175 | + Note that you can create multiple commits. |
176 | + |
177 | + e) merge the change to the main branch, for example, 4.5.1-patched: |
178 | + git checkout 4.5.1-patched |
179 | + git merge patches/0180-window-role |
180 | + |
181 | + f) push the changes you made to your branch and to the main server: |
182 | + git push git@gitorious.org:qt/kde-qt.git 4.5.1-patched patches/0180-window-role |
183 | + (Don't forget to list both branch names) |
184 | + |
185 | +Don't forget to submit your patch to using the Qt Contribution Model, |
186 | +along with the long description of the issue found. See |
187 | +http://qt.gitorious.org/qt/pages/QtContributionGuidelines for |
188 | +information how. You can submit the branch you've just sent to the |
189 | +server. |
190 | + |
191 | +9. Troubleshooting: Re-configuring and re-compiling |
192 | +================================================== |
193 | + |
194 | +For those updating the source in a directory where Qt has already |
195 | +been compiled, you may need to run the following commands from the |
196 | +top directory of your Qt sources: |
197 | + |
198 | + find . -name '*.moc' | xargs rm |
199 | + |
200 | +Sometimes ./configure will refuse to run. You may need to: |
201 | + rm .qmake.cache |
202 | + |
203 | +If you think you may have run "make install" on an install-less Qt |
204 | +(srcdir == $QTDIR), run: |
205 | + |
206 | + rm -rf include |
207 | + bin/syncqt |
208 | diff --git a/bin/syncqt b/bin/syncqt |
209 | index edabeca..e71d480 100755 |
210 | --- a/bin/syncqt |
211 | +++ b/bin/syncqt |
212 | @@ -363,9 +363,13 @@ sub fixPaths { |
213 | $match_dir = $tmp; |
214 | $i = $slash; |
215 | } |
216 | + my $cnt_ofs = 0; |
217 | + if($match_dir =~ /^[a-zA-Z]:$/) { |
218 | + $cnt_ofs = 1; |
219 | + } |
220 | if($match_dir) { |
221 | my $after = substr($dir, length($match_dir)); |
222 | - my $count = ($after =~ tr,/,,); |
223 | + my $count = ($after =~ tr,/,,) - $cnt_ofs; |
224 | my $dots = ""; |
225 | for(my $i = 0; $i < $count; $i++) { |
226 | $dots .= "../"; |
227 | diff --git a/configure b/configure |
228 | index 4ea1ad0..b28a1fa 100755 |
229 | --- a/configure |
230 | +++ b/configure |
231 | @@ -960,6 +960,11 @@ while [ "$#" -gt 0 ]; do |
232 | VAL=`echo $1 | sed 's,-D,,'` |
233 | fi |
234 | ;; |
235 | + -isystem) |
236 | + VAR="add_isystempath" |
237 | + shift |
238 | + VAL="$1" |
239 | + ;; |
240 | -I?*|-I) |
241 | VAR="add_ipath" |
242 | if [ "$1" = "-I" ]; then |
243 | @@ -1930,6 +1935,9 @@ while [ "$#" -gt 0 ]; do |
244 | add_ipath) |
245 | I_FLAGS="$I_FLAGS -I\"${VAL}\"" |
246 | ;; |
247 | + add_isystempath) |
248 | + I_FLAGS="$I_FLAGS -isystem \"${VAL}\"" |
249 | + ;; |
250 | add_lpath) |
251 | L_FLAGS="$L_FLAGS -L\"${VAL}\"" |
252 | ;; |
253 | diff --git a/projects.pro b/projects.pro |
254 | index f6c596d..79420d2 100644 |
255 | --- a/projects.pro |
256 | +++ b/projects.pro |
257 | @@ -131,6 +131,9 @@ unix { |
258 | DEFAULT_QMAKESPEC ~= s,^.*mkspecs/,,g |
259 | mkspecs.commands += $(DEL_FILE) $(INSTALL_ROOT)$$mkspecs.path/default; $(SYMLINK) $$DEFAULT_QMAKESPEC $(INSTALL_ROOT)$$mkspecs.path/default |
260 | } |
261 | +win32 { |
262 | + mkspecs.files += $$QT_BUILD_TREE/mkspecs/default |
263 | +} |
264 | INSTALLS += mkspecs |
265 | |
266 | false:macx { #mac install location |
267 | diff --git a/qmake/property.cpp b/qmake/property.cpp |
268 | index ea4842a..ac54854 100644 |
269 | --- a/qmake/property.cpp |
270 | +++ b/qmake/property.cpp |
271 | @@ -81,29 +81,32 @@ QMakeProperty::keyBase(bool version) const |
272 | QString |
273 | QMakeProperty::value(QString v, bool just_check) |
274 | { |
275 | + QString ret; |
276 | if(v == "QT_INSTALL_PREFIX") |
277 | - return QLibraryInfo::location(QLibraryInfo::PrefixPath); |
278 | + ret = QLibraryInfo::location(QLibraryInfo::PrefixPath); |
279 | else if(v == "QT_INSTALL_DATA") |
280 | - return QLibraryInfo::location(QLibraryInfo::DataPath); |
281 | + ret = QLibraryInfo::location(QLibraryInfo::DataPath); |
282 | else if(v == "QT_INSTALL_DOCS") |
283 | - return QLibraryInfo::location(QLibraryInfo::DocumentationPath); |
284 | + ret = QLibraryInfo::location(QLibraryInfo::DocumentationPath); |
285 | else if(v == "QT_INSTALL_HEADERS") |
286 | - return QLibraryInfo::location(QLibraryInfo::HeadersPath); |
287 | + ret = QLibraryInfo::location(QLibraryInfo::HeadersPath); |
288 | else if(v == "QT_INSTALL_LIBS") |
289 | - return QLibraryInfo::location(QLibraryInfo::LibrariesPath); |
290 | + ret = QLibraryInfo::location(QLibraryInfo::LibrariesPath); |
291 | else if(v == "QT_INSTALL_BINS") |
292 | - return QLibraryInfo::location(QLibraryInfo::BinariesPath); |
293 | + ret = QLibraryInfo::location(QLibraryInfo::BinariesPath); |
294 | else if(v == "QT_INSTALL_PLUGINS") |
295 | - return QLibraryInfo::location(QLibraryInfo::PluginsPath); |
296 | + ret = QLibraryInfo::location(QLibraryInfo::PluginsPath); |
297 | else if(v == "QT_INSTALL_TRANSLATIONS") |
298 | - return QLibraryInfo::location(QLibraryInfo::TranslationsPath); |
299 | + ret = QLibraryInfo::location(QLibraryInfo::TranslationsPath); |
300 | else if(v == "QT_INSTALL_CONFIGURATION") |
301 | - return QLibraryInfo::location(QLibraryInfo::SettingsPath); |
302 | + ret = QLibraryInfo::location(QLibraryInfo::SettingsPath); |
303 | else if(v == "QT_INSTALL_EXAMPLES") |
304 | - return QLibraryInfo::location(QLibraryInfo::ExamplesPath); |
305 | + ret = QLibraryInfo::location(QLibraryInfo::ExamplesPath); |
306 | else if(v == "QT_INSTALL_DEMOS") |
307 | - return QLibraryInfo::location(QLibraryInfo::DemosPath); |
308 | - else if(v == "QMAKE_MKSPECS") |
309 | + ret = QLibraryInfo::location(QLibraryInfo::DemosPath); |
310 | + if(!ret.isEmpty()) |
311 | + return QDir::toNativeSeparators(ret); |
312 | + if(v == "QMAKE_MKSPECS") |
313 | return qmake_mkspec_paths().join(Option::target_mode == Option::TARG_WIN_MODE ? ";" : ":"); |
314 | else if(v == "QMAKE_VERSION") |
315 | return qmake_version(); |
316 | @@ -116,7 +119,7 @@ QMakeProperty::value(QString v, bool just_check) |
317 | int slash = v.lastIndexOf('/'); |
318 | QVariant var = settings->value(keyBase(slash == -1) + v); |
319 | bool ok = var.isValid(); |
320 | - QString ret = var.toString(); |
321 | + ret = var.toString(); |
322 | if(!ok) { |
323 | QString version = qmake_version(); |
324 | if(slash != -1) { |
325 | diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h |
326 | index ac2ad34..58d7df0 100644 |
327 | --- a/src/corelib/global/qnamespace.h |
328 | +++ b/src/corelib/global/qnamespace.h |
329 | @@ -895,12 +895,10 @@ public: |
330 | Key_Dead_Horn = 0x01001262, |
331 | |
332 | // multimedia/internet keys - ignored by default - see QKeyEvent c'tor |
333 | - |
334 | Key_Back = 0x01000061, |
335 | Key_Forward = 0x01000062, |
336 | Key_Stop = 0x01000063, |
337 | Key_Refresh = 0x01000064, |
338 | - |
339 | Key_VolumeDown = 0x01000070, |
340 | Key_VolumeMute = 0x01000071, |
341 | Key_VolumeUp = 0x01000072, |
342 | @@ -909,7 +907,6 @@ public: |
343 | Key_BassDown = 0x01000075, |
344 | Key_TrebleUp = 0x01000076, |
345 | Key_TrebleDown = 0x01000077, |
346 | - |
347 | Key_MediaPlay = 0x01000080, |
348 | Key_MediaStop = 0x01000081, |
349 | Key_MediaPrevious = 0x01000082, |
350 | @@ -918,13 +915,11 @@ public: |
351 | #endif |
352 | Key_MediaNext = 0x01000083, |
353 | Key_MediaRecord = 0x01000084, |
354 | - |
355 | Key_HomePage = 0x01000090, |
356 | Key_Favorites = 0x01000091, |
357 | Key_Search = 0x01000092, |
358 | Key_Standby = 0x01000093, |
359 | Key_OpenUrl = 0x01000094, |
360 | - |
361 | Key_LaunchMail = 0x010000a0, |
362 | Key_LaunchMedia = 0x010000a1, |
363 | Key_Launch0 = 0x010000a2, |
364 | @@ -943,6 +938,98 @@ public: |
365 | Key_LaunchD = 0x010000af, |
366 | Key_LaunchE = 0x010000b0, |
367 | Key_LaunchF = 0x010000b1, |
368 | + Key_MonBrightnessUp = 0x010000b2, |
369 | + Key_MonBrightnessDown = 0x010000b3, |
370 | + Key_KeyboardLightOnOff = 0x010000b4, |
371 | + Key_KeyboardBrightnessUp = 0x010000b5, |
372 | + Key_KeyboardBrightnessDown = 0x010000b6, |
373 | + Key_PowerOff = 0x010000b7, |
374 | + Key_WakeUp = 0x010000b8, |
375 | + Key_Eject = 0x010000b9, |
376 | + Key_ScreenSaver = 0x010000ba, |
377 | + Key_WWW = 0x010000bb, |
378 | + Key_Memo = 0x010000bc, |
379 | + Key_LightBulb = 0x010000bd, |
380 | + Key_Shop = 0x010000be, |
381 | + Key_History = 0x010000bf, |
382 | + Key_AddFavorite = 0x010000c0, |
383 | + Key_HotLinks = 0x010000c1, |
384 | + Key_BrightnessAdjust = 0x010000c2, |
385 | + Key_Finance = 0x010000c3, |
386 | + Key_Community = 0x010000c4, |
387 | + Key_AudioRewind = 0x010000c5, |
388 | + Key_BackForward = 0x010000c6, |
389 | + Key_ApplicationLeft = 0x010000c7, |
390 | + Key_ApplicationRight = 0x010000c8, |
391 | + Key_Book = 0x010000c9, |
392 | + Key_CD = 0x010000ca, |
393 | + Key_Calculator = 0x010000cb, |
394 | + Key_ToDoList = 0x010000cc, |
395 | + Key_ClearGrab = 0x010000cd, |
396 | + Key_Close = 0x010000ce, |
397 | + Key_Copy = 0x010000cf, |
398 | + Key_Cut = 0x010000d0, |
399 | + Key_Display = 0x010000d1, |
400 | + Key_DOS = 0x010000d2, |
401 | + Key_Documents = 0x010000d3, |
402 | + Key_Excel = 0x010000d4, |
403 | + Key_Explorer = 0x010000d5, |
404 | + Key_Game = 0x010000d6, |
405 | + Key_Go = 0x010000d7, |
406 | + Key_iTouch = 0x010000d8, |
407 | + Key_LogOff = 0x010000d9, |
408 | + Key_Market = 0x010000da, |
409 | + Key_Meeting = 0x010000db, |
410 | + Key_MenuKB = 0x010000dc, |
411 | + Key_MenuPB = 0x010000dd, |
412 | + Key_MySites = 0x010000de, |
413 | + Key_News = 0x010000df, |
414 | + Key_OfficeHome = 0x010000e0, |
415 | + Key_Option = 0x010000e1, |
416 | + Key_Paste = 0x010000e2, |
417 | + Key_Phone = 0x010000e3, |
418 | + Key_Calendar = 0x010000e4, |
419 | + Key_Reply = 0x010000e5, |
420 | + Key_Reload = 0x010000e6, |
421 | + Key_RotateWindows = 0x010000e7, |
422 | + Key_RotationPB = 0x010000e8, |
423 | + Key_RotationKB = 0x010000e9, |
424 | + Key_Save = 0x010000ea, |
425 | + Key_Send = 0x010000eb, |
426 | + Key_Spell = 0x010000ec, |
427 | + Key_SplitScreen = 0x010000ed, |
428 | + Key_Support = 0x010000ee, |
429 | + Key_TaskPane = 0x010000ef, |
430 | + Key_Terminal = 0x010000f0, |
431 | + Key_Tools = 0x010000f1, |
432 | + Key_Travel = 0x010000f2, |
433 | + Key_Video = 0x010000f3, |
434 | + Key_Word = 0x010000f4, |
435 | + Key_Xfer = 0x010000f5, |
436 | + Key_ZoomIn = 0x010000f6, |
437 | + Key_ZoomOut = 0x010000f7, |
438 | + Key_Away = 0x010000f8, |
439 | + Key_Messenger = 0x010000f9, |
440 | + Key_WebCam = 0x010000fa, |
441 | + Key_MailForward = 0x010000fb, |
442 | + Key_Pictures = 0x010000fc, |
443 | + Key_Music = 0x010000fd, |
444 | + Key_Battery = 0x010000fe, |
445 | + Key_Bluetooth = 0x010000ff, |
446 | + Key_WLAN = 0x01000100, |
447 | + Key_UWB = 0x01000101, |
448 | + Key_AudioForward = 0x01000102, |
449 | + Key_AudioRepeat = 0x01000103, |
450 | + Key_AudioRandomPlay = 0x01000104, |
451 | + Key_Subtitle = 0x01000105, |
452 | + Key_AudioCycleTrack = 0x01000106, |
453 | + Key_Time = 0x01000107, |
454 | + Key_Hibernate = 0x01000108, |
455 | + Key_View = 0x01000109, |
456 | + Key_TopMenu = 0x0100010a, |
457 | + Key_PowerDown = 0x0100010b, |
458 | + Key_Suspend = 0x0100010c, |
459 | + Key_ContrastAdjust = 0x0100010d, |
460 | |
461 | Key_MediaLast = 0x0100ffff, |
462 | |
463 | diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp |
464 | index 87e9728..7f6dbb6 100644 |
465 | --- a/src/corelib/kernel/qeventdispatcher_glib.cpp |
466 | +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp |
467 | @@ -127,16 +127,11 @@ struct GTimerSource |
468 | GSource source; |
469 | QTimerInfoList timerList; |
470 | QEventLoop::ProcessEventsFlags processEventsFlags; |
471 | + bool runWithIdlePriority; |
472 | }; |
473 | |
474 | -static gboolean timerSourcePrepare(GSource *source, gint *timeout) |
475 | +static gboolean timerSourcePrepareHelper(GTimerSource *src, gint *timeout) |
476 | { |
477 | - gint dummy; |
478 | - if (!timeout) |
479 | - timeout = &dummy; |
480 | - |
481 | - GTimerSource *src = reinterpret_cast<GTimerSource *>(source); |
482 | - |
483 | timeval tv = { 0l, 0l }; |
484 | if (!(src->processEventsFlags & QEventLoop::X11ExcludeTimers) && src->timerList.timerWait(tv)) |
485 | *timeout = (tv.tv_sec * 1000) + (tv.tv_usec / 1000); |
486 | @@ -146,10 +141,8 @@ static gboolean timerSourcePrepare(GSource *source, gint *timeout) |
487 | return (*timeout == 0); |
488 | } |
489 | |
490 | -static gboolean timerSourceCheck(GSource *source) |
491 | +static gboolean timerSourceCheckHelper(GTimerSource *src) |
492 | { |
493 | - GTimerSource *src = reinterpret_cast<GTimerSource *>(source); |
494 | - |
495 | if (src->timerList.isEmpty() |
496 | || (src->processEventsFlags & QEventLoop::X11ExcludeTimers)) |
497 | return false; |
498 | @@ -160,9 +153,35 @@ static gboolean timerSourceCheck(GSource *source) |
499 | return true; |
500 | } |
501 | |
502 | +static gboolean timerSourcePrepare(GSource *source, gint *timeout) |
503 | +{ |
504 | + gint dummy; |
505 | + if (!timeout) |
506 | + timeout = &dummy; |
507 | + |
508 | + GTimerSource *src = reinterpret_cast<GTimerSource *>(source); |
509 | + if (src->runWithIdlePriority) { |
510 | + if (timeout) |
511 | + *timeout = -1; |
512 | + return false; |
513 | + } |
514 | + |
515 | + return timerSourcePrepareHelper(src, timeout); |
516 | +} |
517 | + |
518 | +static gboolean timerSourceCheck(GSource *source) |
519 | +{ |
520 | + GTimerSource *src = reinterpret_cast<GTimerSource *>(source); |
521 | + if (src->runWithIdlePriority) |
522 | + return false; |
523 | + return timerSourceCheckHelper(src); |
524 | +} |
525 | + |
526 | static gboolean timerSourceDispatch(GSource *source, GSourceFunc, gpointer) |
527 | { |
528 | - (void) reinterpret_cast<GTimerSource *>(source)->timerList.activateTimers(); |
529 | + GTimerSource *timerSource = reinterpret_cast<GTimerSource *>(source); |
530 | + timerSource->runWithIdlePriority = true; |
531 | + (void) timerSource->timerList.activateTimers(); |
532 | return true; // ??? don't remove, right again? |
533 | } |
534 | |
535 | @@ -175,6 +194,53 @@ static GSourceFuncs timerSourceFuncs = { |
536 | NULL |
537 | }; |
538 | |
539 | +struct GIdleTimerSource |
540 | +{ |
541 | + GSource source; |
542 | + GTimerSource *timerSource; |
543 | +}; |
544 | + |
545 | +static gboolean idleTimerSourcePrepare(GSource *source, gint *timeout) |
546 | +{ |
547 | + GIdleTimerSource *idleTimerSource = reinterpret_cast<GIdleTimerSource *>(source); |
548 | + GTimerSource *timerSource = idleTimerSource->timerSource; |
549 | + if (!timerSource->runWithIdlePriority) { |
550 | + // Yield to the normal priority timer source |
551 | + if (timeout) |
552 | + *timeout = -1; |
553 | + return false; |
554 | + } |
555 | + |
556 | + return timerSourcePrepareHelper(timerSource, timeout); |
557 | +} |
558 | + |
559 | +static gboolean idleTimerSourceCheck(GSource *source) |
560 | +{ |
561 | + GIdleTimerSource *idleTimerSource = reinterpret_cast<GIdleTimerSource *>(source); |
562 | + GTimerSource *timerSource = idleTimerSource->timerSource; |
563 | + if (!timerSource->runWithIdlePriority) { |
564 | + // Yield to the normal priority timer source |
565 | + return false; |
566 | + } |
567 | + return timerSourceCheckHelper(timerSource); |
568 | +} |
569 | + |
570 | +static gboolean idleTimerSourceDispatch(GSource *source, GSourceFunc, gpointer) |
571 | +{ |
572 | + GTimerSource *timerSource = reinterpret_cast<GIdleTimerSource *>(source)->timerSource; |
573 | + (void) timerSourceDispatch(&timerSource->source, 0, 0); |
574 | + return true; |
575 | +} |
576 | + |
577 | +static GSourceFuncs idleTimerSourceFuncs = { |
578 | + idleTimerSourcePrepare, |
579 | + idleTimerSourceCheck, |
580 | + idleTimerSourceDispatch, |
581 | + NULL, |
582 | + NULL, |
583 | + NULL |
584 | +}; |
585 | + |
586 | struct GPostEventSource |
587 | { |
588 | GSource source; |
589 | @@ -235,14 +301,15 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context) |
590 | g_main_context_ref(mainContext); |
591 | } else { |
592 | QCoreApplication *app = QCoreApplication::instance(); |
593 | - if (app && QThread::currentThread() == app->thread()) { |
594 | - mainContext = g_main_context_default(); |
595 | - g_main_context_ref(mainContext); |
596 | - } else { |
597 | - mainContext = g_main_context_new(); |
598 | - } |
599 | + if (app && QThread::currentThread() == app->thread()) { |
600 | + mainContext = g_main_context_default(); |
601 | + g_main_context_ref(mainContext); |
602 | + } else { |
603 | + mainContext = g_main_context_new(); |
604 | + } |
605 | } |
606 | |
607 | + // setup post event source |
608 | postEventSource = reinterpret_cast<GPostEventSource *>(g_source_new(&postEventSourceFuncs, |
609 | sizeof(GPostEventSource))); |
610 | postEventSource->serialNumber = 1; |
611 | @@ -257,14 +324,21 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context) |
612 | g_source_set_can_recurse(&socketNotifierSource->source, true); |
613 | g_source_attach(&socketNotifierSource->source, mainContext); |
614 | |
615 | - // setup timerSource |
616 | + // setup normal and idle timer sources |
617 | timerSource = reinterpret_cast<GTimerSource *>(g_source_new(&timerSourceFuncs, |
618 | sizeof(GTimerSource))); |
619 | (void) new (&timerSource->timerList) QTimerInfoList(); |
620 | timerSource->processEventsFlags = QEventLoop::AllEvents; |
621 | + timerSource->runWithIdlePriority = false; |
622 | g_source_set_can_recurse(&timerSource->source, true); |
623 | - g_source_set_priority(&timerSource->source, G_PRIORITY_DEFAULT_IDLE); |
624 | g_source_attach(&timerSource->source, mainContext); |
625 | + |
626 | + idleTimerSource = reinterpret_cast<GIdleTimerSource *>(g_source_new(&idleTimerSourceFuncs, |
627 | + sizeof(GIdleTimerSource))); |
628 | + idleTimerSource->timerSource = timerSource; |
629 | + g_source_set_can_recurse(&idleTimerSource->source, true); |
630 | + g_source_set_priority(&idleTimerSource->source, G_PRIORITY_DEFAULT_IDLE); |
631 | + g_source_attach(&idleTimerSource->source, mainContext); |
632 | } |
633 | |
634 | QEventDispatcherGlib::QEventDispatcherGlib(QObject *parent) |
635 | @@ -272,12 +346,9 @@ QEventDispatcherGlib::QEventDispatcherGlib(QObject *parent) |
636 | { |
637 | } |
638 | |
639 | -QEventDispatcherGlib::QEventDispatcherGlib(GMainContext *mainContext, |
640 | - QObject *parent) |
641 | - : QAbstractEventDispatcher(*(new QEventDispatcherGlibPrivate(mainContext)), |
642 | - parent) |
643 | -{ |
644 | -} |
645 | +QEventDispatcherGlib::QEventDispatcherGlib(GMainContext *mainContext, QObject *parent) |
646 | + : QAbstractEventDispatcher(*(new QEventDispatcherGlibPrivate(mainContext)), parent) |
647 | +{ } |
648 | |
649 | QEventDispatcherGlib::~QEventDispatcherGlib() |
650 | { |
651 | @@ -289,6 +360,9 @@ QEventDispatcherGlib::~QEventDispatcherGlib() |
652 | g_source_destroy(&d->timerSource->source); |
653 | g_source_unref(&d->timerSource->source); |
654 | d->timerSource = 0; |
655 | + g_source_destroy(&d->idleTimerSource->source); |
656 | + g_source_unref(&d->idleTimerSource->source); |
657 | + d->idleTimerSource = 0; |
658 | |
659 | // destroy socket notifier source |
660 | for (int i = 0; i < d->socketNotifierSource->pollfds.count(); ++i) { |
661 | @@ -324,11 +398,16 @@ bool QEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) |
662 | // tell postEventSourcePrepare() and timerSource about any new flags |
663 | QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; |
664 | d->timerSource->processEventsFlags = flags; |
665 | - |
666 | + |
667 | + if (!(flags & QEventLoop::EventLoopExec)) { |
668 | + // force timers to be sent at normal priority |
669 | + d->timerSource->runWithIdlePriority = false; |
670 | + } |
671 | + |
672 | bool result = g_main_context_iteration(d->mainContext, canWait); |
673 | while (!result && canWait) |
674 | result = g_main_context_iteration(d->mainContext, canWait); |
675 | - |
676 | + |
677 | d->timerSource->processEventsFlags = savedFlags; |
678 | |
679 | if (canWait) |
680 | diff --git a/src/corelib/kernel/qeventdispatcher_glib_p.h b/src/corelib/kernel/qeventdispatcher_glib_p.h |
681 | index eb7fb75..4103aa3 100644 |
682 | --- a/src/corelib/kernel/qeventdispatcher_glib_p.h |
683 | +++ b/src/corelib/kernel/qeventdispatcher_glib_p.h |
684 | @@ -98,6 +98,7 @@ protected: |
685 | struct GPostEventSource; |
686 | struct GSocketNotifierSource; |
687 | struct GTimerSource; |
688 | +struct GIdleTimerSource; |
689 | |
690 | class Q_CORE_EXPORT QEventDispatcherGlibPrivate : public QAbstractEventDispatcherPrivate |
691 | { |
692 | @@ -108,6 +109,7 @@ public: |
693 | GPostEventSource *postEventSource; |
694 | GSocketNotifierSource *socketNotifierSource; |
695 | GTimerSource *timerSource; |
696 | + GIdleTimerSource *idleTimerSource; |
697 | }; |
698 | |
699 | QT_END_NAMESPACE |
700 | diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp |
701 | index 897bb49..903b0eb 100644 |
702 | --- a/src/corelib/kernel/qeventdispatcher_unix.cpp |
703 | +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp |
704 | @@ -423,10 +423,10 @@ bool QTimerInfoList::timerWait(timeval &tm) |
705 | // Find first waiting timer not already active |
706 | QTimerInfo *t = 0; |
707 | for (QTimerInfoList::const_iterator it = constBegin(); it != constEnd(); ++it) { |
708 | - if (!(*it)->inTimerEvent) { |
709 | - t = *it; |
710 | - break; |
711 | - } |
712 | + if (!(*it)->inTimerEvent) { |
713 | + t = *it; |
714 | + break; |
715 | + } |
716 | } |
717 | |
718 | if (!t) |
719 | diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp |
720 | index 1ed0332..089ddfc 100644 |
721 | --- a/src/corelib/kernel/qobject.cpp |
722 | +++ b/src/corelib/kernel/qobject.cpp |
723 | @@ -986,8 +986,16 @@ void QObject::setObjectName(const QString &name) |
724 | { |
725 | Q_D(QObject); |
726 | d->objectName = name; |
727 | +#if defined(Q_WS_X11) |
728 | + d->checkWindowRole(); |
729 | +#endif |
730 | } |
731 | |
732 | +#if defined(Q_WS_X11) |
733 | +void QObjectPrivate::checkWindowRole() |
734 | +{ |
735 | +} |
736 | +#endif |
737 | |
738 | #ifdef QT3_SUPPORT |
739 | /*! \internal |
740 | diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h |
741 | index 6ca4dc8..1551472 100644 |
742 | --- a/src/corelib/kernel/qobject_p.h |
743 | +++ b/src/corelib/kernel/qobject_p.h |
744 | @@ -83,7 +83,9 @@ extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set; |
745 | |
746 | inline QObjectData::~QObjectData() {} |
747 | |
748 | -enum { QObjectPrivateVersion = QT_VERSION }; |
749 | +// add 0x1000000 to mark it as qt-copy version, with possible modifications |
750 | +// in some Q*Private class |
751 | +enum { QObjectPrivateVersion = QT_VERSION + 0x1000000 }; |
752 | |
753 | class Q_CORE_EXPORT QObjectPrivate : public QObjectData |
754 | { |
755 | @@ -144,6 +146,9 @@ public: |
756 | mutable quint32 connectedSignals; |
757 | |
758 | QString objectName; |
759 | +#if defined(Q_WS_X11) |
760 | + virtual void checkWindowRole(); |
761 | +#endif |
762 | |
763 | // Note: you must hold the signalSlotLock() before accessing the lists below or calling the functions |
764 | struct Connection |
765 | diff --git a/src/dbus/qdbusinternalfilters.cpp b/src/dbus/qdbusinternalfilters.cpp |
766 | index 828e427..8bbdd7b 100644 |
767 | --- a/src/dbus/qdbusinternalfilters.cpp |
768 | +++ b/src/dbus/qdbusinternalfilters.cpp |
769 | @@ -274,9 +274,23 @@ QDBusMessage qDBusPropertySet(const QDBusConnectionPrivate::ObjectTreeNode &node |
770 | QDBusAdaptorConnector::AdaptorMap::ConstIterator it; |
771 | it = qLowerBound(connector->adaptors.constBegin(), connector->adaptors.constEnd(), |
772 | interface_name); |
773 | - if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface)) |
774 | + if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface)) { |
775 | + if (value.userType() == qMetaTypeId<QDBusArgument>()) { |
776 | + QDBusArgument valueArg = qvariant_cast<QDBusArgument>(value); |
777 | + if (valueArg.currentType() != -1) { |
778 | + int mid = it->adaptor->metaObject()->property(it->adaptor->metaObject()->indexOfProperty(property_name)).userType(); |
779 | + void *null = 0; |
780 | + QVariant valueStore(mid, null); |
781 | + QDBusMetaType::demarshall(valueArg, mid, valueStore.data()); |
782 | + |
783 | + if (it->adaptor->setProperty(property_name, valueStore)) |
784 | + return msg.createReply(); |
785 | + } |
786 | + } |
787 | + |
788 | if (it->adaptor->setProperty(property_name, value)) |
789 | return msg.createReply(); |
790 | + } |
791 | } |
792 | } |
793 | |
794 | diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp |
795 | index 50088df..c1bc794 100644 |
796 | --- a/src/gui/image/qnativeimage.cpp |
797 | +++ b/src/gui/image/qnativeimage.cpp |
798 | @@ -144,7 +144,7 @@ QImage::Format QNativeImage::systemFormat() |
799 | #elif defined(Q_WS_X11) && !defined(QT_NO_MITSHM) |
800 | |
801 | QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* isTextBuffer */, QWidget *widget) |
802 | - : xshmimg(0), xshmpm(0) |
803 | + : xshmimg(0) |
804 | { |
805 | if (!X11->use_mitshm) { |
806 | image = QImage(width, height, format); |
807 | @@ -195,11 +195,6 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* |
808 | shmctl(xshminfo.shmid, IPC_RMID, 0); |
809 | return; |
810 | } |
811 | - xshmpm = XShmCreatePixmap(X11->display, DefaultRootWindow(X11->display), xshmimg->data, |
812 | - &xshminfo, width, height, dd); |
813 | - if (!xshmpm) { |
814 | - qWarning() << "QNativeImage: Unable to create shared Pixmap."; |
815 | - } |
816 | } |
817 | |
818 | |
819 | @@ -208,10 +203,6 @@ QNativeImage::~QNativeImage() |
820 | if (!xshmimg) |
821 | return; |
822 | |
823 | - if (xshmpm) { |
824 | - XFreePixmap(X11->display, xshmpm); |
825 | - xshmpm = 0; |
826 | - } |
827 | XShmDetach(X11->display, &xshminfo); |
828 | xshmimg->data = 0; |
829 | XDestroyImage(xshmimg); |
830 | diff --git a/src/gui/image/qnativeimage_p.h b/src/gui/image/qnativeimage_p.h |
831 | index 0f5dc8b..cd3cc3b 100644 |
832 | --- a/src/gui/image/qnativeimage_p.h |
833 | +++ b/src/gui/image/qnativeimage_p.h |
834 | @@ -90,7 +90,6 @@ public: |
835 | |
836 | #elif defined(Q_WS_X11) && !defined(QT_NO_MITSHM) |
837 | XImage *xshmimg; |
838 | - Pixmap xshmpm; |
839 | XShmSegmentInfo xshminfo; |
840 | |
841 | #elif defined(Q_WS_MAC) |
842 | diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp |
843 | index a69ab6a..93f4fd8 100644 |
844 | --- a/src/gui/itemviews/qtreeview.cpp |
845 | +++ b/src/gui/itemviews/qtreeview.cpp |
846 | @@ -3577,7 +3577,7 @@ QList<QPair<int, int> > QTreeViewPrivate::columnRanges(const QModelIndex &topInd |
847 | current.first = -2; // -1 is not enough because -1+1 = 0 |
848 | current.second = -2; |
849 | foreach (int logicalColumn, logicalIndexes) { |
850 | - if (current.second + 1 != logicalColumn) { |
851 | + if (current.second + 1 != logicalColumn && !header->isSectionHidden(current.second + 1)) { |
852 | if (current.first != -2) { |
853 | //let's save the current one |
854 | ret += current; |
855 | diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp |
856 | index 343c71b..45e2b49 100644 |
857 | --- a/src/gui/kernel/qapplication_x11.cpp |
858 | +++ b/src/gui/kernel/qapplication_x11.cpp |
859 | @@ -1959,7 +1959,7 @@ void qt_init(QApplicationPrivate *priv, int, |
860 | bool local = displayName.isEmpty() || displayName.lastIndexOf(QLatin1Char(':')) == 0; |
861 | if (local && (qgetenv("QT_X11_NO_MITSHM").toInt() == 0)) { |
862 | Visual *defaultVisual = DefaultVisual(X11->display, DefaultScreen(X11->display)); |
863 | - X11->use_mitshm = mitshm_pixmaps && ((defaultVisual->red_mask == 0xff0000 |
864 | + X11->use_mitshm = ((defaultVisual->red_mask == 0xff0000 |
865 | || defaultVisual->red_mask == 0xf800) |
866 | && (defaultVisual->green_mask == 0xff00 |
867 | || defaultVisual->green_mask == 0x7e0) |
868 | diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp |
869 | index 8daa881..37d12c2 100644 |
870 | --- a/src/gui/kernel/qkeymapper_x11.cpp |
871 | +++ b/src/gui/kernel/qkeymapper_x11.cpp |
872 | @@ -714,47 +714,144 @@ extern bool qt_sm_blockUserInput; |
873 | #define XK_KP_Delete 0xFF9F |
874 | #endif |
875 | |
876 | -// the next lines are taken from XFree > 4.0 (X11/XF86keysyms.h), defining some special |
877 | +// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special |
878 | // multimedia keys. They are included here as not every system has them. |
879 | -#define XF86XK_Standby 0x1008FF10 |
880 | -#define XF86XK_AudioLowerVolume 0x1008FF11 |
881 | -#define XF86XK_AudioMute 0x1008FF12 |
882 | -#define XF86XK_AudioRaiseVolume 0x1008FF13 |
883 | -#define XF86XK_AudioPlay 0x1008FF14 |
884 | -#define XF86XK_AudioStop 0x1008FF15 |
885 | -#define XF86XK_AudioPrev 0x1008FF16 |
886 | -#define XF86XK_AudioNext 0x1008FF17 |
887 | -#define XF86XK_HomePage 0x1008FF18 |
888 | -#define XF86XK_Calculator 0x1008FF1D |
889 | -#define XF86XK_Mail 0x1008FF19 |
890 | -#define XF86XK_Start 0x1008FF1A |
891 | -#define XF86XK_Search 0x1008FF1B |
892 | -#define XF86XK_AudioRecord 0x1008FF1C |
893 | -#define XF86XK_Back 0x1008FF26 |
894 | -#define XF86XK_Forward 0x1008FF27 |
895 | -#define XF86XK_Stop 0x1008FF28 |
896 | -#define XF86XK_Refresh 0x1008FF29 |
897 | -#define XF86XK_Favorites 0x1008FF30 |
898 | -#define XF86XK_AudioPause 0x1008FF31 |
899 | -#define XF86XK_AudioMedia 0x1008FF32 |
900 | -#define XF86XK_MyComputer 0x1008FF33 |
901 | -#define XF86XK_OpenURL 0x1008FF38 |
902 | -#define XF86XK_Launch0 0x1008FF40 |
903 | -#define XF86XK_Launch1 0x1008FF41 |
904 | -#define XF86XK_Launch2 0x1008FF42 |
905 | -#define XF86XK_Launch3 0x1008FF43 |
906 | -#define XF86XK_Launch4 0x1008FF44 |
907 | -#define XF86XK_Launch5 0x1008FF45 |
908 | -#define XF86XK_Launch6 0x1008FF46 |
909 | -#define XF86XK_Launch7 0x1008FF47 |
910 | -#define XF86XK_Launch8 0x1008FF48 |
911 | -#define XF86XK_Launch9 0x1008FF49 |
912 | -#define XF86XK_LaunchA 0x1008FF4A |
913 | -#define XF86XK_LaunchB 0x1008FF4B |
914 | -#define XF86XK_LaunchC 0x1008FF4C |
915 | -#define XF86XK_LaunchD 0x1008FF4D |
916 | -#define XF86XK_LaunchE 0x1008FF4E |
917 | -#define XF86XK_LaunchF 0x1008FF4F |
918 | +#define XF86XK_MonBrightnessUp 0x1008FF02 |
919 | +#define XF86XK_MonBrightnessDown 0x1008FF03 |
920 | +#define XF86XK_KbdLightOnOff 0x1008FF04 |
921 | +#define XF86XK_KbdBrightnessUp 0x1008FF05 |
922 | +#define XF86XK_KbdBrightnessDown 0x1008FF06 |
923 | +#define XF86XK_Standby 0x1008FF10 |
924 | +#define XF86XK_AudioLowerVolume 0x1008FF11 |
925 | +#define XF86XK_AudioMute 0x1008FF12 |
926 | +#define XF86XK_AudioRaiseVolume 0x1008FF13 |
927 | +#define XF86XK_AudioPlay 0x1008FF14 |
928 | +#define XF86XK_AudioStop 0x1008FF15 |
929 | +#define XF86XK_AudioPrev 0x1008FF16 |
930 | +#define XF86XK_AudioNext 0x1008FF17 |
931 | +#define XF86XK_HomePage 0x1008FF18 |
932 | +#define XF86XK_Mail 0x1008FF19 |
933 | +#define XF86XK_Start 0x1008FF1A |
934 | +#define XF86XK_Search 0x1008FF1B |
935 | +#define XF86XK_AudioRecord 0x1008FF1C |
936 | +#define XF86XK_Calculator 0x1008FF1D |
937 | +#define XF86XK_Memo 0x1008FF1E |
938 | +#define XF86XK_ToDoList 0x1008FF1F |
939 | +#define XF86XK_Calendar 0x1008FF20 |
940 | +#define XF86XK_PowerDown 0x1008FF21 |
941 | +#define XF86XK_ContrastAdjust 0x1008FF22 |
942 | +#define XF86XK_Back 0x1008FF26 |
943 | +#define XF86XK_Forward 0x1008FF27 |
944 | +#define XF86XK_Stop 0x1008FF28 |
945 | +#define XF86XK_Refresh 0x1008FF29 |
946 | +#define XF86XK_PowerOff 0x1008FF2A |
947 | +#define XF86XK_WakeUp 0x1008FF2B |
948 | +#define XF86XK_Eject 0x1008FF2C |
949 | +#define XF86XK_ScreenSaver 0x1008FF2D |
950 | +#define XF86XK_WWW 0x1008FF2E |
951 | +#define XF86XK_Sleep 0x1008FF2F |
952 | +#define XF86XK_Favorites 0x1008FF30 |
953 | +#define XF86XK_AudioPause 0x1008FF31 |
954 | +#define XF86XK_AudioMedia 0x1008FF32 |
955 | +#define XF86XK_MyComputer 0x1008FF33 |
956 | +#define XF86XK_LightBulb 0x1008FF35 |
957 | +#define XF86XK_Shop 0x1008FF36 |
958 | +#define XF86XK_History 0x1008FF37 |
959 | +#define XF86XK_OpenURL 0x1008FF38 |
960 | +#define XF86XK_AddFavorite 0x1008FF39 |
961 | +#define XF86XK_HotLinks 0x1008FF3A |
962 | +#define XF86XK_BrightnessAdjust 0x1008FF3B |
963 | +#define XF86XK_Finance 0x1008FF3C |
964 | +#define XF86XK_Community 0x1008FF3D |
965 | +#define XF86XK_AudioRewind 0x1008FF3E |
966 | +#define XF86XK_BackForward 0x1008FF3F |
967 | +#define XF86XK_Launch0 0x1008FF40 |
968 | +#define XF86XK_Launch1 0x1008FF41 |
969 | +#define XF86XK_Launch2 0x1008FF42 |
970 | +#define XF86XK_Launch3 0x1008FF43 |
971 | +#define XF86XK_Launch4 0x1008FF44 |
972 | +#define XF86XK_Launch5 0x1008FF45 |
973 | +#define XF86XK_Launch6 0x1008FF46 |
974 | +#define XF86XK_Launch7 0x1008FF47 |
975 | +#define XF86XK_Launch8 0x1008FF48 |
976 | +#define XF86XK_Launch9 0x1008FF49 |
977 | +#define XF86XK_LaunchA 0x1008FF4A |
978 | +#define XF86XK_LaunchB 0x1008FF4B |
979 | +#define XF86XK_LaunchC 0x1008FF4C |
980 | +#define XF86XK_LaunchD 0x1008FF4D |
981 | +#define XF86XK_LaunchE 0x1008FF4E |
982 | +#define XF86XK_LaunchF 0x1008FF4F |
983 | +#define XF86XK_ApplicationLeft 0x1008FF50 |
984 | +#define XF86XK_ApplicationRight 0x1008FF51 |
985 | +#define XF86XK_Book 0x1008FF52 |
986 | +#define XF86XK_CD 0x1008FF53 |
987 | +#define XF86XK_Calculater 0x1008FF54 |
988 | +#define XF86XK_Clear 0x1008FF55 |
989 | +#define XF86XK_ClearGrab 0x1008FE21 |
990 | +#define XF86XK_Close 0x1008FF56 |
991 | +#define XF86XK_Copy 0x1008FF57 |
992 | +#define XF86XK_Cut 0x1008FF58 |
993 | +#define XF86XK_Display 0x1008FF59 |
994 | +#define XF86XK_DOS 0x1008FF5A |
995 | +#define XF86XK_Documents 0x1008FF5B |
996 | +#define XF86XK_Excel 0x1008FF5C |
997 | +#define XF86XK_Explorer 0x1008FF5D |
998 | +#define XF86XK_Game 0x1008FF5E |
999 | +#define XF86XK_Go 0x1008FF5F |
1000 | +#define XF86XK_iTouch 0x1008FF60 |
1001 | +#define XF86XK_LogOff 0x1008FF61 |
1002 | +#define XF86XK_Market 0x1008FF62 |
1003 | +#define XF86XK_Meeting 0x1008FF63 |
1004 | +#define XF86XK_MenuKB 0x1008FF65 |
1005 | +#define XF86XK_MenuPB 0x1008FF66 |
1006 | +#define XF86XK_MySites 0x1008FF67 |
1007 | +#define XF86XK_News 0x1008FF69 |
1008 | +#define XF86XK_OfficeHome 0x1008FF6A |
1009 | +#define XF86XK_Option 0x1008FF6C |
1010 | +#define XF86XK_Paste 0x1008FF6D |
1011 | +#define XF86XK_Phone 0x1008FF6E |
1012 | +#define XF86XK_Reply 0x1008FF72 |
1013 | +#define XF86XK_Reload 0x1008FF73 |
1014 | +#define XF86XK_RotateWindows 0x1008FF74 |
1015 | +#define XF86XK_RotationPB 0x1008FF75 |
1016 | +#define XF86XK_RotationKB 0x1008FF76 |
1017 | +#define XF86XK_Save 0x1008FF77 |
1018 | +#define XF86XK_Send 0x1008FF7B |
1019 | +#define XF86XK_Spell 0x1008FF7C |
1020 | +#define XF86XK_SplitScreen 0x1008FF7D |
1021 | +#define XF86XK_Support 0x1008FF7E |
1022 | +#define XF86XK_TaskPane 0x1008FF7F |
1023 | +#define XF86XK_Terminal 0x1008FF80 |
1024 | +#define XF86XK_Tools 0x1008FF81 |
1025 | +#define XF86XK_Travel 0x1008FF82 |
1026 | +#define XF86XK_Video 0x1008FF87 |
1027 | +#define XF86XK_Word 0x1008FF89 |
1028 | +#define XF86XK_Xfer 0x1008FF8A |
1029 | +#define XF86XK_ZoomIn 0x1008FF8B |
1030 | +#define XF86XK_ZoomOut 0x1008FF8C |
1031 | +#define XF86XK_Away 0x1008FF8D |
1032 | +#define XF86XK_Messenger 0x1008FF8E |
1033 | +#define XF86XK_WebCam 0x1008FF8F |
1034 | +#define XF86XK_MailForward 0x1008FF90 |
1035 | +#define XF86XK_Pictures 0x1008FF91 |
1036 | +#define XF86XK_Music 0x1008FF92 |
1037 | +#define XF86XK_Battery 0x1008FF93 |
1038 | +#define XF86XK_Bluetooth 0x1008FF94 |
1039 | +#define XF86XK_WLAN 0x1008FF95 |
1040 | +#define XF86XK_UWB 0x1008FF96 |
1041 | +#define XF86XK_AudioForward 0x1008FF97 |
1042 | +#define XF86XK_AudioRepeat 0x1008FF98 |
1043 | +#define XF86XK_AudioRandomPlay 0x1008FF99 |
1044 | +#define XF86XK_Subtitle 0x1008FF9A |
1045 | +#define XF86XK_AudioCycleTrack 0x1008FF9B |
1046 | +#define XF86XK_Time 0x1008FF9F |
1047 | +#define XF86XK_Select 0x1008FFA0 |
1048 | +#define XF86XK_View 0x1008FFA1 |
1049 | +#define XF86XK_TopMenu 0x1008FFA2 |
1050 | +#define XF86XK_Suspend 0x1008FFA7 |
1051 | +#define XF86XK_Hibernate 0x1008FFA8 |
1052 | + |
1053 | + |
1054 | // end of XF86keysyms.h |
1055 | |
1056 | // Special keys used by Qtopia, mapped into the X11 private keypad range. |
1057 | @@ -942,10 +1039,8 @@ static const unsigned int KeyTbl[] = { |
1058 | XK_dead_hook, Qt::Key_Dead_Hook, |
1059 | XK_dead_horn, Qt::Key_Dead_Horn, |
1060 | |
1061 | - // Special multimedia keys |
1062 | - // currently only tested with MS internet keyboard |
1063 | - |
1064 | - // browsing keys |
1065 | + // Special keys from X.org - This include multimedia keys, |
1066 | + // wireless/bluetooth/uwb keys, special launcher keys, etc. |
1067 | XF86XK_Back, Qt::Key_Back, |
1068 | XF86XK_Forward, Qt::Key_Forward, |
1069 | XF86XK_Stop, Qt::Key_Stop, |
1070 | @@ -955,8 +1050,6 @@ static const unsigned int KeyTbl[] = { |
1071 | XF86XK_OpenURL, Qt::Key_OpenUrl, |
1072 | XF86XK_HomePage, Qt::Key_HomePage, |
1073 | XF86XK_Search, Qt::Key_Search, |
1074 | - |
1075 | - // media keys |
1076 | XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, |
1077 | XF86XK_AudioMute, Qt::Key_VolumeMute, |
1078 | XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, |
1079 | @@ -965,13 +1058,106 @@ static const unsigned int KeyTbl[] = { |
1080 | XF86XK_AudioPrev, Qt::Key_MediaPrevious, |
1081 | XF86XK_AudioNext, Qt::Key_MediaNext, |
1082 | XF86XK_AudioRecord, Qt::Key_MediaRecord, |
1083 | - |
1084 | - // launch keys |
1085 | XF86XK_Mail, Qt::Key_LaunchMail, |
1086 | XF86XK_MyComputer, Qt::Key_Launch0, |
1087 | - XF86XK_Calculator, Qt::Key_Launch1, |
1088 | + XF86XK_Calculator, Qt::Key_Calculator, |
1089 | + XF86XK_Memo, Qt::Key_Memo, |
1090 | + XF86XK_ToDoList, Qt::Key_ToDoList, |
1091 | + XF86XK_Calendar, Qt::Key_Calendar, |
1092 | + XF86XK_PowerDown, Qt::Key_PowerDown, |
1093 | + XF86XK_ContrastAdjust, Qt::Key_ContrastAdjust, |
1094 | XF86XK_Standby, Qt::Key_Standby, |
1095 | - |
1096 | + XF86XK_MonBrightnessUp, Qt::Key_MonBrightnessUp, |
1097 | + XF86XK_MonBrightnessDown, Qt::Key_MonBrightnessDown, |
1098 | + XF86XK_KbdLightOnOff, Qt::Key_KeyboardLightOnOff, |
1099 | + XF86XK_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp, |
1100 | + XF86XK_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown, |
1101 | + XF86XK_PowerOff, Qt::Key_PowerOff, |
1102 | + XF86XK_WakeUp, Qt::Key_WakeUp, |
1103 | + XF86XK_Eject, Qt::Key_Eject, |
1104 | + XF86XK_ScreenSaver, Qt::Key_ScreenSaver, |
1105 | + XF86XK_WWW, Qt::Key_WWW, |
1106 | + XF86XK_Sleep, Qt::Key_Sleep, |
1107 | + XF86XK_LightBulb, Qt::Key_LightBulb, |
1108 | + XF86XK_Shop, Qt::Key_Shop, |
1109 | + XF86XK_History, Qt::Key_History, |
1110 | + XF86XK_AddFavorite, Qt::Key_AddFavorite, |
1111 | + XF86XK_HotLinks, Qt::Key_HotLinks, |
1112 | + XF86XK_BrightnessAdjust, Qt::Key_BrightnessAdjust, |
1113 | + XF86XK_Finance, Qt::Key_Finance, |
1114 | + XF86XK_Community, Qt::Key_Community, |
1115 | + XF86XK_AudioRewind, Qt::Key_AudioRewind, |
1116 | + XF86XK_BackForward, Qt::Key_BackForward, |
1117 | + XF86XK_ApplicationLeft, Qt::Key_ApplicationLeft, |
1118 | + XF86XK_ApplicationRight, Qt::Key_ApplicationRight, |
1119 | + XF86XK_Book, Qt::Key_Book, |
1120 | + XF86XK_CD, Qt::Key_CD, |
1121 | + XF86XK_Calculater, Qt::Key_Calculator, |
1122 | + XF86XK_Clear, Qt::Key_Clear, |
1123 | + XF86XK_ClearGrab, Qt::Key_ClearGrab, |
1124 | + XF86XK_Close, Qt::Key_Close, |
1125 | + XF86XK_Copy, Qt::Key_Copy, |
1126 | + XF86XK_Cut, Qt::Key_Cut, |
1127 | + XF86XK_Display, Qt::Key_Display, |
1128 | + XF86XK_DOS, Qt::Key_DOS, |
1129 | + XF86XK_Documents, Qt::Key_Documents, |
1130 | + XF86XK_Excel, Qt::Key_Excel, |
1131 | + XF86XK_Explorer, Qt::Key_Explorer, |
1132 | + XF86XK_Game, Qt::Key_Game, |
1133 | + XF86XK_Go, Qt::Key_Go, |
1134 | + XF86XK_iTouch, Qt::Key_iTouch, |
1135 | + XF86XK_LogOff, Qt::Key_LogOff, |
1136 | + XF86XK_Market, Qt::Key_Market, |
1137 | + XF86XK_Meeting, Qt::Key_Meeting, |
1138 | + XF86XK_MenuKB, Qt::Key_MenuKB, |
1139 | + XF86XK_MenuPB, Qt::Key_MenuPB, |
1140 | + XF86XK_MySites, Qt::Key_MySites, |
1141 | + XF86XK_News, Qt::Key_News, |
1142 | + XF86XK_OfficeHome, Qt::Key_OfficeHome, |
1143 | + XF86XK_Option, Qt::Key_Option, |
1144 | + XF86XK_Paste, Qt::Key_Paste, |
1145 | + XF86XK_Phone, Qt::Key_Phone, |
1146 | + XF86XK_Reply, Qt::Key_Reply, |
1147 | + XF86XK_Reload, Qt::Key_Reload, |
1148 | + XF86XK_RotateWindows, Qt::Key_RotateWindows, |
1149 | + XF86XK_RotationPB, Qt::Key_RotationPB, |
1150 | + XF86XK_RotationKB, Qt::Key_RotationKB, |
1151 | + XF86XK_Save, Qt::Key_Save, |
1152 | + XF86XK_Send, Qt::Key_Send, |
1153 | + XF86XK_Spell, Qt::Key_Spell, |
1154 | + XF86XK_SplitScreen, Qt::Key_SplitScreen, |
1155 | + XF86XK_Support, Qt::Key_Support, |
1156 | + XF86XK_TaskPane, Qt::Key_TaskPane, |
1157 | + XF86XK_Terminal, Qt::Key_Terminal, |
1158 | + XF86XK_Tools, Qt::Key_Tools, |
1159 | + XF86XK_Travel, Qt::Key_Travel, |
1160 | + XF86XK_Video, Qt::Key_Video, |
1161 | + XF86XK_Word, Qt::Key_Word, |
1162 | + XF86XK_Xfer, Qt::Key_Xfer, |
1163 | + XF86XK_ZoomIn, Qt::Key_ZoomIn, |
1164 | + XF86XK_ZoomOut, Qt::Key_ZoomOut, |
1165 | + XF86XK_Away, Qt::Key_Away, |
1166 | + XF86XK_Messenger, Qt::Key_Messenger, |
1167 | + XF86XK_WebCam, Qt::Key_WebCam, |
1168 | + XF86XK_MailForward, Qt::Key_MailForward, |
1169 | + XF86XK_Pictures, Qt::Key_Pictures, |
1170 | + XF86XK_Music, Qt::Key_Music, |
1171 | + XF86XK_Battery, Qt::Key_Battery, |
1172 | + XF86XK_Bluetooth, Qt::Key_Bluetooth, |
1173 | + XF86XK_WLAN, Qt::Key_WLAN, |
1174 | + XF86XK_UWB, Qt::Key_UWB, |
1175 | + XF86XK_AudioForward, Qt::Key_AudioForward, |
1176 | + XF86XK_AudioRepeat, Qt::Key_AudioRepeat, |
1177 | + XF86XK_AudioRandomPlay, Qt::Key_AudioRandomPlay, |
1178 | + XF86XK_Subtitle, Qt::Key_Subtitle, |
1179 | + XF86XK_AudioCycleTrack, Qt::Key_AudioCycleTrack, |
1180 | + XF86XK_Time, Qt::Key_Time, |
1181 | + XF86XK_Select, Qt::Key_Select, |
1182 | + XF86XK_View, Qt::Key_View, |
1183 | + XF86XK_TopMenu, Qt::Key_TopMenu, |
1184 | + XF86XK_Bluetooth, Qt::Key_Bluetooth, |
1185 | + XF86XK_Suspend, Qt::Key_Suspend, |
1186 | + XF86XK_Hibernate, Qt::Key_Hibernate, |
1187 | XF86XK_Launch0, Qt::Key_Launch2, |
1188 | XF86XK_Launch1, Qt::Key_Launch3, |
1189 | XF86XK_Launch2, Qt::Key_Launch4, |
1190 | diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp |
1191 | index 03de530..97591a4 100644 |
1192 | --- a/src/gui/kernel/qkeysequence.cpp |
1193 | +++ b/src/gui/kernel/qkeysequence.cpp |
1194 | @@ -396,47 +396,139 @@ static const struct { |
1195 | { Qt::Key_Menu, QT_TRANSLATE_NOOP("QShortcut", "Menu") }, |
1196 | { Qt::Key_Help, QT_TRANSLATE_NOOP("QShortcut", "Help") }, |
1197 | |
1198 | - // Multimedia keys |
1199 | - { Qt::Key_Back, QT_TRANSLATE_NOOP("QShortcut", "Back") }, |
1200 | - { Qt::Key_Forward, QT_TRANSLATE_NOOP("QShortcut", "Forward") }, |
1201 | - { Qt::Key_Stop, QT_TRANSLATE_NOOP("QShortcut", "Stop") }, |
1202 | - { Qt::Key_Refresh, QT_TRANSLATE_NOOP("QShortcut", "Refresh") }, |
1203 | - { Qt::Key_VolumeDown, QT_TRANSLATE_NOOP("QShortcut", "Volume Down") }, |
1204 | - { Qt::Key_VolumeMute, QT_TRANSLATE_NOOP("QShortcut", "Volume Mute") }, |
1205 | - { Qt::Key_VolumeUp, QT_TRANSLATE_NOOP("QShortcut", "Volume Up") }, |
1206 | - { Qt::Key_BassBoost, QT_TRANSLATE_NOOP("QShortcut", "Bass Boost") }, |
1207 | - { Qt::Key_BassUp, QT_TRANSLATE_NOOP("QShortcut", "Bass Up") }, |
1208 | - { Qt::Key_BassDown, QT_TRANSLATE_NOOP("QShortcut", "Bass Down") }, |
1209 | - { Qt::Key_TrebleUp, QT_TRANSLATE_NOOP("QShortcut", "Treble Up") }, |
1210 | - { Qt::Key_TrebleDown, QT_TRANSLATE_NOOP("QShortcut", "Treble Down") }, |
1211 | - { Qt::Key_MediaPlay, QT_TRANSLATE_NOOP("QShortcut", "Media Play") }, |
1212 | - { Qt::Key_MediaStop, QT_TRANSLATE_NOOP("QShortcut", "Media Stop") }, |
1213 | - { Qt::Key_MediaPrevious,QT_TRANSLATE_NOOP("QShortcut", "Media Previous") }, |
1214 | - { Qt::Key_MediaNext, QT_TRANSLATE_NOOP("QShortcut", "Media Next") }, |
1215 | - { Qt::Key_MediaRecord, QT_TRANSLATE_NOOP("QShortcut", "Media Record") }, |
1216 | - { Qt::Key_HomePage, QT_TRANSLATE_NOOP("QShortcut", "Home Page") }, |
1217 | - { Qt::Key_Favorites, QT_TRANSLATE_NOOP("QShortcut", "Favorites") }, |
1218 | - { Qt::Key_Search, QT_TRANSLATE_NOOP("QShortcut", "Search") }, |
1219 | - { Qt::Key_Standby, QT_TRANSLATE_NOOP("QShortcut", "Standby") }, |
1220 | - { Qt::Key_OpenUrl, QT_TRANSLATE_NOOP("QShortcut", "Open URL") }, |
1221 | - { Qt::Key_LaunchMail, QT_TRANSLATE_NOOP("QShortcut", "Launch Mail") }, |
1222 | - { Qt::Key_LaunchMedia, QT_TRANSLATE_NOOP("QShortcut", "Launch Media") }, |
1223 | - { Qt::Key_Launch0, QT_TRANSLATE_NOOP("QShortcut", "Launch (0)") }, |
1224 | - { Qt::Key_Launch1, QT_TRANSLATE_NOOP("QShortcut", "Launch (1)") }, |
1225 | - { Qt::Key_Launch2, QT_TRANSLATE_NOOP("QShortcut", "Launch (2)") }, |
1226 | - { Qt::Key_Launch3, QT_TRANSLATE_NOOP("QShortcut", "Launch (3)") }, |
1227 | - { Qt::Key_Launch4, QT_TRANSLATE_NOOP("QShortcut", "Launch (4)") }, |
1228 | - { Qt::Key_Launch5, QT_TRANSLATE_NOOP("QShortcut", "Launch (5)") }, |
1229 | - { Qt::Key_Launch6, QT_TRANSLATE_NOOP("QShortcut", "Launch (6)") }, |
1230 | - { Qt::Key_Launch7, QT_TRANSLATE_NOOP("QShortcut", "Launch (7)") }, |
1231 | - { Qt::Key_Launch8, QT_TRANSLATE_NOOP("QShortcut", "Launch (8)") }, |
1232 | - { Qt::Key_Launch9, QT_TRANSLATE_NOOP("QShortcut", "Launch (9)") }, |
1233 | - { Qt::Key_LaunchA, QT_TRANSLATE_NOOP("QShortcut", "Launch (A)") }, |
1234 | - { Qt::Key_LaunchB, QT_TRANSLATE_NOOP("QShortcut", "Launch (B)") }, |
1235 | - { Qt::Key_LaunchC, QT_TRANSLATE_NOOP("QShortcut", "Launch (C)") }, |
1236 | - { Qt::Key_LaunchD, QT_TRANSLATE_NOOP("QShortcut", "Launch (D)") }, |
1237 | - { Qt::Key_LaunchE, QT_TRANSLATE_NOOP("QShortcut", "Launch (E)") }, |
1238 | - { Qt::Key_LaunchF, QT_TRANSLATE_NOOP("QShortcut", "Launch (F)") }, |
1239 | + // Special keys |
1240 | + // Includes multimedia, launcher, lan keys ( bluetooth, wireless ) |
1241 | + // window navigation |
1242 | + { Qt::Key_Back, QT_TRANSLATE_NOOP("QShortcut", "Back") }, |
1243 | + { Qt::Key_Forward, QT_TRANSLATE_NOOP("QShortcut", "Forward") }, |
1244 | + { Qt::Key_Stop, QT_TRANSLATE_NOOP("QShortcut", "Stop") }, |
1245 | + { Qt::Key_Refresh, QT_TRANSLATE_NOOP("QShortcut", "Refresh") }, |
1246 | + { Qt::Key_VolumeDown, QT_TRANSLATE_NOOP("QShortcut", "Volume Down") }, |
1247 | + { Qt::Key_VolumeMute, QT_TRANSLATE_NOOP("QShortcut", "Volume Mute") }, |
1248 | + { Qt::Key_VolumeUp, QT_TRANSLATE_NOOP("QShortcut", "Volume Up") }, |
1249 | + { Qt::Key_BassBoost, QT_TRANSLATE_NOOP("QShortcut", "Bass Boost") }, |
1250 | + { Qt::Key_BassUp, QT_TRANSLATE_NOOP("QShortcut", "Bass Up") }, |
1251 | + { Qt::Key_BassDown, QT_TRANSLATE_NOOP("QShortcut", "Bass Down") }, |
1252 | + { Qt::Key_TrebleUp, QT_TRANSLATE_NOOP("QShortcut", "Treble Up") }, |
1253 | + { Qt::Key_TrebleDown, QT_TRANSLATE_NOOP("QShortcut", "Treble Down") }, |
1254 | + { Qt::Key_MediaPlay, QT_TRANSLATE_NOOP("QShortcut", "Media Play") }, |
1255 | + { Qt::Key_MediaStop, QT_TRANSLATE_NOOP("QShortcut", "Media Stop") }, |
1256 | + { Qt::Key_MediaPrevious, QT_TRANSLATE_NOOP("QShortcut", "Media Previous") }, |
1257 | + { Qt::Key_MediaNext, QT_TRANSLATE_NOOP("QShortcut", "Media Next") }, |
1258 | + { Qt::Key_MediaRecord, QT_TRANSLATE_NOOP("QShortcut", "Media Record") }, |
1259 | + { Qt::Key_HomePage, QT_TRANSLATE_NOOP("QShortcut", "Home Page") }, |
1260 | + { Qt::Key_Favorites, QT_TRANSLATE_NOOP("QShortcut", "Favorites") }, |
1261 | + { Qt::Key_Search, QT_TRANSLATE_NOOP("QShortcut", "Search") }, |
1262 | + { Qt::Key_Standby, QT_TRANSLATE_NOOP("QShortcut", "Standby") }, |
1263 | + { Qt::Key_OpenUrl, QT_TRANSLATE_NOOP("QShortcut", "Open URL") }, |
1264 | + { Qt::Key_LaunchMail, QT_TRANSLATE_NOOP("QShortcut", "Launch Mail") }, |
1265 | + { Qt::Key_LaunchMedia, QT_TRANSLATE_NOOP("QShortcut", "Launch Media") }, |
1266 | + { Qt::Key_Launch0, QT_TRANSLATE_NOOP("QShortcut", "Launch (0)") }, |
1267 | + { Qt::Key_Launch1, QT_TRANSLATE_NOOP("QShortcut", "Launch (1)") }, |
1268 | + { Qt::Key_Launch2, QT_TRANSLATE_NOOP("QShortcut", "Launch (2)") }, |
1269 | + { Qt::Key_Launch3, QT_TRANSLATE_NOOP("QShortcut", "Launch (3)") }, |
1270 | + { Qt::Key_Launch4, QT_TRANSLATE_NOOP("QShortcut", "Launch (4)") }, |
1271 | + { Qt::Key_Launch5, QT_TRANSLATE_NOOP("QShortcut", "Launch (5)") }, |
1272 | + { Qt::Key_Launch6, QT_TRANSLATE_NOOP("QShortcut", "Launch (6)") }, |
1273 | + { Qt::Key_Launch7, QT_TRANSLATE_NOOP("QShortcut", "Launch (7)") }, |
1274 | + { Qt::Key_Launch8, QT_TRANSLATE_NOOP("QShortcut", "Launch (8)") }, |
1275 | + { Qt::Key_Launch9, QT_TRANSLATE_NOOP("QShortcut", "Launch (9)") }, |
1276 | + { Qt::Key_LaunchA, QT_TRANSLATE_NOOP("QShortcut", "Launch (A)") }, |
1277 | + { Qt::Key_LaunchB, QT_TRANSLATE_NOOP("QShortcut", "Launch (B)") }, |
1278 | + { Qt::Key_LaunchC, QT_TRANSLATE_NOOP("QShortcut", "Launch (C)") }, |
1279 | + { Qt::Key_LaunchD, QT_TRANSLATE_NOOP("QShortcut", "Launch (D)") }, |
1280 | + { Qt::Key_LaunchE, QT_TRANSLATE_NOOP("QShortcut", "Launch (E)") }, |
1281 | + { Qt::Key_LaunchF, QT_TRANSLATE_NOOP("QShortcut", "Launch (F)") }, |
1282 | + { Qt::Key_MonBrightnessUp, QT_TRANSLATE_NOOP("QShortcut", "Monitor Brightness Up") }, |
1283 | + { Qt::Key_MonBrightnessDown, QT_TRANSLATE_NOOP("QShortcut", "Monitor Brightness Down") }, |
1284 | + { Qt::Key_KeyboardLightOnOff, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Light On/Off") }, |
1285 | + { Qt::Key_KeyboardBrightnessUp, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Brightness Up") }, |
1286 | + { Qt::Key_KeyboardBrightnessDown, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Brightness Down") }, |
1287 | + { Qt::Key_PowerOff, QT_TRANSLATE_NOOP("QShortcut", "Power Off") }, |
1288 | + { Qt::Key_WakeUp, QT_TRANSLATE_NOOP("QShortcut", "Wake Up") }, |
1289 | + { Qt::Key_Eject, QT_TRANSLATE_NOOP("QShortcut", "Eject") }, |
1290 | + { Qt::Key_ScreenSaver, QT_TRANSLATE_NOOP("QShortcut", "Screensaver") }, |
1291 | + { Qt::Key_WWW, QT_TRANSLATE_NOOP("QShortcut", "WWW") }, |
1292 | + { Qt::Key_Sleep, QT_TRANSLATE_NOOP("QShortcut", "Sleep") }, |
1293 | + { Qt::Key_LightBulb, QT_TRANSLATE_NOOP("QShortcut", "LightBulb") }, |
1294 | + { Qt::Key_Shop, QT_TRANSLATE_NOOP("QShortcut", "Shop") }, |
1295 | + { Qt::Key_History, QT_TRANSLATE_NOOP("QShortcut", "History") }, |
1296 | + { Qt::Key_AddFavorite, QT_TRANSLATE_NOOP("QShortcut", "Add Favorite") }, |
1297 | + { Qt::Key_HotLinks, QT_TRANSLATE_NOOP("QShortcut", "Hot Links") }, |
1298 | + { Qt::Key_BrightnessAdjust, QT_TRANSLATE_NOOP("QShortcut", "Adjust Brightness") }, |
1299 | + { Qt::Key_Finance, QT_TRANSLATE_NOOP("QShortcut", "Finance") }, |
1300 | + { Qt::Key_Community, QT_TRANSLATE_NOOP("QShortcut", "Community") }, |
1301 | + { Qt::Key_AudioRewind, QT_TRANSLATE_NOOP("QShortcut", "Audio Rewind") }, |
1302 | + { Qt::Key_BackForward, QT_TRANSLATE_NOOP("QShortcut", "Back Forward") }, |
1303 | + { Qt::Key_ApplicationLeft, QT_TRANSLATE_NOOP("QShortcut", "Application Left") }, |
1304 | + { Qt::Key_ApplicationRight, QT_TRANSLATE_NOOP("QShortcut", "Application Right") }, |
1305 | + { Qt::Key_Book, QT_TRANSLATE_NOOP("QShortcut", "Book") }, |
1306 | + { Qt::Key_CD, QT_TRANSLATE_NOOP("QShortcut", "CD") }, |
1307 | + { Qt::Key_Calculator, QT_TRANSLATE_NOOP("QShortcut", "Calculator") }, |
1308 | + { Qt::Key_Clear, QT_TRANSLATE_NOOP("QShortcut", "Clear") }, |
1309 | + { Qt::Key_ClearGrab, QT_TRANSLATE_NOOP("QShortcut", "Clear Grab") }, |
1310 | + { Qt::Key_Close, QT_TRANSLATE_NOOP("QShortcut", "Close") }, |
1311 | + { Qt::Key_Copy, QT_TRANSLATE_NOOP("QShortcut", "Copy") }, |
1312 | + { Qt::Key_Cut, QT_TRANSLATE_NOOP("QShortcut", "Cut") }, |
1313 | + { Qt::Key_Display, QT_TRANSLATE_NOOP("QShortcut", "Display") }, |
1314 | + { Qt::Key_DOS, QT_TRANSLATE_NOOP("QShortcut", "DOS") }, |
1315 | + { Qt::Key_Documents, QT_TRANSLATE_NOOP("QShortcut", "Documents") }, |
1316 | + { Qt::Key_Excel, QT_TRANSLATE_NOOP("QShortcut", "Spreadsheet") }, |
1317 | + { Qt::Key_Explorer, QT_TRANSLATE_NOOP("QShortcut", "Browser") }, |
1318 | + { Qt::Key_Game, QT_TRANSLATE_NOOP("QShortcut", "Game") }, |
1319 | + { Qt::Key_Go, QT_TRANSLATE_NOOP("QShortcut", "Go") }, |
1320 | + { Qt::Key_iTouch, QT_TRANSLATE_NOOP("QShortcut", "iTouch") }, |
1321 | + { Qt::Key_LogOff, QT_TRANSLATE_NOOP("QShortcut", "Logoff") }, |
1322 | + { Qt::Key_Market, QT_TRANSLATE_NOOP("QShortcut", "Market") }, |
1323 | + { Qt::Key_Meeting, QT_TRANSLATE_NOOP("QShortcut", "Meeting") }, |
1324 | + { Qt::Key_MenuKB, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Menu") }, |
1325 | + { Qt::Key_MenuPB, QT_TRANSLATE_NOOP("QShortcut", "Menu PB") }, |
1326 | + { Qt::Key_MySites, QT_TRANSLATE_NOOP("QShortcut", "My Sites") }, |
1327 | + { Qt::Key_News, QT_TRANSLATE_NOOP("QShortcut", "News") }, |
1328 | + { Qt::Key_OfficeHome, QT_TRANSLATE_NOOP("QShortcut", "Home Office") }, |
1329 | + { Qt::Key_Option, QT_TRANSLATE_NOOP("QShortcut", "Option") }, |
1330 | + { Qt::Key_Paste, QT_TRANSLATE_NOOP("QShortcut", "Paste") }, |
1331 | + { Qt::Key_Phone, QT_TRANSLATE_NOOP("QShortcut", "Phone") }, |
1332 | + { Qt::Key_Reply, QT_TRANSLATE_NOOP("QShortcut", "Reply") }, |
1333 | + { Qt::Key_Reload, QT_TRANSLATE_NOOP("QShortcut", "Reload") }, |
1334 | + { Qt::Key_RotateWindows, QT_TRANSLATE_NOOP("QShortcut", "Rotate Windows") }, |
1335 | + { Qt::Key_RotationPB, QT_TRANSLATE_NOOP("QShortcut", "Rotation PB") }, |
1336 | + { Qt::Key_RotationKB, QT_TRANSLATE_NOOP("QShortcut", "Rotation KB") }, |
1337 | + { Qt::Key_Save, QT_TRANSLATE_NOOP("QShortcut", "Save") }, |
1338 | + { Qt::Key_Send, QT_TRANSLATE_NOOP("QShortcut", "Send") }, |
1339 | + { Qt::Key_Spell, QT_TRANSLATE_NOOP("QShortcut", "Spellchecker") }, |
1340 | + { Qt::Key_SplitScreen, QT_TRANSLATE_NOOP("QShortcut", "Split Screen") }, |
1341 | + { Qt::Key_Support, QT_TRANSLATE_NOOP("QShortcut", "Support") }, |
1342 | + { Qt::Key_TaskPane, QT_TRANSLATE_NOOP("QShortcut", "Task Panel") }, |
1343 | + { Qt::Key_Terminal, QT_TRANSLATE_NOOP("QShortcut", "Terminal") }, |
1344 | + { Qt::Key_Tools, QT_TRANSLATE_NOOP("QShortcut", "Tools") }, |
1345 | + { Qt::Key_Travel, QT_TRANSLATE_NOOP("QShortcut", "Travel") }, |
1346 | + { Qt::Key_Video, QT_TRANSLATE_NOOP("QShortcut", "Video") }, |
1347 | + { Qt::Key_Word, QT_TRANSLATE_NOOP("QShortcut", "Word Processor") }, |
1348 | + { Qt::Key_Xfer, QT_TRANSLATE_NOOP("QShortcut", "XFer") }, |
1349 | + { Qt::Key_ZoomIn, QT_TRANSLATE_NOOP("QShortcut", "Zoom In") }, |
1350 | + { Qt::Key_ZoomOut, QT_TRANSLATE_NOOP("QShortcut", "Zoom Out") }, |
1351 | + { Qt::Key_Away, QT_TRANSLATE_NOOP("QShortcut", "Away") }, |
1352 | + { Qt::Key_Messenger, QT_TRANSLATE_NOOP("QShortcut", "Messenger") }, |
1353 | + { Qt::Key_WebCam, QT_TRANSLATE_NOOP("QShortcut", "WebCam") }, |
1354 | + { Qt::Key_MailForward, QT_TRANSLATE_NOOP("QShortcut", "Mail Forward") }, |
1355 | + { Qt::Key_Pictures, QT_TRANSLATE_NOOP("QShortcut", "Pictures") }, |
1356 | + { Qt::Key_Music, QT_TRANSLATE_NOOP("QShortcut", "Music") }, |
1357 | + { Qt::Key_Battery, QT_TRANSLATE_NOOP("QShortcut", "Battery") }, |
1358 | + { Qt::Key_Bluetooth, QT_TRANSLATE_NOOP("QShortcut", "Bluetooth") }, |
1359 | + { Qt::Key_WLAN, QT_TRANSLATE_NOOP("QShortcut", "Wireless") }, |
1360 | + { Qt::Key_UWB, QT_TRANSLATE_NOOP("QShortcut", "Ultra Wide Band") }, |
1361 | + { Qt::Key_AudioForward, QT_TRANSLATE_NOOP("QShortcut", "Audio Forward") }, |
1362 | + { Qt::Key_AudioRepeat, QT_TRANSLATE_NOOP("QShortcut", "Audio Repeat") }, |
1363 | + { Qt::Key_AudioRandomPlay, QT_TRANSLATE_NOOP("QShortcut", "Audio Random Play") }, |
1364 | + { Qt::Key_Subtitle, QT_TRANSLATE_NOOP("QShortcut", "Subtitle") }, |
1365 | + { Qt::Key_AudioCycleTrack, QT_TRANSLATE_NOOP("QShortcut", "Audio Cycle Track") }, |
1366 | + { Qt::Key_Time, QT_TRANSLATE_NOOP("QShortcut", "Time") }, |
1367 | + { Qt::Key_Select, QT_TRANSLATE_NOOP("QShortcut", "Select") }, |
1368 | + { Qt::Key_View, QT_TRANSLATE_NOOP("QShortcut", "View") }, |
1369 | + { Qt::Key_TopMenu, QT_TRANSLATE_NOOP("QShortcut", "Top Menu") }, |
1370 | + { Qt::Key_Suspend, QT_TRANSLATE_NOOP("QShortcut", "Suspend") }, |
1371 | + { Qt::Key_Hibernate, QT_TRANSLATE_NOOP("QShortcut", "Hibernate") }, |
1372 | |
1373 | // -------------------------------------------------------------- |
1374 | // More consistent namings |
1375 | @@ -991,10 +1083,10 @@ int QKeySequencePrivate::decodeString(const QString &str, QKeySequence::Sequence |
1376 | |
1377 | QList<QModifKeyName> modifs; |
1378 | if (nativeText) { |
1379 | - modifs << QModifKeyName(Qt::CTRL, QShortcut::tr("Ctrl").toLower().append(QLatin1Char('+'))) |
1380 | - << QModifKeyName(Qt::SHIFT, QShortcut::tr("Shift").toLower().append(QLatin1Char('+'))) |
1381 | - << QModifKeyName(Qt::ALT, QShortcut::tr("Alt").toLower().append(QLatin1Char('+'))) |
1382 | - << QModifKeyName(Qt::META, QShortcut::tr("Meta").toLower().append(QLatin1Char('+'))); |
1383 | + modifs << QModifKeyName(Qt::CTRL, QShortcut::tr("Ctrl", "Ctrl key, used for shortcuts").toLower().append(QLatin1Char('+'))) |
1384 | + << QModifKeyName(Qt::SHIFT, QShortcut::tr("Shift", "Shift key, used for shortcuts").toLower().append(QLatin1Char('+'))) |
1385 | + << QModifKeyName(Qt::ALT, QShortcut::tr("Alt", "Alt key, used for shortcuts").toLower().append(QLatin1Char('+'))) |
1386 | + << QModifKeyName(Qt::META, QShortcut::tr("Meta", "Meta key, used for shortcuts").toLower().append(QLatin1Char('+'))); |
1387 | } |
1388 | modifs += *gmodifs; // Test non-translated ones last |
1389 | |
1390 | @@ -1086,7 +1178,7 @@ QString QKeySequence::encodeString(int key) |
1391 | static inline void addKey(QString &str, const QString &theKey, QKeySequence::SequenceFormat format) |
1392 | { |
1393 | if (!str.isEmpty()) |
1394 | - str += (format == QKeySequence::NativeText) ? QShortcut::tr("+") |
1395 | + str += (format == QKeySequence::NativeText) ? QShortcut::tr("+", "Symbol used to concatenate keys in shortcuts") |
1396 | : QString::fromLatin1("+"); |
1397 | str += theKey; |
1398 | } |
1399 | @@ -1111,13 +1203,13 @@ QString QKeySequencePrivate::encodeString(int key, QKeySequence::SequenceFormat |
1400 | { |
1401 | // On other systems the order is Meta, Control, Alt, Shift |
1402 | if ((key & Qt::META) == Qt::META) |
1403 | - s = nativeText ? QShortcut::tr("Meta") : QString::fromLatin1("Meta"); |
1404 | + s = nativeText ? QShortcut::tr("Meta", "Meta key, used for shortcuts") : QString::fromLatin1("Meta"); |
1405 | if ((key & Qt::CTRL) == Qt::CTRL) |
1406 | - addKey(s, nativeText ? QShortcut::tr("Ctrl") : QString::fromLatin1("Ctrl"), format); |
1407 | + addKey(s, nativeText ? QShortcut::tr("Ctrl", "Ctrl key, used for shortcuts") : QString::fromLatin1("Ctrl"), format); |
1408 | if ((key & Qt::ALT) == Qt::ALT) |
1409 | - addKey(s, nativeText ? QShortcut::tr("Alt") : QString::fromLatin1("Alt"), format); |
1410 | + addKey(s, nativeText ? QShortcut::tr("Alt", "Alt key, used for shortcuts") : QString::fromLatin1("Alt"), format); |
1411 | if ((key & Qt::SHIFT) == Qt::SHIFT) |
1412 | - addKey(s, nativeText ? QShortcut::tr("Shift") : QString::fromLatin1("Shift"), format); |
1413 | + addKey(s, nativeText ? QShortcut::tr("Shift", "Shift key, used for shortcuts") : QString::fromLatin1("Shift"), format); |
1414 | } |
1415 | |
1416 | |
1417 | @@ -1132,7 +1224,7 @@ QString QKeySequencePrivate::encodeString(int key, QKeySequence::SequenceFormat |
1418 | p += QChar((key-0x10000)%400+0xdc00); |
1419 | } |
1420 | } else if (key >= Qt::Key_F1 && key <= Qt::Key_F35) { |
1421 | - p = nativeText ? QShortcut::tr("F%1").arg(key - Qt::Key_F1 + 1) |
1422 | + p = nativeText ? QShortcut::tr("F%1", "Fx key, used for shortcuts").arg(key - Qt::Key_F1 + 1) |
1423 | : QString::fromLatin1("F%1").arg(key - Qt::Key_F1 + 1); |
1424 | } else if (key) { |
1425 | int i=0; |
1426 | diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h |
1427 | index 145d7bb..db943fc 100644 |
1428 | --- a/src/gui/kernel/qwidget_p.h |
1429 | +++ b/src/gui/kernel/qwidget_p.h |
1430 | @@ -360,6 +360,7 @@ public: |
1431 | |
1432 | #if defined(Q_WS_X11) |
1433 | void setWindowRole(); |
1434 | + virtual void checkWindowRole(); |
1435 | void sendStartupMessage(const char *message) const; |
1436 | void setNetWmWindowTypes(); |
1437 | void x11UpdateIsOpaque(); |
1438 | diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp |
1439 | index 4cc255d..927d739 100644 |
1440 | --- a/src/gui/kernel/qwidget_x11.cpp |
1441 | +++ b/src/gui/kernel/qwidget_x11.cpp |
1442 | @@ -719,6 +719,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO |
1443 | Q_ASSERT(id); |
1444 | XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder, |
1445 | &wsa); |
1446 | + XClassHint class_hint; |
1447 | + QByteArray appName = qAppName().toLatin1(); |
1448 | + class_hint.res_name = appName.data(); // application name |
1449 | + class_hint.res_class = const_cast<char *>(QX11Info::appClass()); // application class |
1450 | + XSetWMProperties(dpy, id, 0, 0, 0, 0, 0, 0, &class_hint); |
1451 | } else if (topLevel && !desktop) { // top-level widget |
1452 | if (!X11->wm_client_leader) |
1453 | create_wm_client_leader(); |
1454 | @@ -769,32 +774,40 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO |
1455 | // set EWMH window types |
1456 | setNetWmWindowTypes(); |
1457 | |
1458 | + // when we create a toplevel widget, the frame strut should be dirty |
1459 | + data.fstrut_dirty = 1; |
1460 | + |
1461 | + } else { |
1462 | + // non-toplevel widgets don't have a frame, so no need to |
1463 | + // update the strut |
1464 | + data.fstrut_dirty = 0; |
1465 | + } |
1466 | + |
1467 | + if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows |
1468 | // set _NET_WM_PID |
1469 | long curr_pid = getpid(); |
1470 | XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace, |
1471 | (unsigned char *) &curr_pid, 1); |
1472 | |
1473 | - // when we create a toplevel widget, the frame strut should be dirty |
1474 | - data.fstrut_dirty = 1; |
1475 | |
1476 | // declare the widget's window role |
1477 | + QByteArray windowRole; |
1478 | if (QTLWExtra *topData = maybeTopData()) { |
1479 | - if (!topData->role.isEmpty()) { |
1480 | - QByteArray windowRole = topData->role.toUtf8(); |
1481 | - XChangeProperty(dpy, id, |
1482 | - ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, |
1483 | - (unsigned char *)windowRole.constData(), windowRole.length()); |
1484 | - } |
1485 | + if (!topData->role.isEmpty()) |
1486 | + windowRole = topData->role.toUtf8(); |
1487 | + } |
1488 | + if (windowRole.isEmpty()) // use object name as a fallback |
1489 | + windowRole = objectName.toUtf8(); |
1490 | + if (!windowRole.isEmpty()) { |
1491 | + XChangeProperty(dpy, id, |
1492 | + ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, |
1493 | + (unsigned char *)windowRole.constData(), windowRole.length()); |
1494 | } |
1495 | |
1496 | // set client leader property |
1497 | XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER), |
1498 | XA_WINDOW, 32, PropModeReplace, |
1499 | (unsigned char *)&X11->wm_client_leader, 1); |
1500 | - } else { |
1501 | - // non-toplevel widgets don't have a frame, so no need to |
1502 | - // update the strut |
1503 | - data.fstrut_dirty = 0; |
1504 | } |
1505 | |
1506 | if (initializeWindow && q->internalWinId()) { |
1507 | @@ -2765,6 +2778,17 @@ void QWidgetPrivate::setWindowRole() |
1508 | (unsigned char *)windowRole.constData(), windowRole.length()); |
1509 | } |
1510 | |
1511 | +void QWidgetPrivate::checkWindowRole() |
1512 | +{ |
1513 | + Q_Q(QWidget); |
1514 | + if( !q->windowRole().isEmpty() || !q->internalWinId()) |
1515 | + return; |
1516 | + QByteArray windowRole = objectName.toUtf8(); // use as a fallback |
1517 | + XChangeProperty(X11->display, q->internalWinId(), |
1518 | + ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, |
1519 | + (unsigned char *)windowRole.constData(), windowRole.length()); |
1520 | +} |
1521 | + |
1522 | Q_GLOBAL_STATIC(QX11PaintEngine, qt_widget_paintengine) |
1523 | QPaintEngine *QWidget::paintEngine() const |
1524 | { |
1525 | diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp |
1526 | index e077d0d..424e525 100644 |
1527 | --- a/src/gui/painting/qwindowsurface_raster.cpp |
1528 | +++ b/src/gui/painting/qwindowsurface_raster.cpp |
1529 | @@ -220,9 +220,16 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi |
1530 | |
1531 | QRect br = rgn.boundingRect().translated(offset); |
1532 | #ifndef QT_NO_MITSHM |
1533 | - if (d_ptr->image->xshmpm) { |
1534 | - XCopyArea(X11->display, d_ptr->image->xshmpm, widget->handle(), d_ptr->gc, |
1535 | - br.x(), br.y(), br.width(), br.height(), wbr.x(), wbr.y()); |
1536 | + if (d_ptr->image->xshmimg && (br.width() * br.height() > 65536)) { |
1537 | + const QImage &src = d->image->image; |
1538 | + br = br.intersected(src.rect()); |
1539 | + // Hack to make sure we satisify the PutImage() constraints in the X server, |
1540 | + // since the doShmPutImage() route currently forces a migration to system ram. |
1541 | + wbr.setX(wbr.x() - br.x()); |
1542 | + br.setX(0); |
1543 | + br.setWidth(src.width()); |
1544 | + XShmPutImage(X11->display, widget->handle(), d_ptr->gc, d_ptr->image->xshmimg, |
1545 | + br.x(), br.y(), wbr.x(), wbr.y(), br.width(), br.height(), False); |
1546 | XSync(X11->display, False); |
1547 | } else |
1548 | #endif |
1549 | diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp |
1550 | index 7793b80..5e5c7cf 100644 |
1551 | --- a/src/gui/widgets/qmenu.cpp |
1552 | +++ b/src/gui/widgets/qmenu.cpp |
1553 | @@ -280,7 +280,7 @@ void QMenuPrivate::calcActionRects(QMap<QAction*, QRect> &actionRects, QList<QAc |
1554 | |
1555 | |
1556 | if (!sz.isEmpty()) { |
1557 | - max_column_width = qMax(max_column_width, sz.width()); |
1558 | + max_column_width = qMax(q->minimumWidth(), qMax(max_column_width, sz.width())); |
1559 | //wrapping |
1560 | if (!scroll && |
1561 | y+sz.height()+vmargin > dh - (q->style()->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, 0, q) * 2)) { |
1562 | diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp |
1563 | index 8a87b75..0fbc116 100644 |
1564 | --- a/src/gui/widgets/qtabbar.cpp |
1565 | +++ b/src/gui/widgets/qtabbar.cpp |
1566 | @@ -675,8 +675,8 @@ void QTabBarPrivate::refresh() |
1567 | layoutTabs(); |
1568 | makeVisible(currentIndex); |
1569 | q->update(); |
1570 | - q->updateGeometry(); |
1571 | } |
1572 | + q->updateGeometry(); |
1573 | } |
1574 | |
1575 | /*! |
1576 | diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp |
1577 | index d1cb82c..54537e5 100644 |
1578 | --- a/src/tools/moc/main.cpp |
1579 | +++ b/src/tools/moc/main.cpp |
1580 | @@ -94,7 +94,13 @@ static QByteArray combinePath(const char *infile, const char *outfile) |
1581 | inSplitted.prepend(QLatin1String("..")); |
1582 | } |
1583 | inSplitted.append(inFileInfo.fileName()); |
1584 | +#ifdef Q_WS_WIN |
1585 | + const QString rel = inSplitted.join(QLatin1String("/")); |
1586 | + const QString abs = inFileInfo.absoluteFilePath(); |
1587 | + return QFile::encodeName(rel.length() < abs.length() ? rel : abs); |
1588 | +#else |
1589 | return QFile::encodeName(inSplitted.join(QLatin1String("/"))); |
1590 | +#endif |
1591 | } |
1592 | |
1593 |